**Show HN: Amazon S3からダウンロードせずに医療画像(ギガバイト規模)をストリーミングする方法**

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 フラグまたは環境変数で設定できます。

オプション環境変数デフォルト説明
--host
WSI_HOST
0.0.0.0バインドアドレス
--port
WSI_PORT
3000HTTP ポート
--s3-bucket
WSI_S3_BUCKET
S3 バケット名
--s3-endpoint
WSI_S3_ENDPOINT
カスタム S3 エンドポイント
--s3-region
WSI_S3_REGION
us-east-1AWS リージョン
--auth-enabled
WSI_AUTH_ENABLED
false認証を有効化
--auth-secret
WSI_AUTH_SECRET
HMAC シークレットキー
--cache-slides
WSI_CACHE_SLIDES
100キャッシュするスライド数上限
--cache-tiles
WSI_CACHE_TILES
100MBタイルキャッシュサイズ
--jpeg-quality
WSI_JPEG_QUALITY
80JPEG 品質(1‑100)
--cors-origins
WSI_CORS_ORIGINS
any許可する CORS オリジン

詳細は

wsi-streamer --help
を参照してください。


API リファレンス

エンドポイント説明
GET /health
ヘルスチェック
GET /view/{slide_id}
Web ビューア
GET /tiles/{slide_id}/{level}/{x}/{y}.jpg
タイル取得
GET /slides
スライド一覧
GET /slides/{slide_id}
スライドメタデータ
GET /slides/{slide_id}/thumbnail
サムネイル
GET /slides/{slide_id}/dzi
DZI ディスクリプタ

完全な仕様は

API_SPECIFICATIONS.md
に記載されています。


対応フォーマット

フォーマット拡張子圧縮方式
Aperio SVS
.svs
JPEG, JPEG 2000
ピラミッド TIFF
.tif
,
.tiff
JPEG, JPEG 2000

ファイルはタイル化(ストリップ化ではない)かつピラミッド構造である必要があります。


ライセンス

MIT。詳細は

LICENSE
をご覧ください。


コントリビューション

Issue と Pull Request は歓迎です。詳しくは

CONTRIBUTING.md
を参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/01/18 5:44

トルコ語の格変化をベースとするプログラミング言語

## Japanese Translation: **(全ての重要ポイントを組み込んだもの)** --- ## Kip – ケースベース型研究言語 Kip は、トルコ語の格変化を型システムと構文に埋め込む実験的プログラミング言語です。名詞格接尾辞と母音調和を用いて引数関係を表現し、関数引数の順序を柔軟に変更できる一方で意味は明確に保たれます。 ### コア機能 | 機能 | 説明 | |------|------| | **引数順序** | 格接尾辞が役割を決定します。例:`(5'le 3'ün farkını) yaz.` と `(3'ün 5'le farkını) yaz.` は同じ意味です。 | | **帰納型** | トルコ語構文で宣言します。例:`Bir doğal-sayı ya sıfır ya da bir doğal-sayının ardılı olabilir.` | | **多相型** | 同様に宣言します。例:`Bir (öğe listesi) ya boş ya da bir öğenin bir öğe listesine eki olabilir.` | | **パターンマッチング** | 条件付き接尾辞 `-sa/-se` を使用し、入れ子パターンとワイルドカード `_` をサポートします。 | | **定数** | キーワード `diyelim` で宣言します。例:`sıfırın ardılına bir diyelim.` | | **組み込み型** | 整数 (`tam-sayı`) – 算術、比較、階乗;文字列 (`dizge`) – 長さ、連結、整数へのパース。 | | **I/Oプリミティブ** | 出力:`yazmak/yaz`;入力:`okumak/oku`;シーケンス接尾辞 `-ip/-ıp/-up/-üp`。 | ### 形態論と実装 * Kip はトルコ語の形態解析に TRmorph の有限状態変換器を利用します。曖昧な単語はすべてのパースで表現され、アポストロフィで解消できます。 * コンパイラは Foma(パッケージマネージャ経由)と Haskell Stack を使用し、REPL (`stack exec kip`) で実行するかファイルを `--exec` で実行します。WASM プレイグラウンドは `playground/` 以下にあります。 ### プロジェクト状況 Kip は研究専用プロジェクトです。構文と挙動は進化する可能性があります。キャッシュされたバイトコードファイル (`.iz`) は、コンパイラが変更されると無効になります。 --- この要約はすべての主要ポイントを反映し、元のテキストに忠実でありながらメインメッセージを明確かつ簡潔に保っています。

