この記事でわかること#
- EBRAINSのGUIダウンロードが失敗しやすい理由
requests+fairgraph+tqdmを使った自動ダウンロードスクリプトの作り方- リトライ・レジューム(途中再開)の実装方法
そもそもEBRAINSって何?#
EBRAINS は欧州の神経科学データプラットフォームで、脳画像や病理データなどの研究データが公開されている。今回はそこにある病理画像データセット(.ndpi形式、1ファイル数GB)を大量にダウンロードしたかった。
GUIからのダウンロードが全然うまくいかない#
ZIPダウンロードを試みた#
まず「まとめてZIPでダウンロード」を試みた。
が、失敗。
よく考えると当たり前で、57ファイル × 約1.5GB = 約85GB をサーバー側で圧縮しながら1本のストリームで送ってくるわけで、途中で切れたら最初からやり直しになる。実際タイムアウトで切れた。
個別にGUIからダウンロードを試みた#
じゃあ1ファイルずつブラウザからダウンロードしようとしたが、これも途中で切れることがあった。ブラウザはレジューム(途中再開)に対応していないことが多いので、切れたら全部やり直し。1.5GBを何度もダウンロードし直すのはさすがにきつい。
原因#
EBRAINSのデータは実際には裏側のストレージ(rgw.cscs.ch、スイスのCSCSが運営)から配信されていて、プロキシ経由の構造になっている。
ブラウザ
↓
data-proxy.ebrains.eu
↓
rgw.cscs.ch ← ここが不安定
このバックエンドが一時的に応答を止めることがあり、タイムアウトが発生する。GUIでもスクリプトでも同じ経路を通るので避けられない。
自動ダウンロードスクリプトを作った#
作ったもの#
- EBRAINSにログインしてトークンを取得
annotation.csv(UUID・診断名の対応表)を取得- 指定した診断名でフィルタリング
- 該当ファイルを順番にダウンロード(リトライ・レジューム付き)
使い方#
uv run run.py --diagnosis "Fibrous meningioma"
複数診断名の同時指定も可。
uv run run.py --diagnosis Meningioma Schwannoma
技術スタック#
| ライブラリ | 用途 |
|---|---|
fairgraph | EBRAINSのKnowledge GraphへのOAuth認証・トークン取得 |
requests | HTTPダウンロード(ストリーミング・レジューム対応) |
tqdm | プログレスバー表示 |
レジューム対応#
HTTPの Range ヘッダーを使って、途中まで落とせたファイルの続きから再開できるようにした。
# 例:500MB済みなら
Range: bytes=524288000-
ファイルが中途半端に残っていても、サイズを読んで続きをリクエストするだけ。
リトライ対応#
ネットワーク系のエラー(タイムアウト・接続切断など)が出たら最大5回まで自動でリトライする。実際の動作ログ:

2番目のファイルで465MBのところでタイムアウトが発生したが、そこから自動で再開して無事完了している。
まとめ#
GUIからのダウンロードがうまくいかない場合、原因はだいたいサーバー側の不安定さで、こちら側でできることは気合いで粘るくらい。
スクリプト化してしまえばあとは放置でよくなるので、大量ファイルのダウンロードには素直に自動化するのが吉。