
2026/10/04 2:35
私の35ミリフィルムスキャンパイプラインの自動化
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
プロジェクトの主な成果は、従来の手作業による方法で巻頭ごとに約 4 時間かかっていたため、関連する燃え尽き症候群を大幅に軽減した、効率的なデジタルワークフローの実現です。このワークフローは、以前 AI エージェントを用いてハードウェア制御を試みた際、Canon AE-1P SLR スキャナーが誤作動して損傷し緊急修理が必要となった調査から発展しました。調査により、カーリッジの逆方向移動がモーターをエンドストッパに押し込み、白黒の空スキャンを引き起こしていたことが判明しています。最終的なワークフローでは、VueScan ソフトウェアとカスタムコード(ネガ変換用)を組み合わせており、フレーム位置合わせには特定の numpy ルーチンを利用します。尘埃と傷の除去については、画像解析を用いてサングリンツ(陽光による反射光)やグレインなどのアーティファクトを識別し、コンテキスト認識閾値付きの LaMa 補完モデルを適用します。メタデータ指数化は、Ollama上でローカルに動作する Qwen3-VLによって処理され、カメラ、レンズ、日付、フィルムタイプといった検索可能なタグを迅速に生成します。ストレージは 4TB ハードドライブ上に保持され、サイトホスティングは Cloudflare R2 を使用しており、従来の開発手法に対する費用対効果の高い代替手段を提供しています。プロジェクトの culmination(集大成)として、ユーザーが 35mm ロールを仮想上で巻き戻し、オリジナルのラベルアートを楽しむことができる没入型の Three.js エクスペリエンスを実現しています。完全自動化されたエンタープライズソリューションを採用するのではなく、プロセスに対する自己制御を維持することにより、著者は個人的なクリエイティブ表現を最優先しつつ、長き編集セッションに縛られることなく画像撮影の行為そのものを享受しながらアーカイブの拡張を続けています。
本文
デジタル暗房:アナログ写真の AI 自動化とウェブ公開プロジェクト
プロジェクトの背景と課題
写真撮影には、映像をレンズで捉え、構図を整え、完成した作品に手掛けるという特有の感触があります。作者はデジタル一眼レフやミラーレスカメラを試みた後、父が愛用していたCanon AE-1Pというアナログ・スローアクシスカメラに深い愛情を抱くようになりました。
フィルム写真撮影はシンプルでありながら、以下の特性を持っています。
- 光をプラスチックのフィルム上に露光させ、化学的にイメージを焼き付ける技術が必要です。
- 照明条件、フィルムの種類、レンズによって魔法のようにユニークな構図が得られます。
しかし、何年もの作業を経て作者は以下の課題に直面しました。
- 膨大な手作業: 1 ロール(36 枚)のスキャンと編集に平均約4 時間を要します。
- 繊細な作業環境: フィルムは繊細で、ホコリや傷を防ぐため慎重さが求められます。
- 時間の偏り: 画像処理に費やす時間が撮影する時間を上回っており、疲弊しました。
そこで、「業務効率化(streamline operations)」を図ることを目的として、デジタルラボ全体の自動化と、個人による公開サイトの構築を目指しました。
仮説:AI を活用した自動化への試行錯誤
まずは「プロセスから完全に外れること」を目指し、Claude とオープンソースのスキャナードライバースタック(SANE)を用いてスキャンから編集までエンドツーエンドを任せることを試みました。
失敗とトラブル
- 事故: Claude が SANE を使用した際、X/Y 軸の方向を逆転させ、スキャナーのギア機構に破損に至らせる事態になりました。
- 対抗措置: 新品購入費用の 200 ドル節約のために緊急修理(手術)を余儀なくされ、時間を浪費しました。
チャットログ:スキャナーの診断
状況: スキャン結果が白く映り込み、センサー全体で障害物がない光線が直進している状態。
Shan: 「フィルムの装着は確認しましたが、設定の問題かもしれませんね。」 Claude: 「856 行すべてが同一の『滑らかな垂直帯模様』です。照明ムラではなく、センサーが一直線の光を見ています。」 Shan: 「Vuescan では動きませんでした。「カチッ」という音がした気がします。」 Claude: 「『カチッ』はスキャン操作中に発生しました。Genesys バックエンドが carriage(移動機構)を元に戻すために、盲目な逆方向移動を実行しましたが、モーターがすでにバックストップ逆向きに駐車している状態をさらに押し続けた結果です。」 結論: 7 回のスキャンで 7 回この現象が起きたため、システムとして成立せず、既存のシステムベースでの運用に戻す判断がなされました。
解決策の確立
- 互換性の高いライセンスソフトウェア「Vuescan」を採用。
- ロボットアームによる物理的ローディングは自動化未定のため、人工操作を維持しつつ後工程との連携を図る方針で再構築しました。
解決策:Studio Learning(スタジオ学習)のシステム
失敗から思考プロセスを転換させ、Vuescan スキャンデータを処理する完全なスイートが完成しました。
1. ネガからポジへのコンバージョン
- 手法: NumPy ルーチンによる簡潔なコードで反転処理を実行。
- 特徴:
- ロール全体の色分布を測定し、各フレーム内で調整を行うことで36 フレーム一貫性を達成しました。
- AI エージェントは「ロールの空白リードスロット」を基準として色補正の重みを決定。
- 夕日のような劇的な色調修正は避け、統一された見た目に保ちます。
チャット:変換テストの結果
- 29 フレームのうち 28 フレームで通過しました。
- カスタムコンバージョンは十分な品質であり、darktable の介入が不要です。
- AI 出力は明るくニュートラルですが、人間による微調整(好みの色味)も可能にしています。
2. ホコリ除去と編集
- 課題: 単純なコードでは解決できず、モデルの活躍が求められます。
- 例:ビーチの写真で約 2,000 個の太陽光反射(サングリント)を誤ってホコリと検出する事態が発生しました。
- 対策:
- 周囲が滑らかな領域でのみ処理を行う文脈付与。
- 検出された斑点はLaMa(インペインターモデル)で埋められ、Nearby フィルム部分の詳細をコピーしてパッチ適用。Photoshop の修復ツールに似た仕組みです。
- 運用の柔軟性:
- すべての領域を自動埋める必要はありません。カスタムしきい値を設定。
- 粒状な斑点などは検査のために保持したり、個別/バッチで承認・却下できます。
- パラメータ制御: 露出やコントラストなどの調整は、AI がアクセス可能な範囲に埋め込みます。
3. フレームレビュー
- ステータス表示:
- 🔵 緑色の円: ホコリ除去が自動で完了。
- 🟡 黄色い円: 手動での検証待ち。
4. メタデータインデックス化
- 目的: データインデックス化の負担を解消し、後からの検索を容易にする。
- 仕組み:
- スキャンが入力されると、Ollama で動作するQwen3-VLが各完了フレームを確認します。
- 約5 秒(タグドラフト作成は 3 秒)でタグを生成し、カメラ情報・レンズ・日付・フィルム銘柄を加えて包括的なライブラリを構築。
効果: このプロセスにより、作者の役割は「処理」から「撮影した結果を見ること」と「次へのインスピレーションを得ること」へと移行しました。
ギャラリー:保存から公開へ
20 ロール以上のパイプライン通過後、次なる課題は「どこに保存・共有するか」でした。現在は 4TB HDD に常時保存しつつ、Web 経由での共有も目指しています。
公開ワークフロー
- 環境: Cloudflare R2 バケットへのアップロード。
- 機能: スタジオ機能を拡張し、公開機能を有効化。
- 選択されたフレームは、表示順に R2 にアップロードされ、タグ付きで公開されます。
ロールごとの写真紹介(インタラクティブな展示)
- コンセプト: サムネイルグリッドの「安っぽさ」を避け、現像ラボでのフィルム展開風景から着想を得た**「現実主義的表現」**。
- 実装:
でモデル化したフィルムカニスターが覆われたフェルト製のテーブルを実装。3.js- カニスターには実際のラベルアートとランダムな傷跡(スクラッチ)を設定。
- インタラクション: 一つを持ち上げるとフィルムを引き出し、フレームを露光表示。その後再びフェルトテーブルへ落下する仕組みです。
総括
- プロジェクト規模: 11 日間の開発で64 コミット。
- 成果物: 2020 年から現在までの計**22 ロール(314 枚)**の写真が収められたギャラリー。
- 未来への計画: 継続的な資金投入により、ロールの購入・現像を行い、画像を追加していく予定。
このプロジェクトの魅力
単にスキャナーとプロセスを扱うだけでなく、**「手作業のプロセスを楽しみつつ他者に任せる」**というジレンマを解消しました。
- コンピュータ画面から離れ、世界を探求する時間を存分に楽しむことに集中できます。
- 異なる視点から写真を捉える行為そのものが魅力であり、暗室での作業のような没入感を提供しています。
これらはすべて電源を切っても楽しんでいただける、インターネット上の私の一角となっています。