Talkthrough について
Talkthroughは、ナレーション付き録画や公開動画リンクを検索可能な証拠に変換し、コーディングエージェントやチームによるバグ、会議、デモの調査を支援します。文字起こし、キーフレーム、OCR、実時間のタイムスタンプをローカルで処理し、課題管理ツールへの投稿は行いません。
主な機能
- 01音声と動画のローカル文字起こし
- 02キーフレーム抽出とOCR
- 03実時間タイムスタンプの付与
- 04文字起こしと画面上の文字を検索
- 05話者ダイアライゼーションに対応
- 06バグや会議向けのプロンプト
活用シーン
- 01ナレーション付き画面録画からバグ報告を作成
- 02録画から発言やフレームを検索
- 03会議の決定事項とアクションを抽出
- 04録画内の出来事とシステムログを照合
MCP 対応
MCPサーバーは、ローカルメディアや公開動画URLの処理、文字起こしとフレームの取得、証拠の検索、話者名の設定を行うツールを公開します。バグのトリアージ、ワークショップ仕様、デモ、会議、ログ照合向けのプロンプトも提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx talkthrough-mcpTALKTHROUGH_WHISPER_MODELWhisper model (tiny|base|small|medium|large-v3|large-v3-turbo). Default: small. Use large-v3-turbo for non-English narration; the process_media `model` param overrides per call.TALKTHROUGH_OCRSet to 'off' to disable OCR of keyframes. Default: on.TALKTHROUGH_OCR_LANGRecognition script for on-screen text: a language code (ru, ja, ko, ar, hi, ...) or a RapidOCR pack name (eslav, cyrillic, ...). Default: Latin+Chinese.TALKTHROUGH_HOMEJob store root. Default: ~/.talkthroughTALKTHROUGH_MAX_DOWNLOAD_BYTESHard cap for one process_url download. Default: 2147483648 (2 GiB).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | |
| force | boolean | いいえ | |
| model | any | いいえ | |
| diarize | any | いいえ | |
| language | any | いいえ | |
| vocabulary | any | いいえ | |
| recorded_at | any | いいえ | |
| num_speakers | any | いいえ |
詳細
talkthrough-mcp
クイックスタート · ツール · ベンチマーク · FAQ · トラブルシューティング · 変更履歴 · コントリビューション
バグレポートを書かないでください。記録してください。
Claude Code や Codex にナレーション付きの .mov/.mp4、または公開動画リンクを渡すと、
talkthrough がそれを検索可能な文字起こし、正確なフレーム、OCR、実時刻のタイムスタンプに
変換します — すべてローカルで — だからあなたのエージェントは、エビデンスに基づいた
Issue ドラフトを書いたり、修正を調査したりできます。
会議、ワークショップ、製品デモ、本番インシデントにも役立ちます。

