
2026/01/17 17:46
**Show HN: Amazon S3からダウンロードせずに医療画像(ギガバイト規模)をストリーミングする方法**
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
要約:
WSI Streamerは、軽量でクラウドネイティブなタイルサーバーです。Amazon S3に保存された全スライド画像(WSI)を1つのデプロイコマンドだけで配信します。Rustで構築されており、Cargo、Git、またはDocker経由で入手可能です。
wsi-streamer s3://my-slides-bucket を実行すると、自動的にポート3000でタイルを提供し始めます。このサーバーは標準のHTTPレンジリクエストを通じて画像タイルをストリーミングし、一般的なWSI形式をサポートし、迅速なプレビュー用に組み込みビューアも付属しています。S3アクセスにはHMAC‑SHA256署名付きURLを生成してセキュリティを強化し、マルチレベルキャッシュで遅延を削減します。
将来の拡張としては、オプション認証(
--auth-enabled)、CLIフラグまたは環境変数によるより柔軟な設定、ローカル開発用にMinIOと共にDocker Composeセットアップが含まれます。wsi-streamer check … のような検証ツールで、デプロイ前に接続性やスライドの利用可能性を確認できます。
WSI Streamerは病理学研究室、研究チーム、および診断ソフトウェアベンダーにとって、クラウド上で大規模なWSIデータセットをホストする作業を簡素化します。インフラコストを削減し、協力体制を迅速化できるほか、既存のWebベースビューアソリューションや診断パイプラインに統合できます。
要約骨格
本文が主に伝えようとしていること(メインメッセージ)
WSI Streamerはクラウドネイティブなタイルサーバーで、S3から直接全スライド画像を配信し、デプロイには1つのコマンドだけで済む。
根拠 / 推論(なぜそう言っているか)
Rustで構築され、Cargo、Git、Docker経由でインストール可能です。
wsi-streamer s3://my-slides-bucket の例はポート3000で即座に動作を開始します。HTTPレンジリクエストでタイルをストリーミングし、一般的なWSI形式をサポートし、組み込みビューアも付属しています。
関連ケース / 背景(文脈・過去の事象・周囲情報)
このツールは既存のOpenSeadragonビューアとS3ストレージプラクティスに基づき構築され、HMAC‑SHA256署名付きURLで安全なアクセスを提供し、マルチレベルキャッシュを採用しています。MITライセンス下で配布され、活発なコントリビューションワークフローがあります。
今後起こり得ること(将来の開発・予測)
将来的には認証機能(
--auth-enabled)、CLIフラグや環境変数による設定の柔軟化、ローカル開発用にMinIOとDocker Composeを使用する構成が進められます。wsi-streamer check … のような検証コマンドで接続性やスライド利用可能性をテストできます。
影響(ユーザー / 企業 / 業界)
病理学研究室や研究グループは、大規模WSIデータセットをクラウドに迅速にホストでき、アクセス性と協力体制が向上し、インフラコストが削減されます。企業は診断パイプラインやWebベースビューアソリューションへ統合できます。
本文
WSI Streamer
Whole Slide Images(WSI)向けのモダンなクラウドネイティブタイルサーバーです。
S3 から直接タイルを提供するため、コマンド一つで起動できます。
インストール
Rust が必要です。代替手段は以下に記載しています。
cargo install wsi-streamer
ローカル環境でのクイックスタート
wsi-streamer s3://my-slides-bucket --s3-region eu-west-3
ブラウザで http://localhost:3000/view/sample.svs を開くとスライドが表示されます。
なぜ WSI Streamer なのか?
- 範囲ベースのストリーミング – HTTP の Range リクエストを用いてタイルに必要なバイトだけを取得します。ローカルファイルは不要です。
- 組み込みビューア – OpenSeadragon ベースの Web ビューアでパン・ズーム・ダークテーマが利用可能です。
- ネイティブフォーマットサポート – Aperio SVS とピラミッド構造 TIFF を解析する Rust パーサーを備えています。
- 本番向け設計 – HMAC‑SHA256 署名付き URL による認証を採用しています。
- マルチレベルキャッシュ – スライド・ブロック・エンコード済みタイルまでキャッシュします。
crates.io からインストール
cargo install wsi-streamer
ソースからビルド
git clone https://github.com/PABannier/WSIStreamer.git cd WSIStreamer cargo build --release
Docker で実行
# GitHub Container Registry から取得 docker run -p 3000:3000 \ -e WSI_S3_BUCKET=my-bucket \ ghcr.io/pabannier/wsistreamer:latest
ローカル開発用に MinIO を利用する場合は Docker Compose も使用できます。
docker compose up --build
使用方法
基本コマンド
# S3 からスライドを提供 wsi-streamer s3://my-slides # カスタムポートで起動 wsi-streamer s3://my-slides --port 8080 # MinIO 等の S3 対応ストレージを利用 wsi-streamer s3://slides --s3-endpoint http://localhost:9000
API
# スライド一覧取得 curl http://localhost:3000/slides # スライドメタデータ取得 curl http://localhost:3000/slides/sample.svs # タイル取得(レベル 0、位置 0,0) curl http://localhost:3000/tiles/sample.svs/0/0/0.jpg -o tile.jpg # サムネイル取得 curl "http://localhost:3000/slides/sample.svs/thumbnail?max_size=256" -o thumb.jpg
認証
# HMAC‑SHA256 認証を有効化 wsi-streamer s3://my-slides --auth-enabled --auth-secret "$SECRET" # 署名付き URL を生成 wsi-streamer sign \ --path /tiles/slide.svs/0/0/0.jpg \ --secret "$SECRET" \ --base-url http://localhost:3000
認証を有効にすると、Web ビューアは自動で認証処理を行います。
バリデーション
# S3 接続確認 wsi-streamer check s3://my-slides # 利用可能なスライド一覧取得 wsi-streamer check s3://my-slides --list-slides # 特定のスライドをテスト wsi-streamer check s3://my-slides --test-slide sample.svs
設定
すべてのオプションは CLI フラグまたは環境変数で設定できます。
| オプション | 環境変数 | デフォルト | 説明 |
|---|---|---|---|
| | 0.0.0.0 | バインドアドレス |
| | 3000 | HTTP ポート |
| | — | S3 バケット名 |
| | — | カスタム S3 エンドポイント |
| | us-east-1 | AWS リージョン |
| | false | 認証を有効化 |
| | — | HMAC シークレットキー |
| | 100 | キャッシュするスライド数上限 |
| | 100MB | タイルキャッシュサイズ |
| | 80 | JPEG 品質(1‑100) |
| | any | 許可する CORS オリジン |
詳細は
wsi-streamer --help を参照してください。
API リファレンス
| エンドポイント | 説明 |
|---|---|
| ヘルスチェック |
| Web ビューア |
| タイル取得 |
| スライド一覧 |
| スライドメタデータ |
| サムネイル |
| DZI ディスクリプタ |
完全な仕様は
API_SPECIFICATIONS.md に記載されています。
対応フォーマット
| フォーマット | 拡張子 | 圧縮方式 |
|---|---|---|
| Aperio SVS | | JPEG, JPEG 2000 |
| ピラミッド TIFF | , | JPEG, JPEG 2000 |
ファイルはタイル化(ストリップ化ではない)かつピラミッド構造である必要があります。
ライセンス
MIT。詳細は
LICENSE をご覧ください。
コントリビューション
Issue と Pull Request は歓迎です。詳しくは
CONTRIBUTING.md を参照してください。