ollos-mcp について
ollos-mcp は、AI エージェント向けのローカルメディア処理ツールで、MCP サーバー、CLI、Node ライブラリとして利用できます。クラウドサービスや API キーを使わず、音声の文字起こし、キーフレームと画面テキストの抽出、公開前チェックを行います。
主な機能
- 01ローカルでタイムスタンプ付き文字起こし
- 02キーフレームを抽出してコンタクトシート化
- 03画面テキストの読み取りとシークレット検出
- 04公開前の音量、画角、シークレット確認
- 05非同期ジョブの状態確認とキャンセル
活用シーン
- 01公開前に画面録画のキー露出を確認する
- 02会議音声からタイムスタンプ付き文字起こしを作る
- 03講義動画からキーフレームとテキストを抽出する
- 04文字起こしと画面認識内容を検索する
MCP 対応
MCP サーバーはメディア解析、文字起こし、キーフレーム、OCR、レビュー、検索、ジョブ管理のツールを提供します。長時間の処理はジョブ ID を返し、結果は MCP リソースからも取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y ollos-mcpOLLOS_HOMEWhere jobs, cache and models live. Default ~/.ollosOLLOS_OFFLINESet to 1 to forbid any network access (models must be warmed up first)OLLOS_YTDLPPath to a yt-dlp binary for video-site URLs (default: found on PATH)OLLOS_YTDLP_ARGSAllow-listed yt-dlp flags, e.g. --no-check-certificates behind a TLS-intercepting proxyローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
10掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to | any | いいえ | ウィンドウの終了位置。形式は from と同じです。デフォルト:メディアの末尾。 |
| from | any | いいえ | 分析するウィンドウの開始位置:秒数を数値(90)または文字列 "90"、"1:30"、"0:01:30.5" で指定します。デフォルト:先頭。 |
| format | enum | いいえ | concise(デフォルト)は応答を小さくしてリソースを示します。detailed はトークン予算内ですべてを返します。concise | detailed |
| source | string | はい | ローカルパス、Zoom のローカル録画フォルダー、http(s) URL、動画サイトの URL(yt-dlp)、または data: URI。 |
| maxSpeakers | integer | いいえ | 話者数の上限。デフォルトは 8 です。 |
| minSpeakers | integer | いいえ | 話者数の下限。デフォルトは 1 です。 |
| transcriptJobId | string | いいえ | 同じメディアで完了した ollos_transcribe の jobId。各セグメントに話者ラベルが付きます。 |
| similarityThreshold | number | いいえ | 2 つのターンを同じ話者と判定するコサイン類似度のしきい値。デフォルトは 0.35 です。 |
詳細
ollos-mcp
AI エージェントの目と耳です。 音声、動画、画像をローカルでオフライン処理し、文字起こし、キーフレーム、画面上のテキストを取得して、公開前レビューを行います。MCP サーバー、CLI、Node ライブラリとして利用できます。Python、クラウド、API キーは不要です。
ドキュメント: ツールリファレンス · 設計ドキュメント — 判断と測定結果 · 評価結果 · コントリビューション · セキュリティ · 変更履歴
11 分の画面録画が、14 枚のコンタクトシートと 3 KB のテキストになります。さらに、2:50 に API キーが見えていないかも教えてくれます。
npx ollos-mcp # MCP server on stdio
npx ollos review talk.mp4
Ollos はガリシア語で「目」を意味します。
目次: 理由 · インストール · ツール · ソース · CLI · ライブラリ · 仕組み · 評価 · 要件とパフォーマンス · プライバシーとセキュリティ · 設定 · トラブルシューティング · 既知の制限 · ロードマップ
理由
エージェントは音声を聞いたり、映像を見たりできません。現在は、文字起こし API に料金を払うか、Python のパイプラインをインストールするか、フレームを手作業で貼り付ける必要があります。Ollos は Whisper、話者のセグメンテーション、知覚ハッシュによるキーフレーム抽出、OCR を、ONNX Runtime を通じて Node 上でマシン上で実行します。ファイルがマシンの外に出ることはありません。
まず、画面録画を公開前にレビューするという 1 つのワークフローのために作られました。その後、会議、レッスン、ポッドキャスト、ダウンロードした動画など、一般的な用途へと広がりました。
インストール
Node 20 以降。npm install で ffmpeg(ffmpeg-static)もインストールされます。システムに ffmpeg がある場合はそちらが使用されます。
Claude Code
claude mcp add ollos -- npx -y ollos-mcp
または、プロジェクトの .mcp.json に追加します(同じ JSON は、Claude Desktop の claude_desktop_config.json、Cursor の .cursor/mcp.json、Windsurf の mcp_config.json でも使えます)。
{
"mcpServers": {
"ollos": { "command": "npx", "args": ["-y", "ollos-mcp"] }
}
}
VS Code — .vscode/mcp.json では mcpServers の代わりに servers を使います。
{
"servers": {
"ollos": { "type": "stdio", "command": "npx", "args": ["-y", "ollos-mcp"] }
}
}
Claude Desktop は、macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json を読み込みます。環境変数(OLLOS_HOME、OLLOS_YTDLP など)は、args の隣にある env オブジェクトに設定します。絶対パスを使用してください。~ は展開されません。
CLI
npm i -g ollos-mcp
ollos warmup # download the default ASR model and VAD (2.75 GB)
ollos warmup --all # every model: fast ASR, speakers, search, OCR data (3.3 GB total)
ollos doctor # check ffmpeg, models, free memory, cores
モデルは初回使用時に ~/.ollos/models へダウンロードされます。その後、OLLOS_OFFLINE=1 を設定すると、すべてのネットワークアクセスを禁止できます。
ツール
異なる契約ごとに1つ、計10個のツールがあります。長時間かかる処理はブロックせず、ポーリングする jobId を返します。
| ツール | 機能 |
|---|---|
ollos_probe | ファイルの実際の内容を確認します。種類、長さ、解像度、アスペクト比(適合するプラットフォームも含む)、コーデック、トラックを調べます。Zoom の録画フォルダーも検出します。即座に完了します。 |
ollos_transcribe | タイムスタンプ付きの Whisper 文字起こしです。音声アクティビティに基づく処理で無音をスキップし、既知の幻覚を除外します。vocabulary で専門用語を修正できます。 |
ollos_keyframes | 情報を含むフレームを抽出し、タイムスタンプ付きの3×3コンタクトシートにまとめます。シーン検出で何も見つからない画面録画でも機能します。 |
ollos_read_screen | 画面上のテキストを OCR で読み取り、さらに 秘密情報をスキャンします。API キー、JWT、.env の行、非公開のデプロイ URL を検出します。常にマスクされます。 |
ollos_review | 公開前の判定を行います。プラットフォームに対する音量、カットすべき無音、アスペクト比、画面上の秘密情報を確認します。 |
ollos_frames | シートまたは単一のフレームを画像として確認します。 |
ollos_diarize | いつ誰が話したかを判定します。pyannote によるセグメンテーション、WeSpeaker の埋め込み、クラスタリングを行い、話者ごとに8秒間の音声クリップを用意するため、耳で聞いて名前を付けられます。利用可能な場合は Zoom の参加者別トラックを直接使用します。実験的機能です。制限事項を参照してください。 |
ollos_search | 文字起こしおよび読み取り済みのすべての内容を対象に、BM25 と多言語埋め込みを組み合わせた検索を行い、逆順位融合で統合します。タイムスタンプ付きの抜粋を返し、文字起こし全体は返しません。 |
ollos_job · ollos_cancel | ジョブの状態を確認し、停止します。ジョブはディスク上に保存され、サーバーの再起動後も保持されます。 |
各パラメーターは docs/TOOLS.md に記載されています(各ツールに1つずつアンカーがあります。例:ollos_transcribe)。エージェントが参照するツールの説明にも同じ情報が含まれています。
ソース
source には、ローカルパス、file:// URL、Zoom のローカル録画フォルダー(参加者ごとに1つの音声トラック)、直接の https:// メディア URL、動画サイトの URL(YouTube、Instagram、TikTok、Vimeo、X、Loom など。yt-dlp 経由)、および data: URI を指定できます。URL はキャッシュに一度だけダウンロードされます。ダウンロードはジョブ内で実行され、キャンセルできます。拒否されるもの:リダイレクトの各段階におけるプライベート、ループバック、リンクローカルのアドレス(許可するには OLLOS_ALLOW_PRIVATE=1 を指定)、OLLOS_MAX_DOWNLOAD_MB を超えるダウンロード、配信元を問わず OLLOS_MAX_DURATION_SEC を超えるメディア。
ollos transcribe "https://www.youtube.com/watch?v=eur8dUO9mvE" --lang en --from 0 --to 30
テスト済みのコマンド、yt-dlp のセットアップ、プロキシに関する注意事項:examples/url-sources.md。
結果は デフォルトで簡潔で、完全な成果物を確認できる MCP リソース(ollos://jobs/<id>/transcript、/ocr、/report、/sheet/<n>)を示します。そのため、2時間の会議でもコンテキストウィンドウが埋まりません。すべての内容を取得するには、format: "detailed" を指定してください。
CLI
ollos probe recording.mp4
ollos transcribe meeting.mp4 --lang pt --vocab "Claude Code,n8n,webhook"
ollos keyframes lesson.mp4 --sensitivity normal --max-frames 120
ollos read-screen demo.mp4
ollos review episode.mp4 --platform youtube # exit 3 = block, 1 = warn or failure, 2 = usage error, 0 = ok
ollos jobs · ollos job <id> · ollos events <id> · ollos cancel <id>
機械処理向けの出力には --json を追加してください。
ライブラリ
import { createOllos, type TranscribeResult } from 'ollos-mcp'
const ollos = createOllos()
const { job, result } = await ollos.transcribe({ source: 'talk.mp4', language: 'pt', vocabulary: ['MCP'] })
const transcript = result ?? (await ollos.wait<TranscribeResult>(job.id)).result // inline when small, a job otherwise
console.log(transcript?.segments[0])
詳細:examples/library.ts(すべての機能)および examples/library-url.ts(ソースとして YouTube の URL を指定)。
ollos-mcp/core には MCP への依存関係がありません。n8n、スクリプト、Lambda から使用できます。
仕組みと測定結果
以下の数値は、11:37 のスクリーンキャスト(1890×1080、ウェブカメラのオーバーレイ)を16コアのノートPCで測定したものです。これが現在の設計の理由です。
文字起こし。 Silero VAD が音声を検出し、Whisper は音声部分だけを処理します(幻覚が減り、会議では作業量が20~40%減少します)。whisper-large-v3-turbo は実時間の1.7倍の速度で、「MCP servers」、「n8n」、「VS Code」を正しく認識しました。一方、whisper-base は5.4倍の速度でしたが、3つとも誤認識しました。残った音声上の誤認識「Cloud Code」は、vocabulary で修正できます。Whisper セッションを2つ並列で実行すると、1つの場合より遅くなる(0.6~1.0倍)ことが測定で分かったため、ASR の並列数は1にし、VAD と、代わりにビジョン処理を並列実行することで速度を高めています。
幻覚の抑制。 Whisper は無音時にも黙りません。「Obrigado.」や「Subtitles by the Amara.org community」をでっち上げます。Vexa プロジェクトが共有した本番環境での経験を基に、4つのフィルターを使用します。言語ごとの完全一致ブロックリスト、繰り返しループの圧縮、無音声ゲート、あり得ない発話速度の検出です。
キーフレーム。 ffmpeg のシーン検出では、11分のスクリーンキャストから4フレームしか残りませんでした。mpdecimate では**0%**しか除去されませんでした(カーソルやストリーミング中のテキストがピクセル単位で変化するためです)。ハミング距離が6以上の64ビット知覚ハッシュ(dHash)では20%が残り、5~8秒ごとに1フレームとなるため、これがデフォルトです。ハードカット、文字起こしのアンカー、20秒の下限で隙間を補います。
OCR。 1890ピクセルのフレーム全体に対する Tesseract は、画面上のURLを完全に見落としました。一方、3倍に拡大したタイルでは、2.8秒で信頼度90%でURL全体を読み取れました。そのため、OCR はタイルごとに実行し、OCR がURLに似たテキストを分割した場合(「up. railway .app」など)は再結合します。
シークレット。 シークレットは周囲の単語よりも OCR で文字化けしやすいため、3種類のシグナルを使います。実際の「API Key Created」モーダルでは、通常の JWT 正規表現は検出できませんでした(OCR が eyJ を eyl と読み取ったため)。エントロピー検出器は157文字のトークンを検出し、UI コンテキストの読み取りでは66%の信頼度でした。OCR に耐性のある JWT パターン、ネイティブ解像度のフレーム、中央タイルを使うと、エンドツーエンドの実行で high · jwt · near "API Key" → block と報告されるようになりました。初期バージョンでは、空白を取り除いたテキストにエントロピーテストを実行したことで、誤検知が58件発生しました。これは現在、回帰テストになっています。値は常にマスクされます。漏えいを警告するツール自体が漏えい元になってはなりません。
変化を検出したキーフレームは、この特定のチェックには適していません。変化しない画面に1分間表示された認証情報は、dHash の候補として1つだけになります。また、以前はフレーム上限の間引き処理により、真に冗長なフレームと同じ条件でその候補も削除されていました。実際に見逃しが起き、#3 として報告されました。ollos_review のシークレットチェックは、映像が変化したかどうかにかかわらず、一定の4秒間隔で画面を読み取るようになりました。この保証は、フレーム上限適用後も preserveFloor によって維持されます。また、検出結果には実際に達成したカバレッジが記載されます。通常の長さの録画では Read the full 11:37 at a 4s cadence、非常に長い録画では OLLOS_MAX_FRAMES による上限を明記した Partial coverage: … となり、実際より少ない範囲しか確認していないのに、それを隠して問題なしと判定することはありません。
話者。 セグメンテーションだけでは、1人だけが映る動画でも話者が3人とラベル付けされました(ID は10秒ごとのウィンドウ内でのみ有効です)。1.5秒以上の発話ごとに埋め込みを作成し、コサイン類似度0.35で平均連結法によるクラスタリングを行い、小さなクラスタを吸収したところ、1人にまとまりました。さらに評価を進めると、実際の失敗モードが分かりました。同じ声でも、位置や長さによって類似度は0.58~0.86になりますが、背景音楽が重なると0.06~0.16まで下がります。そのため、しきい値をどう設定しても、ジングルやアウトロが独立した「話者」になります。このツールは引き続き実験的な扱いであり、そのことを出力でも明示します。
ジョブ。 クライアントのタイムアウトは短く(Messages API は約60秒)、時間のかかるツールはすべてジョブハンドルを返します。状態は ~/.ollos/jobs/<id>/job.json に保存され、アトミックに書き込まれます。ハートビートは5秒ごとです。再起動時には、孤立したジョブは無期限にハングするのではなく、interrupted になります。推定所要時間が8秒未満の処理はインラインで実行し、結果を直接返します。
評価
npm run eval は公開動画に対して ollos を実行し、eval/RESULTS.md に結果を書き込みます。参照トランスクリプトは YouTube の字幕です。そのため、自動字幕が付いたテスト動画での WER は、絶対的な誤り率ではなく、2 つの音声認識器の一致率を示します。
| テスト動画 | 種類 | 参照 | WER | CER | 話者(予想 → 検出) |
|---|---|---|---|---|---|
| IBM Technology、What is MCP?(英語、3:46) | ライトボード形式の講演 | プロによる字幕 | 1.4% | 0.5% | 1 → 2(エンディングの音楽) |
| Karine Lago、n8n assistant(ポルトガル語、10:35) | 画面録画 | 自動字幕 | 8.9% | 6.1% | 1 → 1 |
| Bolder Podcast、開発者インタビュー(ポルトガル語、5:28) | インタビュー | 自動字幕 | 26.3% | 17.0% | 2 → 3(ジングル) |
インタビューでは、「誤り」の半分は挿入です。Whisper は自動字幕で省かれている繰り返しやフィラーをそのまま認識しています。また、参照字幕にはいくつか誤りがありました(Glassdoor を「Clash Orto」としているものなど。ollos は正しく認識しています)。キーフレームにより、10 分の画面録画は 14 枚のシート上の 120 フレームに、講演は 6 枚のシート上の 51 フレームに削減されました。この実行での速度は、高負荷のマシンで実時間の 0.2~0.35 倍でした。同じモデルを単独で測定した場合は 1.7 倍です。再現方法と各数値の意味については、eval/README.md を参照してください。
要件とパフォーマンス
評価用テスト動画で測定しました。プロセスのメモリは 200 ms ごとにサンプリングしています(scripts/probe-memory.mts)。マシン:Intel i9-12900HX(16 コア)、Windows 11、Node 20。他のプロセスが CPU の約 18% を使用している状態です。
| 対象 | ディスク(モデル) | プロセスのピークメモリ | 速度 |
|---|---|---|---|
OCR なしの ollos_probe、ollos_keyframes、ollos_review | なし | 約 200 MB | キーフレーム:動画 2 分あたり約 15 秒 |
文字起こし、model: "fast"(whisper-base) | 280 MB | 約 1.9 GB | 読み込み後、音声 60 秒あたり約 15 秒(実時間の約 4 倍) |
| 文字起こし、デフォルト(whisper-large-v3-turbo、fp32 エンコーダー + q4 デコーダー) | 2.75 GB | 約 4.3 GB | 音声 60 秒あたり約 46 秒(実時間の約 1.3 倍。アイドル状態のマシンでは 1.7 倍) |
+ ollos_diarize(pyannote + WeSpeaker) | +32 MB | +0.1 GB | 読み込み後、60 秒あたり約 5 秒 |
+ ollos_search(multilingual-e5-small) | +465 MB | +0.8 GB | インデックス構築:トランスクリプトあたり約 4 秒 |
ollos_read_screen / OCR を使ったレビュー(Tesseract ワーカー 2 個) | 8 MB | +0.3 GB | CPU に応じて、ネイティブ解像度でフレームあたり約 1~3 秒 |
| すべてを同時に読み込み | 3.3 GB | 約 5.1 GB |
ここから導かれる最小要件は、デフォルトモデルでは 8 GB の RAM(model: "fast" なら 4 GB で十分)、すべてのモデル用に 4 GB の空きディスク容量、x64 または arm64 の CPU です(GPU は使用しません)。文字起こしの速度は CPU コア数に応じて変化し、計算負荷がボトルネックとなる唯一の段階です。4 コアのノート PC ではデフォルトモデルで実時間の約 0.4 倍となるため、1 時間の会議には 2 時間以上、model: "fast" なら約 40 分かかると見込まれます。
モデルはサーバープロセスの稼働中、メモリに読み込まれたままです。現時点ではアイドル時にアンロードされません。以前はピークメモリが約 10 GB でした。transformers.js のファイルキャッシュが、どこからも読み取られない 2.4 GB のエンコーダーの重みを JavaScript バッファーにストリーミングし、ONNX Runtime 自身のメモリマップされたコピーに加えて保持していたためです。現在 ollos はモデルのパスを直接 ONNX Runtime に渡します(src/core/models.ts の PathCache を参照)。OLLOS_DEBUG_MEM=1 を設定すると、各ジョブイベントにプロセスメモリが記録されます。ollos events <id> で確認してください。
メモリ制限
現在、メモリ上限を設定する方法はなく、サーバープロセスが動作している間、モデルがアンロードされることはありません。 デフォルトモデルで ollos_transcribe を実行すると、プロセスの終了まで約 4.3 GB を保持します。検索も追加すると、約 5.1 GB を保持します。これは速度を優先した意図的なトレードオフです(デフォルトモデルのコールドロードには 50~60 秒かかります)。また、バージョン 0.1.0 のありのままの状態でもあります。
現在、制御できる項目は次のとおりです。
| 調整項目 | 効果 |
|---|---|
呼び出しごとの model: "fast" | 約 4.3 GB の代わりに約 1.9 GB を使用し、3 倍高速になりますが、技術用語を読み間違えることがあります |
任意のツールでの from / to | デコードする音声と抽出するフレームの範囲を制限します。PCM とフレーム用のメモリ使用量は、ファイル全体ではなくウィンドウの長さに応じて増減します |
OLLOS_MAX_DURATION_SEC(デフォルトは 4 時間) | これを超える長さのメディアを拒否し、ウィンドウを指定するよう案内します |
OLLOS_CONCURRENCY_VISION / _OCR(デフォルトは 2) | 並列で実行する ffmpeg/Tesseract ワーカーを減らします。ASR は常に 1 です |
OLLOS_MAX_DOWNLOAD_MB(デフォルトは 2048) | 取得するソースファイルのサイズを制限します |
| サーバーの再起動 | 現在、モデルのメモリを解放する唯一の方法です |
ollos doctor | 起動前に、空き RAM とコア数を測定済みの要件と照らし合わせて表示します |
OLLOS_DEBUG_MEM=1 | すべてのジョブイベントに rss、heap、arrayBuffers(MB)を記録します。ollos events <id> で確認できます |
Node.js 自身の --max-old-space-size は効果がありません。重みは V8 ヒープの外部にある、ONNX Runtime のネイティブメモリに保存されます。
優先度順の計画(ロードマップを参照):
- アイドル時のアンロード — ジョブがない状態が N 分続いた後にモデルを解放します(
OLLOS_MODEL_IDLE_MIN)。次回の呼び出しでは 50~60 秒の再読み込みが発生します。実装コストは低く、パイプラインはすでに遅延読み込みに対応しています。 - メモリガード —
OLLOS_MAX_MEMORY_MB:モデルを読み込む前に、測定済みのピーク使用量と上限、空き RAM を比較します。明確なエラーを返すか、OLLOS_MEMORY_FALLBACK=fastの場合はmodel: "fast"に切り替えます。必要なサイズ情報は、すでにsrc/core/models.tsのカタログに含まれています。
プライバシーとセキュリティ
- データがアップロードされることはありません。ネットワークは、モデルを一度ダウンロードするときと、指定されたソース URL からデータを取得するときにのみ使用されます。
- URL の取得時には、最初のリクエストとリダイレクト先のすべてで、プライベート、ループバック、リンクローカル、IPv6 移行用アドレスへの接続を拒否します(SSRF)。ただし、
OLLOS_ALLOW_PRIVATE=1が設定されている場合を除きます。 - 文字起こし結果と画面上のテキストは
<untrusted-content>内で返されます。これらはデータであり、指示ではありません。同梱のスキルでも、エージェントに同じことを伝えます。 - 検出された秘密情報は、結果、ログ、イベント内でマスキングされます。また、それらと一緒に返される OCR テキストも同じマスクで編集されます。情報漏えいを警告するツール自体が、漏えいの原因になることはありません。
- 他人を録音する場合は、お住まいの地域の法律に従って、その人の同意が必要です。
設定
| 変数 | デフォルト | 意味 |
|---|---|---|
OLLOS_HOME | ~/.ollos | ジョブ、キャッシュ、モデル |
OLLOS_OFFLINE | 0 | 1 にするとネットワークを禁止します。モデルは事前にウォームアップしておく必要があります |
OLLOS_ALLOW_PRIVATE | 0 | プライベートネットワークからの取得を許可します |
OLLOS_MAX_DOWNLOAD_MB | 2048 | ダウンロード上限 |
OLLOS_MAX_DURATION_SEC | 14400 | これを超える長さのメディアは拒否されます(from/to を使用してください) |
OLLOS_CONCURRENCY_VISION / _OCR / _DOWNLOAD | 2 | クラスごとの並列ジョブ数(ASR は 1 に固定) |
OLLOS_MAX_FRAMES | 500 | キーフレームジョブあたりのフレーム数の絶対上限。また、固定間隔で実行される ollos_review のシークレットチェックで、非常に長い録画のどこまでをカバーできるかの上限にもなります(上記の「シークレット」を参照) |
OLLOS_RESPONSE_TOKENS | 20000 | リソースへの参照を付けて切り詰めるまでの応答トークン数 |
OLLOS_INLINE_THRESHOLD_SEC | 8 | 推定作業時間がこれ未満の場合はインラインで実行します。0 の場合はインライン実行しません |
OLLOS_FFMPEG / OLLOS_FFPROBE / OLLOS_YTDLP | 自動 | バイナリのパスを明示的に指定します |
OLLOS_YTDLP_ARGS | — | すべてのサイトからのダウンロードに使う追加の yt-dlp フラグ。許可リストに登録されたものに限ります(例:--no-check-certificates --js-runtimes node) |
OLLOS_DEBUG_MEM | 0 | 1 にすると、すべてのジョブイベントにプロセスメモリ(rss、heap、arrayBuffers。単位は MB)を記録します |
サイトからのダウンロード(YouTube、Instagram、TikTok など)には、PATH 上(または OLLOS_YTDLP で指定した場所)に yt-dlp が必要です。ベストエフォートでの対応となります。プラットフォームは頻繁に変更されます。TLS 証明書を再署名する企業プロキシ経由の場合は、OLLOS_YTDLP_ARGS="--no-check-certificates" を設定してください。ローカルファイルは常に使用できます。
トラブルシューティング
| 症状 | 原因と対処法 |
|---|---|
FFMPEG_MISSING | ffmpeg が見つからず、お使いのプラットフォーム向けの ffmpeg-static のインストールにも失敗しました。ffmpeg をインストールするか、OLLOS_FFMPEG / OLLOS_FFPROBE を設定してください。 |
YTDLP_MISSING | 動画サイトの URL には、PATH 上または OLLOS_YTDLP で指定した場所に yt-dlp が必要です。ローカルファイルと直接 URL は、これがなくても使用できます。 |
YTDLP_FAILED と CERTIFICATE_VERIFY_FAILED | 企業プロキシが TLS 証明書を再署名しています。OLLOS_YTDLP_ARGS="--no-check-certificates" を設定してください。その他のエラーの場合は、yt-dlp -U を実行するか、ファイルをダウンロードしてそのパスを渡してください。 |
MODEL_MISSING_OFFLINE | OLLOS_OFFLINE=1 ですが、モデルが一度もダウンロードされていません。オンライン時に一度 ollos warmup --all を実行してください。 |
PRIVATE_ADDRESS_BLOCKED | URL(またはその URL から返されたリダイレクト先)がプライベートアドレスまたはループバックアドレスを指しています。意図した動作ですか? OLLOS_ALLOW_PRIVATE=1 を設定してください。 |
DURATION_EXCEEDED | メディアが OLLOS_MAX_DURATION_SEC(4 時間)を超えています。from/to を渡すか、上限を引き上げてください。 |
起動時に Could not load the "sharp" module using the win32-x64 runtime(または別のプラットフォーム)と表示される | npx のキャッシュに、プラットフォーム用の sharp バイナリを含まないインストールが残っています(Windows で一度確認されています。macOS と Linux のバイナリはあるのに、win32-x64 がありません)。キャッシュを消去して再試行するか、グローバルにインストールしてください:npm i -g ollos-mcp を実行し、クライアントから ollos-mcp コマンドを指定します。 |
| クライアントで JSON の解析エラーが報告される、またはサーバーが「すぐに終了する」 | 何かが stdout に書き込みました。サーバーは stdout を保護しているため、これはインストールの破損を示しています。node dist/mcp/bin.js を実行し、手動で initialize 行を送信してください(CI でも同じ操作をしています)。npm run smoke:mcp で再現できます。 |
| 文字起こしが遅い、またはマシンでスワップが発生する | デフォルトのモデルでは、約 4.3 GB の RAM と全コアが必要です。model: "fast"(約 1.9 GB)または from/to で範囲を指定してください。ollos doctor で空きメモリとコア数を確認できます。 |
サーバーが停止した後もジョブが running のままになる | ハートビートが 30 秒前のものになった後、次のポーリング時に interrupted と報告されます。ジョブを再送信してください。キャッシュ済みの段階は再利用されます。 |
既知の制限事項
- 初回実行時には 2.75 GB のダウンロードが発生し、文字起こし中に約 4.3 GB の RAM が必要です。
model: "fast"は 280 MB のモデルを使用し、約 1.9 GB の RAM で動作しますが、技術用語を誤って読み取ります。メモリ上限はまだなく、アイドル時にモデルはアンロードされません。 - セグメントの
confidenceはヒューリスティック(音声のカバー率、話速、フィルター)であり、モデルが算出した確率ではありません。 - 元動画で約 8 px のテキストは、OCR が読み取れる限界付近です。これほど小さなシークレットを検出できるかは正確なフレームに左右されるため、ollos はハードカットの前後の複数フレームを読み取ります。それより小さい場合でも、UI コンテキストのシグナルが状況を検出します(「API Key Created」は安定して読み取れます)。
ollos_diarizeは実験段階です。背景音楽(オープニング、ジングル、エンディング)がある音声は、明瞭な音声での同じ話者の音声とは大きく離れて埋め込まれ、マージしきい値にかかわらず、別の話者として出力されます(eval/で測定)。激しいクロストークは未解決です。Zoom の参加者別トラックを使うと、結果は正確です。- サイトからのダウンロードには
yt-dlpのインストールが必要です。スタンドアロンバイナリはまだ同梱されていません。examples/url-sources.md を参照してください。 - 進捗通知と MCP Tasks 拡張機能はまだ使用されていません。現在、すべてのクライアントで
ollos_jobのポーリングが契約となっています。
ロードマップ
- メモリ:モデルのアイドル時アンロード(
OLLOS_MODEL_IDLE_MIN)とメモリガード(任意でmodel: "fast"にフォールバックするOLLOS_MAX_MEMORY_MB)。メモリ制限を参照してください。 - クライアントへの提供開始後に MCP Tasks 拡張モードを追加(ジョブエンジンはすでにプロトコルに依存しません)。さらに
notifications/progressを追加 ollos_diarize:音楽を考慮したターンフィルタリング(VAD が明瞭な音声と判定したターンだけを埋め込む、または先に音声/音楽分類器を実行する)、ターンレベルのアノテーションによる DER の公開、録音をまたいだ話者名の保持- サイトからのダウンロードに Python も不要となるよう、スタンドアロンの
yt-dlpを同梱 - 評価:ターンレベルのアノテーションによる DER、埋め込みフレームでのシークレットの適合率/再現率、
ollos_searchの検索指標(ヒット率、MRR、NDCG)
謝辞
transformers.js と onnx-community のモデル移植、tesseract.js、sharp、ffmpeg を基盤に構築されています。幻覚ブロックリストは Vexa(Apache-2.0)をもとに作成しました。エージェント向けのシーン認識型キーフレーム生成は claude-real-video が先駆けです。ollos は別の方向性(レビュー、話者、Node)を採用していますが、コンタクトシートのアイデアは同プロジェクトに負っています。
ライセンス
Apache-2.0 — © 2026 Kelvin Biffi
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。