Communitygithub.com

edvardgrishin27/frameproof

エージェントが動画に死角なく対処し、タイムコードで視認を証明します。オフライン、APIキー不要。

frameproof とは?

frameproofは、AIエージェントが動画コンテンツを「見た」ことを正確に証明するためのツールです。主にClaude CodeやCoderなどの開発者向けエージェントで利用され、動画内の特定フレームをタイムコード付きで参照し、その正当性を検証します。OCR機能により画面上のテキスト(コード、UIラベルなど)を検索可能にし、視覚的トークンの消費を最小限に抑えながら正確な応答を実現します。オフライン、APIキー不要でプライバシーが保護され、`frameproof verify`による機械的監査や`frameproof verify --plan`による敵対的検証(スケプティックな再チェック)を提供します。特にソフトウェアデモやチュートリアル動画の分析に強く、エージェントに「見たものだけを言う」規律を課します。

対応~Claude Code✓Codex CLI~Cursor
npx skills add edvardgrishin27/frameproof

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

frameproof — 動画を視認し、それを証明する

最重要ルール

画面に映っていると断言する前に、そのフレームを実際に見たかどうかを決して誤魔化さないこと。

このツールは正直にカバレッジを出力します。レポートに「フレームなし」の区間がある場合は、その区間について「ここにはフレームがありません、音声からは次のことがわかります」と率直に伝えてください。憶測を観察として提示すると、分析全体の信頼性が失われます。

画面上のすべての主張には、[MM:SS / fNNNN] のラベルを付けること。 これは装飾ではありません。frameproof verify はこれらのラベルをすべてインデックスと照合します。偽の参照は、モデルを使わずに算術で検出されます。

作業手順

1. インデックス作成

frameproof index "<URLまたはパス>" --ocr

カバレッジレポートを出力します。何よりもまずこれを読みましょう:フレーム数、最大ギャップ、フレームがない区間の有無。

インデックスへのパスは出力の最終行に表示されます。以降は --out として使用します。

--ocr はフレーム上のテキスト認識を有効にします(macOS、オフライン)。これにより画面がgrep可能になります:コマンド、ファイル名、URL を画像なしで検索できます。認識はネイティブ解像度の別コピーで行われ、表示は軽量のままです。

便利なオプション:--max-gap 10(より密なカバレッジ)、--max-frames 400(長い動画)、--lang ru(字幕がない場合の文字起こしの言語)。

動画の隣に既製の字幕ファイルがある場合は、--subs speech.srt を使用します。これにより文字起こしよりも正確で高速です。macOS以外では、独自のエンジンで認識を接続します:--ocr-command "<プログラム>" は画像へのパスを受け取り、パス<TAB>テキスト を出力します。

2. マップを読む

cat <インデックス>/index.json

小さなファイルなので、全部読みましょう。長さ、フレーム数、トランスクリプトのソース、そして最も重要なブロック coverage が含まれています。

3. 画像ではなくテキストで検索する

frameproof search "<クエリ>" --out <インデックス>

音声と画面テキストの両方を検索します。タイムコード付きの行を返します。画像は一切なし — ビジュアルトークンはゼロ。 ほとんどの質問はここで解決します。

検索は部分一致(トライグラム)であり、ロシア語の格変化を気にしません。

より複雑な抽出の場合は、直接grepします:

grep -i "docker" <インデックス>/segments.jsonl | head
grep -i "npm" <インデックス>/frames.jsonl | head

4. どうしても必要なときだけフレームを見る

frameproof frames --at 4:12 --out <インデックス>          # 特定の瞬間
frameproof frames --ids f0043,f0044 --out <インデックス>  # 特定のフレーム

画像を返す唯一のコマンドです。出力されたパスを Read で読み取ってください。

予算:一度に4~8フレーム。 1280×720の1フレームは約1196ビジュアルトークンです。1時間の動画の全フレームを表示すると数十万トークンになります。そんなことはしないでください。

5. 証拠付きで回答する

画面に関する主張の形式:

18:38 にモデルルーティングテーブルが表示されています。MAIN — 高価でスマート、AUXILIARY — 安価で高速。[18:38 / f0097]

ユーザーが記事や要約を依頼した場合は、frames.jsonl からのパスを使ってフレームを図解として挿入し、タイムコードを添えてください。

6. 自己検証 — 依頼された場合

[MM:SS / fNNNN] ラベルは飾りではなく、検証可能な参照です。機械的な監査は無料で即座に行えます。数段落を超える分析には必ず実行してください:

frameproof verify <分析ファイル.md> --out <インデックス>

これは内容に関する知識は一切持ちません。参照の整合性をチェックします:フレームが存在するか、タイムコードが正しいか、その瞬間がフレームのない区間に入っていないか、そのフレームが実際にリクエストされたか、引用された行がフレームテキストまたは近くの音声に含まれているか。

FAIL は壊れた参照です。議論ではなく修正する必要があります。WARN はフレームを開いて目で確認する理由です。

7. 盲目的な再チェック — 明示的な依頼があった場合のみ

ユーザーが「分析をチェックして」「再確認して」「本当にそれを見たのか」と言った場合にのみ、敵対的検証を実行します。

frameproof verify <ファイル> --out <インデックス> --plan

このコマンドはタスクを含むJSONを出力します。それをサブエージェント frameproof-adversary に、1回の呼び出しで委任します(主張ごとに1エージェントではなく、1つで十分です)。

サブエージェントに渡すもの: 主張の番号付きリストとフレームへのパスだけ。JSONと同じ形式で。

絶対に渡してはいけないもの(一言も):

  • ユーザーが尋ねた質問
  • なぜその結論に至ったかという自分の推論
  • 分析の残りのテキスト
  • どの回答が正しいと思うかというヒント

サブエージェントは会話履歴を見ません — これは保証されています。しかし、委任メッセージを書くのはあなたであり、これが唯一残された情報漏洩経路です。期待される答えを知っている検証者は無価値です:それを確認してしまうからです。

判定の扱い方:

  • CONFIRMED — そのまま残す。
  • REFUTED — 削除せずにマークする: [再チェックで確認できず:理由]。反証者は正しい主張でも予想以上に頻繁に誤るため、判断はあなたではなく人間が行います。
  • UNSUPPORTED — 正直に伝える:フレーム上では確認できず、音声または周辺の瞬間から結論を導いている。

このパスは自発的に実行しないでください。トークンと時間がかかります。機械的な層がほとんどの問題を無料で捕捉します。

禁止事項

  • トランスクリプトだけで動画を再話し、それを画面分析と呼んではいけません。 音声と画面は食い違います:動画内で話者が「openrouter」と言っても、画面には openrouter/pareto-code (min_coding_score 0.65) と書かれていることがあります。後者はフレームとOCRにのみ存在します。
  • 「念のため」フレームを大量に読み込んではいけません。 まず検索、次にピンポイントでフレーム。
  • OCRをコードの逐語的なテキストとして扱ってはいけません。 認識は句読点を間違えます:[main が Imain と読まれることがあります。OCRはフレームを 見つける ためのものであり、画面に何が書かれているかは目で確認してください。
  • ブラインドエリアについて黙っていてはいけません。 カバレッジが100%未満の場合は、そのことをユーザーに伝えてください。

不足しているものがある場合

frameproof doctor

何がインストールされていて何が不足しているかを表示します。ffmpeg と numpy は必須。yt-dlp はURLにのみ必要。文字起こしは mlx-whisper(Apple Siliconで高速)または openai-whisper(どこでも)。キーは一切不要です。

関連スキル