Communitygithub.com

DeepAleph/jevreel

動画に質問できるツール。埋め込み不要で、シーンの検索、人物や物体の特定、画面の読み取り、発言の取得などが可能。MCP ツールまたは `jevreel` CLI で動作。

jevreel とは?

jevreel は、埋め込みやベクトルデータベースを使わずに動画の内容を検索・理解できるエージェントスキルです。1秒あたり1フレームのコンタクトシートで動画全体を並列スクリーニングし、TypeSafe の高速判断モデル Jev が確率付きの回答を返します。エージェントはその結果をもとに実際のフレーム画像を確認し、ユーザーに正確な情報を提供します。MCP ツール(index_video, ask_video, find_in_video など)と jevreel CLI の両方に対応。主なユースケースは「特定の瞬間の検索」「写真に写る人物や物体の動画内追跡」「画面のテキスト読み取り」「発言内容の取得」「動画全体に関する質問」など。Lenses 機能を使えば、一度のリクエストで動画全体にわたる複数の質問を効率的に処理し、後から自由にフィルタリングできます。コストは Jev の入力トークンのみで、同じリクエストはキャッシュから無料で返されます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DeepAleph/jevreel/tree/HEAD/skills/jevreel

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

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

ドキュメント

jevreel:動画に質問する

jevreel は動画を1秒1フレームのコンタクトシートに展開し、TypeSafe の高速判断モデル Jev が全シートを並列にスクリーニングし、最も該当する範囲をフルフレームで再確認します。あなた(メインのエージェント)はその結果を確認します。Jev は型付きの回答と確率を返し、説明は行いません。読み取り、説明、結論はあなたの役目です。

セットアップ確認

  • TYPESAFE_API_KEY は Jev に問い合わせるすべての操作(タイムラインによるインデックス、ask、find、locate、whole、lenses)で必須です。ズーム、トランスクリプト、タイムラインクエリは API キーなしで動作します。
  • ffmpeg と ffprobe が PATH に含まれている必要があります。
  • URL を指定する場合は jevreel[url]、字幕のない動画でトランスクリプトを取得する場合は jevreel[asr] が必要です。

ワークフロー

  1. 一度インデックスする。 MCP index_video(source) または jevreel index <file-or-url>。以降の呼び出しでは、返された id、パス、またはタイトル("tears of steel")を使用します。すでにインデックスされた動画を再度インデックスすると即座に結果が返ります。
  2. 瞬間を見つける。 ask_video(video, query) / jevreel ask <id> "<query>"。
    • クエリは画面に表示されているか発言されている内容を平易に記述します: "スライド上の棒グラフ"、"誰かがラップトップを開ける"、"話者が価格について言及する"。
    • クエリは1回に1つの内容にします。"赤い車と犬"は2つの ask に分割してください。Jev は単純な質問に最も正確です。
    • mode:visual(画面のみ)、speech(トランスクリプトのみ、最も安い)、both、または auto。
    • ユーザーが動画の一部を指定した場合は start/end で範囲を絞ります。
  3. 写真から見つける。 find_in_video(video, image_path, note="person") / jevreel find <id> photo.jpg --note person。
  4. 答える前に確認する。 ヒットは手がかりであり、事実ではありません。検証済みのヒットには frame(その瞬間のフル解像度画像)が付属します:それを確認してください。zoom_video(video, start, end) / jevreel zoom <id> 12:00 12:10 でより多くのフレームを取得できます。locate_in_frame(video, at, target) は1フレーム内の1つの対象をボックスで囲み、切り抜いて拡大表示します。
  5. 発言内容の取得。 video_transcript(video, start, end) / jevreel transcript <id> --start 12:00 --end 13:00。
  6. 動画全体の質問。 ask_whole_video(video, question, kind, options) / jevreel whole <id> "これはチュートリアルですか?"。kind=choice で選択肢を指定するか、kind=score でレベルを低い順に指定(最大10)します。

Lenses:動画全体で同じ質問を繰り返す場合

ユーザーが動画全体にわたって複数の要素(画面上の人物、安全ルール、ブランド、天気、スライドの有無など)を気にする場合、それぞれ個別に問い合わせるのではなく、lens を実行します。1分ごとに、1回のリクエストですべての質問に回答します。その後、必要なだけ無料で回答をフィルタリングできます。

  • MCP run_lens(video, lens) の例: {"name": "site", "questions": [{"name": "helmet_off", "type": "noul", "ask": "ヘルメットを着用していない作業員が見えますか?"}, {"name": "vehicle", "type": "choice", "ask": "最も目立つ車両は?", "options": ["車", "トラック", "なし"]}, {"name": "crowd", "type": "score", "ask": "混雑度は?", "levels": ["空いている", "少し", "混雑"]}]}。 CLI:jevreel lens <id> lens.toml。インデックス時に lens を含めるには、index_video(または jevreel index --lens)に渡します。追加コストはほぼかかりません。
  • query_timeline(video, "helmet_off > 0.7") / jevreel query <id> "helmet_off > 0.7 and vehicle == truck"。 条件は 列 演算子 値 の形式で、and で結合します。値に "and" が含まれる場合は引用符で囲みます(place == 'books and a desk')。where を省略すると、すべての分とその列が表示されます。 はい/いいえの質問では、<name>_at(その瞬間が最も顕著な秒)も得られます。
  • デフォルトのタイムライン列も利用可能:people、talking_to_camera、screen_or_slides、text_on_screen、cut、setting、activity(0-3)、keyframe。

結果の読み取り

  • probability は Jev の「はい」確率です。strong は少なくとも 0.7 を意味します。verified ヒットの場合、これはフルフレームから得られ、at / time はそれを最もよく示したフレーム、screened はその前のコンタクトシート確率です。未検証のヒットはシートのみから得られます。
  • shown と said はそれぞれ画面とトランスクリプトの質問で、別々に問い合わせます。
  • also は同じウィンドウ内の他の可能性のある瞬間をリストします。
  • 確率は順位付けには適していますが、較正されているとは限りません。確認していないことは述べる前に確認し、弱いヒットしかない場合はその旨を伝えてください。
  • しきい値を超えるヒットがないというのも有効な回答ですが、まず weak を確認してください。Jev が除外しなかったウィンドウ(検証で覆されたものを含む)です。「見つからない」と言う前に、それらのウィンドウをズームインしてください。
  • 瞬間はその時刻(例:「12:04」)で引用し、ユーザーがそこにジャンプできるようにします。

コスト

Jev は入力トークンのみ課金し、同じリクエストの繰り返しは jevreel のキャッシュから無料で応答されます(結果の cached で確認可能)。各 ask は、範囲内の各シート(動画の1分あたり1シート)を1回送信し、検証済みウィンドウごとに1リクエスト追加されるため、start/end で範囲を絞ると ask のコストが下がり、高速化します。結果には requests、cached、input_tokens、estimated_usd が報告されます。

関連スキル