
2026/05/21 23:01
2021 年モデルの MacBook で、Gemma4-31B(50GB のスワップ領域を使用)を用いて、1 年分の動画をローカルでインデックス化
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
著者は、高額で不安定な SaaS サブスクリプションを回避し、何年分のラベル未設定の旅行映像データを処理するための費用対効果の高いオフラインファースト戦略を示しています。生成 AI が実在するブランドコンテンツでのハルシネーション(信頼性やトリップアドバイザーへのリスクをもたらす)および非現実的な投稿頻度目標という 2 つの主要な理由から標準的な業界ツールを拒否した後、彼らはカスタムローカルワークフローを構築しました。このシステムは、物理的 SSD に格納されたギガバイト規模のアーカイブから直接メタデータを抽出するために DaVinci Resolve Studio 21 と Claude Code およびオープンソース MCP を組み合わせ、数ヶ月間にわたりソーシャルチャンネルを沈黙させていた編集のボトルネックを解決します。重要な革新は、各クリップごとに「サイドカー」マークダウンファイルを使用することで、デバイスの変更にもわたるデータの持ち運び性と回復性を確保することです。このアプローチにより、ローカル LLM(例:Gemma 4)とハルシネーションを防ぐ正確なインデックススキーマを活用して、月間の運用コストは 140 ドルからわずか 22 ドルに削減されました。当面の次のステップは、この新しいインデックスに基づいてクリップを編集するエディタレイヤーを構築することであり、チャンネルのリランチへの道を開きつつ、信頼性と法的懸念のため証言者の AI バイスクローニングは厳しく避けることです。結局のところ、このワークフローはクラウド料金やデータプライバシーリスクなしで広大で構造化されていないアーカイブに対してアクセス可能かつ低コストな解決策を提供します。
本文
就寝中、私の 5 年前の MacBook が Gemma 4 をローカルで実行し、1 年分の映像データをインデックス化していました。
2026 年 5 月 21 日
私は現在、ケニアのマーサ・マラ(マサイ・マラ)にいて、その期間の半分を過ごしています。休暇は 3 ヶ月のスパンで計画的に行っています。ロジの前には動物たち、バイク、マサイ村に住む友人たち、そしてドローンを「今まで見た中で最も面白いものだ」と考えている子供たちの姿があります。これが私の年の半分に該当します。残りの半分は、ターミナルの屏幕の前に 16 時間過ごす時間です。アフリカの時間の中でシリコンバレーのハッカー脳を働かせているのです。どちらも真実であり、どちらも注力を奪っています。
前半は常に iPhone、DJI Pocket、ドローン、Nikon Z8、そして最近では Ray-Ban Meta も加わり、撮影された映像の洪水です。何かしらのことが記録されています。知人の写真家や映像編集者も全員、同じ課題を抱えています—that is, アrchive が編集するスピードよりも速く増え続けるという問題です。後半が私のアライヴに触れることがない理由です。
ナロビとスペインの間にある何らかの空港の保安検査場。カメラ一式、ヘッドフォン、ドローンの部品、バッテリー、SSD、誰もが必要としないほど多数のケーブル、といった二つのトレイに詰め込まれていました。ほとんどすべてが何かを記録していますが、その中のほとんどはすぐに再び見られることはありませんでした。
3 ヶ月前、ロジの SNS チャネルは姿を消しました。コンテンツ不足ではないのです。ロジには複数の SSD にかけて数年来の生データが蓄積されています。ボトルネックは編集時間であり、私の時間が失われていたのです。Claude Code(Opus 4.5、その後に 4.6)は 2 月にエージェントを数時間駆使して戻ればマージされた PR が得られるようになりました。同時に KaribuKit も初のお支払い物件を持ってローンチを迎えました。私は睡眠の質を失い、背景で 3 つまたは 4 つのエージェントを並行実行するようになり、以前はリールをカットしていた月が、今度はソフトウェアを shipping にする月へと変わりました。
その週末に解決策を見出すために座り込みました。しかし最初の試みは間違っていました。
間違っていたレイヤー
最初の提案(自分自身へのものですが、約 1 時間のリサーチの後)は SaaS スタックでした:反復編集のために Eddie AI、生成型 B-roll のために Higgsfield MCP、キャプションのために Submagic、クロス公開のために Buffer など。紙の上では滑らかで月間 $140 です。
しかし実行する前に 2 つの問題が浮き彫りになりました。
- まず一つ目は、生成型 AI 映像は本物の旅行ブランドには場所がありませんでした。客は夜景を見るために 1 泊 $300 も払ってきますが、誤ラベル付けされた AI ショットは TripAdvisor の拷問となりかねません。よって Higgsfield は排除されました。
- 二つ目は、週に 3〜5 回の投稿は私にとって過酷であり、現実的な下限はもっと 2〜3 回程度でした。その提案は第二週の時点で失敗するほど楽観的すぎるものでした。
そして私は既に DaVinci Resolve Studio を所有していることに気が付き、Resolve 21 に IntelliSearch(セマンティッククリップ検索)、Smart Bins(自動整理フォルダ)、およびタイムライン上で 90〜95%の精度でキャプションを生成する Voice to Subtitle が搭載されていることを思い出しました。これは Eddie が提供する機能のうち約 70%に相当するため、Eddie もまた排除されました。
残されたオプションは、Claude Code がオープンソースの DaVinci Resolve MCP を通じて Resolve を駆動し、情報のあるクリップで ElevenLabs がナレーションを担当するという構成で、これにより月間 $140 からコストは $22 に削減されました。
しかし、真に深い問題は実際にそれらのツールを使うようになっただけでないと理解できませんでした。市場に出回っているすべての AI 動画編集器は、あなたの映像素材が既にラベル付けされていることを前提としています。私のアーカイブには
IMG_*.mov や DJI_*.mp4 のようなファイル名だけで、フォルダ名も「Mara june 2024 backup final FINAL」のようなものです。Eddie は台本で検索できますが、これらのツールのどれ一つとして「夕方の山の上にいる象」というラベルのないアーカイブに対する検索は不可能です。
AI エディターは間違った問題を解決しています。もっと正確に言えば、彼らは二段目の問題を解決しており、最初の問題はインデックスの問題です。
問いかけ
私は大声で尋ねました:「エージェントが各クリップの中身を知る方法は何か?」
ラベルのないアーカイブについては答えはありませんでした。台本、GPS 座標、ファイル名、親フォルダなどを与えても、「日没時の広角ショットでキリンが画面に収まっている」といった情報は得られず、何かが実際にピクセルを見ていない限りそうはいきません。
レバレッジは上流にあります。まずインデックスを構築し、アーカイブを英語で検索可能にし、その後上でエディターを薄くレイヤーにするのです。
そこで私はローカルでインデックスを構築しました。
構築
これは私が SimbaStack のクライアント向けに行う AI ネイティブな構築です。ただし今回は私が両方の役割(クライアント兼エンジニア)だったため、意思決定ツリーの長さは劇的に短くなりました。
4 つの制約が形状を決めました:
- ローカルフーストである必要があった。 マーサ・ヒルトップのアーカイブは物理的な SSD にあり、個人的なデータも私のラップトップ上にあり、数千のマルチギガバイトクラスのクリップをクラウドにアップロードすることにはコスト面で意味がなく、ましてや人生の全視覚記録を第三者に委ねるわけにはいきません。
- 中央データベースではなくサイドカーを望んでいた。 クリップごとに
を作成し、その場所に置きます。プレーンテキストで grep 可能にします。今日インデキサーが壊れても生き残り、ファイルがドライブ間で移動したときにもデータと共に移動します。.description.md - ビジョンコールは一つで全てを捉える必要があった。 抽出されたフレームに対するビジョンパスが高価な操作であるためです。クリップについて後々知りたいことがあるなら、そのすべてを一つのコールから得なければなりません。したがってスキーマは最初から完全になります:評価、技術的な品質、照明、時間帯、カラーパレット、音質、人数、キーワード、顔の検出、場所、台本、散文的な説明。すべてを一発で。
- 三つのビジョンバックエンドを選択したかった。 デフォルトは Max サブスクリプションの CLI を通じた Claude(限界コストゼロ)、必要に応じて速度が必要な場合は Anthropic API、そしてバッチパス向けには LM Studio を指すローカルバックエンド。重要なのはローカルの方です。
クリップごとのパイプライン:
- メタデータ取得には
。ffprobe - GPS 緯度経度高度には
。iPhone、DJI Pocket、ドローン映像などすべてで動作します。exiftool - Nominatim を使用した逆ジオコーディング。無料だがレート制限あり、API キー不要。
で均等間隔の 1920px フレーム 5 枚を抽出。ffmpeg
で単語レベルのアラインメントと pyannote による話者識別を行った台本生成。ヒンディー語、英語、スワヒリ語、97 カ国語に対応。WhisperX
で顔を検出し、512 次元 ArcFace 埋め込みを統合された SQLite 顔 DB に格納し、後のクロスアーカイブ人物クエリに備える。insightface- ビジョンモデルがフレーム、台本断片、フォルダコンテキストを読み、YAML フロントマターと散文の説明を返す。
- サイダーをディスクに書き込む。
これがマーサ・ヒルトップアーカイブから実際のクリップでどのように見えるかです。
IMG_1103.MOV からの一フレーム。 エリーがロジの高級テントの一つのデッキ上で、真昼時。そのようなコンテキストはファイル名には含まれていません。
同じクリップのために Gemma が作成したサイドカー。 上部に YAML(照明エnum、時間帯エnum、カラーパレット、顔埋め込み、GPS)、下部に散文
## Description。彼女はサファリテントのシーンを拾い上げ、室内からサバンナへカメラがパンニングする様子、ショットタイプを捕捉し、マーケティングリールと旅ブロ用 B-roll の 2 つの使用案を提案しました。ファイル名には IMG_1103.MOV がありましたが、サイドカーには再度見つけるために必要な残り情報が含まれています。
インデキサーが通過した後の実際のマーサ・ヒルトップアーカイブフォルダ。 各クリップにその横に
.description.md サイダーが存在し、上部の _INDEX.json と _INDEX.md は高速 grep と LLL へのハンドオフのためにフォルダーレベルでのロールアップです。
全体は Claude Code のスキルで約 1,400 ラインの Python でできています。Claude Code がほぼすべてを書きました。私の仕事はアーキテクチャ、プロンプト設計、スキーマデザイン、そして問題が発生した際のバグ対応でした。
まやかし
ここが実際に私を驚かせた部分です。
2021 年に 16 インチ MacBook Pro M1 Max(64GB RAM)を購入しましたが、その理由は LLM とは無関係でした。以前のマシンで 32GB の制限に頻繁にぶつかるようになっていました。Chrome タブ数百個と DaVinci Resolve、Slack、Discord、Drive を同時に動作させている雑多なハッカー脳を、統合メモリ前のハードウェアがページングを常に行うことなく処理するのは無理でした。新しい M1 Max で RAM を最大限活用したのは、古いマシンがworkflow を殺し続けていたからです。そして私はそれを直せる金銭力もありました。
5 年後、同じラップトップは Gemma 4 31B Q4(LM Studio)を 1 年分の映像フットageにたいして動作させています。
LM Studio に Gemma 4 31B Q4 がロード済み。メモリ上に 28.40 GB のモデル、REST API は 127.0.0.1:1234 で動いています。下部パネルは実際のバッチ実行中のサーバーログで、クリップごとにフレームを一つずつ符号化しています。
バッチ実行はラップトップを 64GB の RAM 単体では持たない領域まで追い込みました。Activity Monitor はピーク時に使用されたスワップが 50.89 GB を報告しました。
- 物理 RAM: 64 GB
- 使用されたスワップ: 50.89 GB。メモリ圧力は黄色帯域にあり、通常の火曜日に絶対に走ってはいけない状態です。Apple のスワップはそれを想定して設計されていますが、ファンは大きく回転していました。
SSD に損傷を与えるかどうかが心配でググりましたが、一日または二日は問題ないようです。これを日常運用状態にするのは避けてください(その代わり)、週末にマシンを逼迫させる程度であれば許容範囲内です。私のラップトップは熱を帯びてファンが高速回転しながら、私が他の仕事をしている間もサイダーを生産し続けました。
16 インチの M1 Max は、正直言うと伝説的です。Mac コミュニティの人々がそれについて話しているのはある理由があります:5 年経っても、この古いハードウェアにはあり得ないような余地を持って、31B パラメータモデルを実用可能な速度で動作させています。今後少なくとも 3〜5 年は快適に使えます。ローカル LLM はさらに効率的になり続けるため、ハードウェアは床ではなく天井だからです。
私は Chrome のために購入しました。しかし購入当时には存在しなかったモデルを走らせています。
4 つのバグと 4 つの教訓
構築はほぼ Claude Code がペンを握っていましたが、興味深いのは間違ったものを shipping にしようとした 4 回でした。
- WhisperX 3.8 は diarization API を破壊した。 最後に触ってから現在までの間に 2 つの破壊的変更が導入されました:
がwhisperx.DiarizationPipeline
サブモジュールへ移動し、コンスストラクター引数whisperx.diarize
がuse_auth_token
に改名されたことです(pyannote 3.x から継承)。修正はシグネチャイントロスぺクションでした。スクリプトはまずtoken
を試し、コンスストラクタがtoken=
を発行した場合にTypeError
にフォールバックするため、次の API シュッフルでも生き残ります。AI ライブラリを迅速に動かしている場合、防衛的なコンスストラクターコールは安い保険です。use_auth_token= - Claude CLI は権限エラーも成功レスポンスとして返す。 CLI バックエンドの初回テストで、4 つのサイダーすべてが同一のテキスト"I need permission to read the image frames..."を持って返ってきました。スクリプトの成功チェックは通過しましたが、exit code が 0 で出力が空ではなかったためです。原因は非インタラクティブモードで
フラグがない場合、CLI は権限拒否テキストをレスポンスボディとして返し、プロンプト代わりにするため、失敗モードが成功と見なされてしまいました。修正にはフラグの追加と、"I need permission" を含む短いレスポンスを記述ではなくエラーとしてフラグする防衛的チェックを行いました。AI ツールをスクリプト化する場合、静かな失敗が隠れるのは非インタラクティブな権限フローです。--permission-mode bypassPermissions - Gemma は
を整数ではなくpeople_count
で返した。 私のビジョンプロンプトには「整数か、10 より大きい場合は"many"という文字列」と明記していました。Gemma は指示を正しく従いましたが、バグはスキーマ設計でした。修正にはより厳格なプロンプト(0〜99 の整数に明示的なガイダンス)と、レガシーの"many"レスポンスに対するパースャでの強制変換を加えました。スキーマフィールドにユニオンタイプを使わないでください。常に整数か常に文字列を選び、「整数またはその特定の文字列」のようなことは避けてください。なぜなら全てのダウンストリーム消費者はその選択を払うからです。"many" - そして自転車に乗る映像が削除されるべきではなかった。 私の初期の削除プロンプトはポートフォリオ型でした:強いモーションブラー、ソフトフォーカス、ジッターした安定性は評価して削除されました。技術的には正しいです。その後スペイン旅行で手持ちカメラによる夜間のバイク乗りのクリップにテストをかけると、それが削除されました。私はそれをキャッチしました:それは楽しい記憶で、ブラーが雰囲気です。削除基準を「真の記録ではないものだけ」(レンズカバー装着時の映像、ポケットの中の映像、2 秒間のカウントダウンのような試験映像、完全に露出カットされたもの)に再定義し、「不完全な撮影」にはしないようにしました。写真アーカイブは積極的に削除しますが、ビデオの記憶は寛容に削除します。同じスキーマでも異なる基準であり、どちらのモードにいるかを明確にする必要があります。
実際のアプローチ
3 つのことを一週間前よりも強く信じるようになりました。
- 列挙制約は虚構防止において指示优于。 夜間のコワーキングスペースで撮影した写真を Gemma 4 E4B でテストし、彼女は「明るく照らされた、豊富な自然光、床から天井までの窓」と説明しましたが、窓の外は真っ暗でした(なぜなら夜だったため)。その後、
から選ぶよう強制する構造化スキーマプロンプトで 31B モデルをテストし、both thinking-off と thinking-on で「nighttime」を正しく回復しました。モデルは開かれた散文で嘘をつくことができますが、列挙から誤って選ぶか、新しい値を発明することはできません。スキーマを使いなさい、指示ではなく。golden_hour | bright_daylight | overcast | dim_interior | nighttime | mixed | unclear - ローカル 31B と構造化プロンプトはクラウドとの大部分のギャップを埋める。 Gemma 4 31B Q4 の thinking-off で構造化スキーマに対する出力は、私のテストクリップの多くでは Sonnet 4.6 と区別が難しい。クラウドの高額なプレミアムは困難な 10〜20%に値があります。バッチインデックス化(一夜で数千クリップ)はローカルで行うべきで、ローカルでレビューフラグされたクリップのための再評価パスはクラウドで行うのが適切です。その二層セットアップがスケーラブルになります。
- AI 動画編集器は一つのレイヤー高すぎに提案されている。 価値のあるレイヤーはインデックスです。アーカイブが英語で検索可能になったら(「マーサの手持ち室内クリップ、黄金時、人がいる、8 秒以上のものを見せて」)、上部のエディターは単純になります。AI エディターの大半は存在しないインデックスの上にある表面を競合しており、彼らがすべて飛び越えている前置条件であるインデックスが欠落しています。
これから
振り返ると、時間こそがこの修正が遅れた理由ではありませんでした。私の人生の仕事側には現在利用可能なすべての AI 超能力が向けられていました:Claude Code が一晩でコードベースを再構築し、Codex がほとんど Pull Request を作成し、KaribuKit を shipping にするために 3 ヶ月使用してきたエージェントスタック。編集面ではそれを何も使っていませんでした。手をつけることができなくなったことは、SSD のフォルダを開いては何もしないだけで閉じるたびに気づくような、小さな低グレードの挫辱として頭の中にあるだけになっていました。その土曜日にひらめいたのは、編集のバックロクはツールング問題であり、ツールングは現在私がある意味でよく整備されている解決できる種類の問題だということです。
この週末にはエディターを構築します:Claude Code がオーケストレーター、DaVinci Resolve MCP がカット用、情報のあるクリップのためのナレーションに ElevenLabs。ツール内には一つのエンドルがあります:音声クローンはいくつかのユーティリティコンテンツのみです。方向性、部屋説明、多言語バージョン、個人的に言うであろう事実など。決して証言や創業者メッセージには使いません。2026 年は開示法は現実であり、ホスピタリティブランドへの信頼は失うのが容易すぎます。
インデックスはすべてを処理可能にします。それがない場合、私はまだ 47GB の DJI Pocket フットageを通してスクロールして日没の広角ショットを探し続けていたでしょう。
とりあえず:マーサ・ヒルトップの 1 年分のフットageは、5 年前のラップトップ上で英語で検索可能です。コストは週末分の私の時間と 50GB のスワップでした。古い SSD をまたがって残りの年は次です。
全体をチェックすると:マーサ・ヒルトップの SNS チャネルは今もまだ死んでいます。インデキサーは問題の一部だけを解決します(正しいクリップを見つけること)。そのクリップを仕上げたリールに変えるエディターが他の半分であり、私がこの週末に構築しているのがその部分です。それが成功すれば、チャネルが再点灯し私は第二編を書きます。そうでなければ、なぜかについて書きます。
正直言うと、正解は誰かに雇うことかもしれません。マーサ・ヒルトップに適した感性(暖かく、観察的に、MTV エネルギーの過剰なリールではない)を持つエディターを見つけることは、別のスキルを書くことよりも難しいです。そのレジスタで働く人を知っている場合は、私に紹介してください。
補足: コードは github.com/Simbastack-hq/framedex にあります。PR と Issue を歓迎します。元のローカルパス参照が役に立たないと指摘した HN のコメント者に感謝します。 — NJ
KaribuKit(ホスピタリティ向け AI ネイティブ PMS)を構築し、マーサ・ヒルトップ(マサイ・マラのエコロジ lodge)を運用し、SimbaStack を通じてコンサルティングを行っています。 #local-llm #claude-code #video-archive #mara-hilltop #simbastack