2026/01/17 20:15

ASCII文字はピクセルではない:ASCIIレンダリングの深掘り解析

## Japanese Translation: **概要** この記事では、各文字を多次元「形状ベクトル」でモデル化することで鮮明で高コントラストのASCII画像を生成できるインタラクティブな画像→ASCIIレンダラーを紹介しています。従来の最近傍サンプリングはセルごとに1ピクセルとして扱い、ジャギーやぼやけた出力が生じます。スーパーサンプリングはジャギーを減らしますが、単一の輝度値へ平均化するためエッジがまだぼやけてしまいます。 新しい手法では、セルの上/下と左/右の半分を小さな円でサンプリングし、各グリフがどのように空間を占有しているかを捉えます。これにより6次元(方向性コントラスト用の外部サンプリングをオプションで追加)形状ベクトルが生成されます。このベクトル空間で最近傍検索を行い、グリッドセルごとに最適な文字を選択します。ベクトル要素を指数関数的に上げることでコントラストを増幅し(全体の対比を高めつつ均一な勾配を保持)、さらに隣接セルをサンプリングする方向性コントラストでシャープ化します。 フレームごとのユークリッド距離計算とサンプリング収集によるパフォーマンスボトルネックは、**k‑d木インデックス**、**量子化キーを用いたキャッシュ**、およびサンプリングとコントラスト段階の **GPUアクセラレーション** を組み合わせて解消し、モバイルデバイスでもスムーズなFPSを実現しています。著者はさらに、各文字に異なる色/明度を割り当てる方法や高次元サンプリングベクトルの探索などの拡張可能性についても概説しています。 最後に、読者は将来の投稿でこれらの開発内容を取り上げる予定のメールリストへの登録を勧められています。

2026/01/18 7:19

ライトモード・インフレーション (Note: “ライトモード”は「軽い(低エネルギー)モード」を指し、物理学や宇宙論の文脈で使われることが多いです。)

## Japanese Translation: **改善された概要** この記事は、macOS のライトモードウィンドウが過去 16 年で徐々に明るくなってきたことを示しており、Snow Leopard(2012)では平均明度が約 71 %だったのが、Mac OS Tahoe ではほぼ 100 %に上昇しています。著者はスクリーンショットをクロップし、Pillow を使ってグレースケールへ変換した後、ピクセル平均強度を算出することで測定しました。この分析は画面全体やアプリケーションの明るさではなく、**ウィンドウクロム**に特化しています。2020 年末に M1 MacBook Air にアップグレード(Big Sur でウィンドウ明度が 85 %から 97 %に増加)した後、著者はダークモードへ切り替えました。ダークモードは Mojave(2018)で導入されました。本研究では、典型的なライトモードウィンドウの最も暗い色が Tahoe では 97 %明度に達する一方、Snow Leopard では 90 %であることを指摘しています。また、iOS 26 の HDR 実装は一部要素を 100 %以上の白に押し上げる可能性があり、知覚される明るさを過大評価する恐れがあると述べています。 著者は、このより明るい UI デザインへの移行がコントラストバイアスによってダーク背景をより魅力的にしていると主張し、ユーザーの目の疲労を軽減しつつアプリ間の視覚的区別を保つために中程度のグレー(約 50 %)インターフェースを推奨しています。将来のデザインへのインスピレーションとして、著者はより高い明るさレベルにもかかわらず、Yosemite などの古い macOS スタイルを好んでいます。 このバージョンは主要なポイントすべてを保持し、ダークモード導入に関する余計な因果推論を削除し、ウィンドウクロムへの焦点を明確にしています。

**Show HN: Amazon S3からダウンロードせずに医療画像(ギガバイト規模)をストリーミングする方法** | そっか~ニュース