イラスト — /talkthrough:bug のストーリーをアニメーション化したもので、スクリーン
キャプチャではありません。録画がローカルでインデックス化され(文字起こし · キーフレーム · OCR ·
実時刻)、エビデンスのチェックポイントがまとめられ、ドラフトがあなた自身のトラッカーツール
(gh、Jira、GitHub MCP サーバー — talkthrough 自体はあなたのマシンから出ることも、
何かを投稿することも一切ありません)で提出できる状態になります。
実際の実行、アニメーションなし:
- ▶ 音声付きデモを見る(1:18) — 編集なしの
セッション: ナレーション付きの録画を入力すると、すぐに提出できる
bug-report.mdが出力されます。 - 無音の録画 → Issue ドラフト —
すべてを再実行可能なファイルとして: Playwright で録画した音声なしの
.mp4と、編集なしのエージェント出力。すべての数値は再現可能です — そのファイルを処理するとjob_id 8703a66bbe77a7d0が得られます(ジョブ ID は まさに sha256 の先頭部分なので、shasum -a 256で予測できます)、17 キーフレーム / ユニーク 4、そして 音声トラックがないため文字起こしセグメントは 0 です。
クイックスタート
コマンド 1 つだけで、システム依存関係は不要です。ffmpeg は同梱ビルドにフォールバックし、OCR は pip のみで完結し、Whisper モデルは初回使用時に自動ダウンロードされます。唯一の前提条件は uv です(brew install uv または curl -LsSf https://astral.sh/uv/install.sh | sh)。
コールドセットアップには 2 つの別々の段階があります。まず uvx が互換性のある Python と固定されたサーバー環境を解決し、その後、最初の process_media が不足しているメディア/モデルアセットをダウンロードします。プラグインの更新により新しい環境が作成され、システム ffmpeg がない場合は約 80 MB の同梱 ffmpeg が再取得されることがあります。共有された Whisper/OCR/話者分離のキャッシュと、ウォーム状態のネットワーク不要なジョブは引き続き再利用できます。トラブルシューティングをご覧ください。
Claude Code
インストール方法は 2 つあります — どちらか一方を選んでください。両方ではありません(プラグインにはすでにサーバーが含まれているため、両方をインストールすると二重に登録されます)。
サーバーのみ — 9 つのツールと 6 つのプロンプトのみで、システムには他に何も追加されません。最小構成にしたい場合や、複数のクライアントにわたって MCP サーバーを自分で管理している場合に選択してください。
claude mcp add -s user talkthrough -- uvx --python ">=3.11,<3.14" "talkthrough-mcp[diarization,url]"
フルプラグイン — 同じサーバーに加えて、面倒な手続きを代行してくれるネイティブのスラッシュコマンド(/talkthrough:bug、/talkthrough:triage-recording など)、すぐに使えるトリアージ用サブエージェント、そして Claude にワークフローを教えるエージェントスキルが含まれます。すぐに使える最高の体験を得たい場合はこちらを選択してください。
/plugin marketplace add korovin-aa97/talkthrough-mcp
/plugin install talkthrough@talkthrough
その他のすべての MCP クライアント
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
Cursor
~/.cursor/mcp.json (or project .cursor/mcp.json):
{
"mcpServers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
OpenAI Codex CLI
~/.codex/config.toml (or project-scoped .codex/config.toml in trusted projects):
[mcp_servers.talkthrough]
command = "uvx"
args = ["--python", ">=3.11,<3.14", "talkthrough-mcp[diarization,url]"]
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
Cline / Roo Code
cline_mcp_settings.json (via MCP Servers UI):
{
"mcpServers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
OpenClaw
~/.openclaw/openclaw.json:
{
"mcp": {
"servers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
}
OpenCode
opencode.json (project) or ~/.config/opencode/opencode.json:
{
"mcp": {
"talkthrough": {
"type": "local",
"command": [
"uvx",
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
],
"enabled": true
}
}
}
Goose
~/.config/goose/config.yaml:
extensions:
talkthrough:
enabled: true
type: stdio
cmd: uvx
args: ["--python", ">=3.11,<3.14", "talkthrough-mcp[diarization,url]"]
GitHub Copilot CLI
~/.copilot/mcp-config.json:
{
"mcpServers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"talkthrough": {
"command": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
Zed
settings.json (Zed):
{
"context_servers": {
"talkthrough": {
"source": "custom",
"command": {
"path": "uvx",
"args": [
"--python",
">=3.11,<3.14",
"talkthrough-mcp[diarization,url]"
]
}
}
}
}
その他の MCP stdio クライアントでも、同じサーバーコマンドを使用します:uvx --python ">=3.11,<3.14" "talkthrough-mcp[diarization,url]"。
各エンジン用のフォルダーには、これらのスニペットと検証手順がそのまま含まれており、
integrations/ にあります。エージェントは
llms-install.md を使って自動インストールできます。
誰が何を話したか(話者ダイアライゼーション)— 上記の設定に含まれています
複数人の録音(会議、インタビュー、パネル)には、S1/S2/…
という話者ラベルを付けられます。すべてのインストールボタン、スニペット、および上記のプラグインには、すでに [diarization] エンジンが含まれているため、エージェントに「誰が何を話したか」と尋ねるだけで機能します。ダイアライゼーション自体は、呼び出しごとに要求した場合にのみ実行されます
(process_media(path=..., diarize=true, num_speakers=<count if known>))。
モデルは初回使用時に一度だけダウンロードされます。
ダイアライゼーションエンジンを含まない最小構成のサーバーを使用する場合は、代わりに
uvx --python ">=3.11,<3.14" talkthrough-mcp をコマンドとして使用してください(MCP レジストリーのエントリーも、この軽量構成に解決されます)。この場合、明示的に diarize=true を指定すると、
1 行のインストール修正方法が返されます。詳細は
話者を参照してください。
0.4.4 への更新
プラグインまたは生成された設定を更新し、MCP クライアントを再接続する前に、指定されたバージョンのランチャーを事前に起動してください:
uvx --python ">=3.11,<3.14" "talkthrough-mcp[diarization,url]==0.4.4" --version
出力に 0.4.4 と両方の追加機能が表示されます。これにより依存関係が準備されますが、最初の録音ではモデルやツールのダウンロードが必要になる場合があります。初期状態の環境では、クライアントの起動タイムアウトを超えることがあります。起動時の復旧を参照してください。 既存のジョブを移行する必要はありません。
0.3.x からのアップグレード
再生成された設定とプラグインには [diarization,url] が含まれます。0.3.x 向けに手書きした設定 — uvx --python ">=3.11,<3.14" talkthrough-mcp、または url extra を含まないピン指定 — では、サーバーはその場でアップグレードされ、新しい process_url ツールが一覧に表示されますが、
extra が導入されるまでは直接の https:// メディアリンクのみが機能します:
YouTube や動画ページには、1 行のインストール修正方法が返されます。コマンドに url を追加し (uvx --python ">=3.11,<3.14" "talkthrough-mcp[diarization,url]")、
クライアントを再起動して、talkthrough-mcp --version (0.4.1 以降) で確認してください。
これは環境に導入されている extra を表示します。サーバーは起動のたびに同じ行を
stderr にログ出力するため、お使いのクライアントの MCP ログにも表示されます。
ローカルチェックアウト (開発)
git clone https://github.com/korovin-aa97/talkthrough-mcp
claude mcp add talkthrough -- uv run --directory /path/to/talkthrough-mcp talkthrough-mcp
次に、エージェントで以下を実行します:
~/Desktop/recording.movを処理してトリアージしてください — またはtriage-recordingサーバープロンプトを呼び出すだけでもかまいません。
ツール
| ツール | 機能 |
|---|---|
process_media(path, recorded_at?, vocabulary?, language?, model?, diarize?, num_speakers?, force?) | 動画/音声ファイルを取り込みます: ローカル STT、キーフレーム、OCR、ウォールクロック、オプトインの話者ラベル。コンパクトなサマリーを返します。コンテンツハッシュによる冪等性 — 再呼び出しは即時です。処理済みジョブで diarize=true を指定すると、再文字起こしなしで話者が追加されます。 |
process_url(url, recorded_at?, vocabulary?, language?, model?, diarize?, num_speakers?, refresh?, force?) | 唯一のネットワークツール: 公開動画/音声 URL を 1 回ダウンロードし (直接の https:// メディアリンク、1 本の YouTube 動画、または yt-dlp が読み取れる任意の公開動画ページ — [url] extra が必要)、ソースをジョブ内に保持してから、同じローカルパイプラインを実行します。同一 URL の再呼び出しは refresh=true でない限りネットワークなしで保存済みジョブを返します。force=true は保持されたソースから再構築します。生の URL は保存されません。 |
get_transcript(job_id, start_ms?, end_ms?, format?) | ページ分割された文字起こしを segments、text、または srt として返します (話者分離時は話者プレフィックス付き、加えて名簿ヘッダー付き)。切り詰め時は next_start_ms を返します。 |
get_frames(job_id, at_ms? | start_ms?+end_ms?, max_frames?, include_duplicates?) | タイムスタンプに最も近いキーフレーム画像、または範囲内で均等に間引いたキーフレーム画像 (デフォルトでは重複排除、1 回の呼び出しで最大 6 枚)。各フレームは絶対 path を提示します。 |
get_moment(job_id, start_ms, end_ms) | 「ひとこと」バンドル: 文字起こしのスライス + 最大 3 フレーム + それらの OCR テキスト + ウォールクロック範囲 (+ 話者分離時は speakers_in_range)。 |
search(job_id, query, speaker?, match_mode?) | 文字起こし AND 画面上の OCR テキストに対する部分文字列検索。all_words がデフォルトのままです。any_word は語彙的な再現率を広げます。ヒットには t_ms/t_wall、フレーム参照、話者分離時は話者が含まれます。オプションのフィルターは生のラベルまたは保存済みの名前を受け付けます。 |
label_speakers(job_id, labels, evidence?) | 匿名の話者ラベルに検証済みの名前をアトミックに永続化します。生の S1/S2 ラベルは正規のままです。空白/null は名前を削除します。 |
extract_frame(job_id, at_ms, crop?) | キーフレームがその瞬間を捉えていない場合に、ソース動画から正確なタイムスタンプでフル解像度の再抽出を行います (オプションのクロップ付き)。ファイルの絶対 path を返します。URL ジョブは保持されたソースをデコードします — ネットワークは不要です。 |
list_jobs() | 最近処理された録画を、ソースパス、長さ、ウォールクロック開始時刻、件数、話者分離時の話者数、URL ジョブのプロバイダー/id とともに一覧表示します。 |
すべてのツール説明には 10 以上の使用例が含まれているため、エージェントは追加のプロンプトなしで適切なツールを選択できます。
サーバープロンプト(MCP クライアントのスラッシュコマンド)
| プロンプト | ワークフロー |
|---|---|
bug | 1 件の録画 → 証拠に基づく GitHub issue ドラフト(無言・ナレーションなしの録画でも動作します) |
triage-recording | ナレーション付きスクリーンキャスト → 正確な findings JSON(bug/feature/question のルーティング、フレームの証拠) |
spec-from-workshop | 録画したワークショップ → 引用された決定事項と未解決の質問を伴う構造化された仕様 |
backlog-from-demo | 製品デモ → タイムスタンプ付きの証拠を伴う優先順位付けされたバックログ |
meeting-actions | 会議の音声 → アクションアイテム、決定事項、未解決の質問 |
correlate-with-logs | 録画内の発言 ↔ システムログを実時間のウィンドウで関連付け |
クライアントが MCP プロンプトを表示しない場合、同じプロンプトは
examples/prompts/ にプレーンファイルとして置かれています。
triage-recording が使用する findings コントラクトは
examples/output-contract.schema.json です。
スキルとしても動作します(MCP は不要)
同じワークフローは、クロスエンジンの Agent Skill として
.agents/skills/talkthrough/ に同梱されています — Claude Code、
Codex CLI($talkthrough)、Cursor、Copilot、Gemini CLI、Goose など
SKILL.md 互換のツールがこれを読み取ります。MCP の接続がないエージェントでも
CLI を直接操作できます。talkthrough-mcp process recording.mov --json は
MCP ツールが返すのと同じサマリーを出力し、ジョブストアはどちらの方法でも共有されます。
実時間のアンカリング
録画の開始時刻が判明すると、タイムスタンプ付きのすべての結果に t_ms(動画相対)と
t_wall(ISO 8601 の実時間)の両方が付与されます。解決の順序は次のとおりです。
recorded_atパラメーター(エージェント/ユーザーによる上書き)→ 信頼度exact- QuickTime の
com.apple.quicktime.creationdateタグ。ローカルタイムゾーンを 保持します(QuickTime Player の録画。macOS 26 より前は ⌘⇧5 がこれを書き込みました)→high - コンテナの
creation_timeタグ(UTC)→medium— macOS 26 以降の ⌘⇧5/ReplayKit の画面録画はここに該当します(creationdateタグはもうありません)。ローカル タイムゾーンのt_wallが重要な場合はrecorded_at=を渡してください - ファイルの mtime から再生時間を引いた値(レコーダーは録画の終了時にファイルを
確定します)→
low - 何もない場合 → ツールは相対的な
t_msのみで引き続き動作します
なぜ重要なのか:「アップロードのスピナーがここで固まった」が、サーバーログにおける ±30 秒の grep ウィンドウになるからです。
話者(オプションの話者分離)
[diarization] エクストラをインストールすると(生成されるすべての設定に含まれます —
クイックスタートを参照)、
process_media(diarize=true) が誰が何を言ったかをラベル付けします — ここにある他のすべてと
同様にローカルで(sherpa-onnx ランタイム、torch なし、
アカウントなし、GPU なし):
- 話者は
S1、S2、… と初出順になります。新しいダイアリゼーションジョブでは単語境界で話者変更を分割しますが、古いジョブは引き続き正直なセグメント単位の精度を報告します。すべての文字起こしセグメントにspeakerが付与され、ツールはそれをあらゆる場所で表示します —get_transcriptでは発話時間付きの名簿、get_momentではspeakers_in_range、searchのヒットではspeaker、テキスト/SRT 形式ではS1:、list_jobsでは話者数です。 - 人数がわかっていますか?
num_speakersを渡してください。 正確な k に向けたクラスタリングは、未知数の場合の主な失敗モード(似た声が統合される、または 1 つの声が分割される)を取り除きます。これは目標であり保証ではありません。クラスタラーが k より少ないクラスターに収束することもあり、何も変わらなかった再実行はそのことをペイロードで示します(labels_changed: false)。エージェントはツールのガイダンスを通じて人数を渡すよう指示されています。自身の呼び出しでも同様にしてください。 - 録音をすでに処理済みですか? それに対して
process_media(diarize=true)を呼び出すと、ダイアリゼーションのみが再実行されます — whisper は再実行されず、ラベルは既存のジョブに入ります。num_speakersの変更も同様です。ダイアリゼーション段階自体は依然として音声全体を再スキャンします。長い録音では数分かかります。 - 完全な再構築は名前付きジョブを安全に保ちます。 ジョブにアクティブまたは保留中の名前がある場合、
force=trueにはdiarize=trueも必要です。そうでなければ、呼び出しは保存されたデータを変更する前に拒否します。成功した force はステージングで再構築し、以前のすべてのアイデンティティを新しい名簿に対して保留中のレビューに移動します。処理またはコミットが失敗した場合、以前のマニフェストとフレームはそのまま残ります。 - ラベルは匿名で始まります。自己紹介、呼びかけ、または映像の証拠を確認した後、
label_speakersを呼び出して、S1→「Alice」のような検証済みのマッピングをセッションをまたいで保持します。名簿は範囲が限定された OCR のname_candidatesを公開できますが、それらは生のヒントであり、自動的に保存されることはありません。生のラベルはspeaker_nameの隣に引き続き存在します。後続のダイアリゼーション修正でラベルが変わった場合、検証済みの名前はアクティブでなくなり、黙って失われるのではなく、範囲が限定されたspeaker_names_pending_reviewの証拠に移動します。現在の名簿を再確認し、影響を受けた各ラベルをlabel_speakersで明示的に確認または削除してください。 - 0.3.1 より前に生成された動画ジョブは、元のフラットな OCR を保持し、ヒントが存在しない理由を説明するために
name_candidates_noteを返すことがあります。それらは移行なしで完全に読み取り可能なままです。force=true, diarize=trueは、保存されたアイデンティティをレビュー用に保持しつつ、行を認識する OCR を再生成します。
モデルは、固定されチェックサムで検証された URL から ~/.talkthrough/models/ へ一度だけダウンロードされます(合計約 47 MB)。ウォーム実行はパイプラインの他の部分と同様にネットワークを一切使用しません。M シリーズ CPU(4 スレッド)での速度: 26 分の会議は文字起こし時間に加えて約 2 分でダイアリゼーションされます(RTF ≈ 0.08)。メモリ: 1 時間を超える会議をダイアリゼーションしている間、ピーク RSS は 1〜1.5 GB 程度を見込んでください(実際の 73 分の録音で測定)。これは段階が完了すると解放されます。
| 役割 | モデル | ダウンロード | 重みのライセンス |
|---|---|---|---|
| セグメンテーション | pyannote segmentation-3.0(k2-fsa による ONNX エクスポート) | 7 MB | MIT |
| 埋め込み(デフォルト) | NeMo en_titanet_small | 40 MB | Apache-2.0(その NGC モデルカードによると、NeMo Toolkit ライセンス) |
| 埋め込み(代替) | WeSpeaker en_voxceleb_resnet34_LM | 27 MB | CC-BY-4.0 |
| 埋め込み(代替) | 3D-Speaker campplus_sv_en_voxceleb_16k | 30 MB | Apache-2.0 |
デフォルトは実際の会議のアクセプト評価(RU/EN/ES + 3 話者の 26 分会議)で勝利しました。num_speakers=3 で 3 人の実際の声すべてを分離した唯一の候補であり、次点の 2 倍の速度でした。
代替の埋め込みモデルを選ぶ(またはオフライン環境向けに独自の .onnx ファイルを指定する)には TALKTHROUGH_DIARIZATION_EMB_MODEL を使用します。不明話者数の感度を調整するには TALKTHROUGH_DIARIZATION_THRESHOLD を使用します(docs/TROUBLESHOOTING.md を参照)。正直な品質に関する注意事項は Limitations に記載しています。
プライバシー
すべてはローカルで実行されます。録音がお使いのマシンから外に出ることはなく、音声はローカルの whisper モデルで文字起こしされ、OCR と話者ダイアリゼーションはローカルの ONNX 推論で行われ、テレメトリは一切ありません。ローカルファイルの場合、唯一のネットワークアクセスは一度きりのツール/モデルのダウンロードです(ffmpeg ビルド、whisper モデル、OCR モデル、ダイアリゼーションモデル — 後者は URL + sha256 で固定されています)。唯一の意図的な例外は process_url です。これは指定された公開ソースをそのプロバイダーまたは CDN から一度だけダウンロードし、それ以外は何も行いません — メディアがアップロードされることはなく、クラウドの STT や LLM が呼び出されることもなく、そのダウンロード後はジョブ上のすべてのツールが再びネットワークフリーになります。生の URL(署名付きトークンを含む場合があります)は保存されません。ジョブはハッシュ、公開プロバイダー ID またはホスト、および長さを制限したタイトルのみを保持します。ダイアリゼーションは声紋データベースを保持しません。声の埋め込みはプロセスメモリ内にのみ存在し、匿名のターンラベル(S1/S2)だけがディスクに保存されます。あなたのエージェントは、既存のセッション内で MCP ツールが返すペイロード(テキストと選択されたフレーム)のみを参照します。talkthrough 自体は LLM 呼び出しを一切行いません。
言語
Whisper の約 99 言語のいずれかでのナレーションが機能します。言語は録音ごとに自動検出され、サマリーは language と language_probability の両方を報告するため、エージェントは確実な検出と不安定な検出を区別できます(冒頭の無音や音楽は検出器を誤らせることがあります — そのような場合は language="ru" と force=true で固定してください)。話者ダイアリゼーションは音響的です — 単語ではなく声を指紋として識別します — そのため言語に依存せず、これらすべての言語で変更なく機能します。
言語に合わせてモデルを選択してください — 呼び出しごと(model= パラメータ。文字起こしが乱れたときにエージェントが自らこれを行います)またはサーバーのデフォルトとして(TALKTHROUGH_WHISPER_MODEL):
| モデル | サイズ | 最適な用途 |
|---|---|---|
small(デフォルト) | 464 MB | CPU での英語および主要言語のナレーション |
large-v3-turbo | 約 1.5 GB | 非英語に推奨 — large に近い品質を small に近い速度で |
medium | 約 1.5 GB | turbo に対する保守的な代替 |
tiny / base | 75〜145 MB | 素早い下書き、CI |
*.en バリアント | — | 英語専用、EN ではわずかに高速/高品質 |
すべての言語で機能するヒント: vocabulary="Term1, Term2" で製品名を渡すと(デコーダーがバイアスされ専門用語が残ります)、またワークフロープロンプトはエージェントに、引用はそのまま保持しつつナレーターの言語でダイジェストを書くよう指示することに注意してください — サーバーは翻訳を一切行いません(正確な引用は証拠であり、翻訳はエージェントの仕事です)。
画面上のテキスト(OCR)はデフォルトで RapidOCR のラテン文字+中国語モデルを使用します。その他の文字体系では TALKTHROUGH_OCR_LANG をあなたの言語に設定してください — ru/uk(→ eslav パック)、ja、ko、ar、hi、el、th、または cyrillic のような任意の RapidOCR パック名 — そして force=true で再処理してください。対応する認識モデルが一度だけダウンロードされます。音声言語のサポートはいずれの場合も影響を受けません。
設定
| 環境変数 | デフォルト | 意味 |
|---|---|---|
TALKTHROUGH_WHISPER_MODEL | small | デフォルトの whisper モデル(tiny/base/small/medium/large-v3/large-v3-turbo)。model ツールパラメータは呼び出しごとに上書きします |
TALKTHROUGH_OCR | on | off に設定すると OCR をスキップします |
TALKTHROUGH_OCR_LANG | Latin+Chinese | 画面上のテキストの認識スクリプト: 言語コード(ru、ja、ko、ar、hi など)または RapidOCR パック名(eslav、cyrillic、latin など)。モデルは一度だけダウンロードされます |
TALKTHROUGH_OCR_PARAMS | — | 上級者向け: 派生したパラメータにマージされる生の RapidOCR パラメータの JSON オブジェクト。例: {"Rec.lang_type": "cyrillic"} |
TALKTHROUGH_DIARIZE | off | on に設定するとデフォルトで話者分離を行います([diarization] エクストラが必要です。ない場合は警告とともに機能が低下します)。明示的な diarize ツールパラメータが常に優先されます |
TALKTHROUGH_DIARIZATION_THRESHOLD | 0.5 | num_speakers が不明な場合のクラスタリング感度: 期待より話者が少ない → 下げる、多い → 上げる |
TALKTHROUGH_DIARIZATION_SEG_MODEL | pyannote-segmentation-3-0 | セグメンテーションモデル: 許可リスト名またはローカルの .onnx へのパス(オフライン事前配置) |
TALKTHROUGH_DIARIZATION_EMB_MODEL | nemo_en_titanet_small | 埋め込みモデル: 許可リスト名(話者を参照)またはローカルの .onnx パス |
TALKTHROUGH_DIARIZATION_THREADS | min(4, cpus) | 両方の話者分離モデル用の ONNX スレッド数 |
TALKTHROUGH_MAX_SECONDS | 7200 | メディアの最大長(process_url のダウンロード前にプロバイダのメタデータに対してもチェックされます) |
TALKTHROUGH_MAX_FRAMES | 600 | ジョブごとのキーフレーム予算。全体の長さに分散されます(1 秒の選択下限は、長い録音では duration/budget に自動的に拡大します) |
TALKTHROUGH_MAX_DOWNLOAD_BYTES | 2147483648 (2 GiB) | 1 回の process_url ダウンロードのハード上限。転送前および転送中に適用されます |
TALKTHROUGH_HOME | ~/.talkthrough | ジョブストアのルート(URL ジョブはダウンロードしたソースを jobs/<id>/source/ 配下に保持します) |
CLI
パイプラインは CLI としても利用できます — エージェントセッション外で長い録音を 前処理するのに便利です(ストアはコンテンツアドレス方式なので、エージェントは その後同じジョブを即座にクエリできます):
talkthrough-mcp process ~/Videos/long-session.mov # prints the summary
talkthrough-mcp process demo.mov --json # machine-readable
talkthrough-mcp process sync.m4a --diarize --num-speakers 3 # who said what
talkthrough-mcp process-url "https://youtu.be/nHfGfEiVdE8" # one public URL, downloaded once
talkthrough-mcp gc --keep-days 30 # clean the job store (sources go with their jobs)
talkthrough-mcp serve # stdio MCP server (default)
talkthrough-mcp --version # package version + which extras this environment has
--json は失敗時も stdout を機械可読に保ちます(0.4.1)。引数の欠落や不明な
オプションの場合も同様です: プロセスはコード 2 で終了し、stderr には人間向けの
error: … 行が出力され、stdout には 1 つの JSON ドキュメント
{"error": {"type": "UnsupportedUrlError", "message": "…"}} が出力されます。
--version は環境がどのオプションのエクストラを持っているかも表示します —
手書きの設定が、process_url をアドバタイズしながら直接メディアリンクしか
読み取れない最小構成のサーバー(url エクストラのないランチャー)を起動した
場合の最速の確認方法です。サーバーは起動のたびに同じ行を stderr にログ出力
します。
初回実行時の注意: システムの ffmpeg がない場合は一度だけ static-ffmpeg の
ダウンロードが発生します。最初の文字起こしでは whisper モデルがダウンロード
されます(small で約 460 MB)。どちらもキャッシュされます。その後は、デフォルト
モデルかつ OCR 込みで、Apple Silicon の CPU 上でリアルタイムの約 3 倍の速度が
期待できます(2 分のクリップが約 40 秒で処理されます) — そして同じファイルの
再実行は即座に完了します。進捗は MCP の進捗通知としてストリーミングされ、
CLI はステージ行を出力します。詳細:
docs/TROUBLESHOOTING.md。
Windows
CI は windows-latest 上で lint、ユニットスイート、完全な CLI スモーク、
話者分離スモークを実行します(static-ffmpeg の Windows ビルド、whisper tiny
での文字起こし、OCR、即座の冪等な再実行、ネイティブの sherpa-onnx スタックを
通した話者名簿のアサート)。注意: ジョブごとのロックは常にスレッドを直列化
します。POSIX ではプロセス間ロックに fcntl も使用します。スペースを含む
パスは引用符で囲んでください
(uv run talkthrough-mcp process "C:\Videos\Screen Recording.mp4")。
問題が発生した場合は、issue を作成してください。
対応している入力
動画: .mov .mp4 .webm .mkv .ogv — 音声のみ: .m4a .mp3 .wav .ogg
.flac(文字起こしツールのみ。フレームツールは利用できない理由を説明します)。
URL(0.4.0 以降、process_url 経由): これらのメディアファイルのいずれかへの直接の https:// リンク、公開 YouTube 動画 1 本(watch、youtu.be、shorts、完了したライブ)、または yt-dlp が読み取れる公開動画ページ — 公開 Instagram リール、TikTok、Wikimedia Commons のファイルページ(いずれもリリース日に検証済み)、yt-dlp の約 1800 のサイトエクストラクターの残り、およびプレーンな HTML5/HLS プレーヤーを持つページ(上記で生成された設定にすでに含まれている [url] エクストラが yt-dlp を導入します)。常に匿名です。匿名のクライアントにサインインを要求するサイト(この yt-dlp では Vimeo が該当します)は、理由を付けて拒否されます。ソースは
一度だけダウンロードされ、ジョブ内に保持され、後の質問のために再取得されることはありません。非対応: プレイリスト、チャンネル、進行中のライブストリーム、
非公開、メンバー限定、年齢制限付きまたは DRM 保護された動画、Cookie または
ログイン — ログインやボット対策の壁の背後に動画を隠すサイトは、回避策ではなく明確な拒否を返します(特に Instagram は匿名アクセスをレート制限します)。指定した対象をダウンロードして処理する権利があることはあなたの責任です。talkthrough はいかなる制限も回避しません。
制限事項
正直な限界を挙げるので、すぐに判断できます:
- 話者ラベルはワードレベルで、新しいジョブではオプトインです。 各 Whisper の単語は
話者分離ターンとの最大オーバーラップによって割り当てられるため、速いやり取りでも
生のラベルを失わずに分割されます。古いジョブは引き続き読み取り可能で、正直に
attribution_precision="segment"を報告します。force=trueで再処理すると ワードタイミングが追加されます。話者分離エンジンが別個のターンを検出しない場合、 1 秒未満の相づち(「yeah」「mhm」)は依然として吸収されることがあり、激しい 同時発話はクラスタリングを劣化させます(セグメンテーションモデルは最大 2 つの 同時音声を追跡します)。品質は pyannote-3.x 世代です。ヒントなしの快適ゾーンはおおよそ 2〜8 話者です。 人数がわかっているときは常にnum_speakersを渡してください — どの規模でも 最悪の失敗モードを取り除き、大規模な会議(10 人以上)ではこれが推奨される方法です。 - URL 取り込みはログインなしで、一度に 1 本の公開動画を対象とします。
直接の HTTPS メディアリンク、単一の公開 YouTube 動画、および yt-dlp が読み取れる
公開動画ページ。プレイリスト、チャンネル、ライブストリーム、制限付きまたは DRM
コンテンツ、ログインやボット対策の壁の背後にあるものは、理由を付けて拒否されます。
サイトは変化します。昨日動いたページが明日には新しい yt-dlp を必要とすることがあります。
プロバイダーのアップロード日は録画時刻ではないため、コンテナに使用可能な作成タイムスタンプが
あるか、
recorded_atを渡さない限り、URL ジョブはwall_clock: nullになります。 ダウンロードファイルの mtime は決して使用されません。 - メモリ: コールド実行には約 2 GB を見込んでください。 Whisper、OCR モデル、および
フレームパスは 1 つのプロセスに存在します。OCR 付きの
tinyでの 78 秒動画は、 0.4.0 リリース QA 中に 1.6 GB RSS でピークに達しました(ダウンロードを含む)。 デフォルトのsmallモデルはより多くを必要とし、より大きなモデルはそれに比例します。 8 GB のノート PC なら対応できます。それより厳しい環境ではモデルを小さく保つか、 エージェントセッションの前に CLI を実行してください。 - キーフレーム + 文字起こしであり、モーション分析ではありません。 シーン変化の
間 にある不具合はフレームセットでは見えないことがあります。
extract_frameは 任意の瞬間を再確認しますが、フレーム単位のモーション推論はあなたのマルチモーダル モデルの役割です。 - STT の品質は選んだモデルに連動します。 デフォルトの
smallは速度を優先します。 英語以外のナレーションにはmodel="large-v3-turbo"が適しています( 言語 を参照)。 - OCR はくっきりした UI テキストをうまく読み取ります。 小さな文字や 低コントラストの印刷物はベストエフォートです。
- 実時間の信頼度はレコーダーのメタデータに依存します — 最悪の場合は
recorded_at=を渡してください(上記のはしごを参照)。 - Windows の注意点 — POSIX ロックは no-op に縮退します。上記の Windows セクションを参照してください。
比較
| talkthrough | クラウドレコーダー SaaS | 会議ノートツール | 一般的な動画アナライザー MCP | |
|---|---|---|---|---|
| 完全にローカルで動作 | ✅ | ❌ | ❌ | さまざま |
| 任意のローカル動画・音声ファイル | ✅ | ブラウザ/アプリによるキャプチャ | 会議のみ | ✅ |
| 公開動画 URL:一度ダウンロードし、ジョブと共に保持してローカルで分析 | ✅ | 該当なし | 該当なし | 一時ダウンロード、多くの場合クラウドで分析 |
| 実時間のアンカリング(ログの紐付け) | ✅ | ❌ | ❌ | ❌ |
| 誰が何を話したかの話者ラベル | ✅ ローカル、オプトイン | 一部対応 | ✅ クラウド | ❌ |
| エージェントワークフローを同梱(プロンプト、スキル、findings 契約) | ✅ | ❌ | ❌ | ❌ |
| 画面上のテキストの OCR、検索可能 | ✅ | 一部対応 | ❌ | まれ |
FAQ
マルチモーダルモデル(例: Gemini)に動画をそのままアップロードすればよくないですか?
短く、機密性のないクリップなら、そうしてください。トレードオフが現れるのは、長さと機密性の面です。1 時間の画面録画は質問ごとに100 万トークン規模のコストがかかり、ファイルはあなたのマシンから出ていき、しかもある発言を 14:32:07 UTC に対応付けてサーバーログを grep することはできません。talkthrough は一度ローカルでインデックスを作成し、その後は何度でも追加の質問にインデックスから答えます。
screenpipe ではだめなのですか?
役割が違います。screenpipe は、これ以降あなたのマシンを常時録画するレコーダーです(商用ライセンス)。同僚や顧客がたった今送ってきた .mov を開くことはできません。talkthrough は渡された任意のファイルを分析します。この 2 つは問題なく組み合わせられます。
動画を「視聴」するエージェントスキルがあります。なぜインデックス付きのサーバーが必要なのですか? 視聴型のスキルは、予算内のフレームダンプをコンテキストウィンドウに押し込み(しかも長い動画では疎になります)、多くの場合音声にクラウド STT を呼び出し、何も保持しません。talkthrough は永続的なローカルインデックス(文字起こし + OCR、全文検索可能)を構築し、必要なフレームを遅延して取得し、すべてを実時刻にアンカーし、再処理せずに次の質問に答えます。
バグ報告には Jam を使っていますが、これは必要ですか? ブラウザのバグには Jam を使い続けてください。記録時に取得されるコンソール + ネットワークは優れた証拠になります。talkthrough はブラウザ拡張機能ではカバーできないもの — デスクトップアプリ、モバイルの画面収録、運用インシデント、会議、あらゆるファイル — をアカウントなしでカバーし、実時刻を通じてサーバー側のログと関連付けます。
これを動かすにはどのエージェントモデルが必要ですか?
v0.4.0 では、以下の 6 つのモデル設定が URL 取り込み(YouTube、TikTok ページ、発話のない Instagram リール、プレイリストの拒否、欠落した実時刻)に関する 61 個の分離された挙動セルと、0.3.2 の整合性修正を実行しました。最初の試行で明らかになった 2 つの製品修正(Codex はオープンワールドの process_url に対するツール単位の承認が必要で、サーバーは URL ジョブに実時刻がない場合に自らそれを通知するようになりました)の後、すべてのセルがすべてのランナーで合格しています。v0.3.0 では、6 つのモデル設定(Claude haiku/sonnet/opus、2 つの推論エフォートでの Codex gpt-5.5、および gpt-5.4-mini)にわたる 210 個の分離されたエージェントセルと、5 つの実際の録画に加えて安全性および話者ラベルのフィクスチャに関する 35 個の論理シナリオを実行しました。102 件すべての LLM 判定による完全グリッド結果と、すべての機械的ゼロは手動で監査されました。30 件の新しい話者挙動実行は合格し、旧サーバーの対照ではリリースに起因する回帰は 0 件でした。これはモデルドリフトのスナップショットであり、リーダーボードではありません。最新のマトリクスは
docs/MODEL-NOTES.md を参照してください。
benchmarks/ のグラフと解説は、歴史的な v0.2.0 のスナップショットのままです。
ffmpeg + whisper を自分でスクリプト化すればよいのでは?
はい — まさにそれがこのパイプラインです。あなたが再構築することになるもの: 知覚的デデュープを伴うシーン変化検出、OCR、文字起こし + OCR 検索、実時刻ラダー、使用例を埋め込んだ MCP ツール、6 つのワークフロープロンプト、そして findings コントラクト。午後いっぱいのつなぎ込み作業の代わりに、1 つの uvx コマンドで済みます。
本当にローカルですか?何が私のマシンから出ていきますか?
何もアップロードされません、決して。ローカルファイルの場合、ネットワークは一度きりのダウンロード(ffmpeg ビルド、whisper/OCR/ダイアライゼーションモデル)にのみ使用されます。process_url は実行時にネットワークと通信する唯一のツールであり、しかも下りのみです。指定した公開ソースを一度だけ取得します。テレメトリーはありません。
Privacy を参照してください — そして SECURITY.md は、この約束の違反を脆弱性として扱います。
エージェントとツール向け
AI エージェントがドキュメントを人間が読むことなくこのサーバーをインストールして利用できるよう、機械可読なエントリポイントを用意しています:
llms-install.md— エージェント向けの手順ごとのインストール手順llms.txt— ドキュメントのインデックス.agents/skills/talkthrough/SKILL.md— ツールのワークフローを教える Agent Skill。チェックアウト内で Codex CLI によって自動的に検出され($talkthrough)、Claude Code、Cursor、Copilot、Gemini CLI などの SKILL.md 互換ツールからも読み取れますAGENTS.md— このリポジトリに貢献するコーディングエージェント向けの手順server.json— MCP レジストリのマニフェストintegrations/— エンジンごとのアダプター。すべて単一の信頼できる情報源から生成され、ドリフトテスト済みです(integrations/claude-code/配下の Claude Code プラグインを含む)docs/URL_ACCEPTANCE_CORPUS.md—process_urlのリリース QA を支えるライブ URL コーパス(手動、ネットワークが必要。CI はオフラインのまま)
ロードマップ
クラウド STT · 埋め込み/セマンティック検索 · ホスト型/リモートモード · .mcpb
バンドル · whisper.cpp バックエンド
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。