mcpField
O
ollos-mcp

ollos-mcp

ローカル
github.comメディア・デザイン05 週間前に更新

ollos-mcp について

ollos-mcp は、AI エージェント向けのローカルメディア処理ツールで、MCP サーバー、CLI、Node ライブラリとして利用できます。クラウドサービスや API キーを使わず、音声の文字起こし、キーフレームと画面テキストの抽出、公開前チェックを行います。

主な機能

  1. 01ローカルでタイムスタンプ付き文字起こし
  2. 02キーフレームを抽出してコンタクトシート化
  3. 03画面テキストの読み取りとシークレット検出
  4. 04公開前の音量、画角、シークレット確認
  5. 05非同期ジョブの状態確認とキャンセル

活用シーン

  1. 01公開前に画面録画のキー露出を確認する
  2. 02会議音声からタイムスタンプ付き文字起こしを作る
  3. 03講義動画からキーフレームとテキストを抽出する
  4. 04文字起こしと画面認識内容を検索する

MCP 対応

MCP サーバーはメディア解析、文字起こし、キーフレーム、OCR、レビュー、検索、ジョブ管理のツールを提供します。長時間の処理はジョブ ID を返し、結果は MCP リソースからも取得できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"kelvinbiffi-ollos": {
"command": "npx",
"args": [
"-y",
"ollos-mcp"
],
"env": {
"OLLOS_HOME": "<OLLOS_HOME>",
"OLLOS_OFFLINE": "<OLLOS_OFFLINE>",
"OLLOS_YTDLP": "<OLLOS_YTDLP>",
"OLLOS_YTDLP_ARGS": "<OLLOS_YTDLP_ARGS>"
}
}
}
}
起動コマンドnpx -y ollos-mcp
設定が必要な環境変数
OLLOS_HOMEWhere jobs, cache and models live. Default ~/.ollos
OLLOS_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmollos-mcp0.1.0

ツール

10

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
toanyいいえウィンドウの終了位置。形式は from と同じです。デフォルト:メディアの末尾。
fromanyいいえ分析するウィンドウの開始位置:秒数を数値(90)または文字列 "90"、"1:30"、"0:01:30.5" で指定します。デフォルト:先頭。
formatenumいいえconcise(デフォルト)は応答を小さくしてリソースを示します。detailed はトークン予算内ですべてを返します。concise | detailed
sourcestringはいローカルパス、Zoom のローカル録画フォルダー、http(s) URL、動画サイトの URL(yt-dlp)、または data: URI。
maxSpeakersintegerいいえ話者数の上限。デフォルトは 8 です。
minSpeakersintegerいいえ話者数の下限。デフォルトは 1 です。
transcriptJobIdstringいいえ同じメディアで完了した ollos_transcribe の jobId。各セグメントに話者ラベルが付きます。
similarityThresholdnumberいいえ2 つのターンを同じ話者と判定するコサイン類似度のしきい値。デフォルトは 0.35 です。

詳細

ollos-mcp

CI npm license node Install in Cursor Install in VS Code

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 つの音声認識器の一致率を示します。

テスト動画種類参照WERCER話者(予想 → 検出)
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 GBCPU に応じて、ネイティブ解像度でフレームあたり約 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 のネイティブメモリに保存されます。

優先度順の計画(ロードマップを参照):

  1. アイドル時のアンロード — ジョブがない状態が N 分続いた後にモデルを解放します(OLLOS_MODEL_IDLE_MIN)。次回の呼び出しでは 50~60 秒の再読み込みが発生します。実装コストは低く、パイプラインはすでに遅延読み込みに対応しています。
  2. メモリガード — 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_OFFLINE01 にするとネットワークを禁止します。モデルは事前にウォームアップしておく必要があります
OLLOS_ALLOW_PRIVATE0プライベートネットワークからの取得を許可します
OLLOS_MAX_DOWNLOAD_MB2048ダウンロード上限
OLLOS_MAX_DURATION_SEC14400これを超える長さのメディアは拒否されます(from/to を使用してください)
OLLOS_CONCURRENCY_VISION / _OCR / _DOWNLOAD2クラスごとの並列ジョブ数(ASR は 1 に固定)
OLLOS_MAX_FRAMES500キーフレームジョブあたりのフレーム数の絶対上限。また、固定間隔で実行される ollos_review のシークレットチェックで、非常に長い録画のどこまでをカバーできるかの上限にもなります(上記の「シークレット」を参照)
OLLOS_RESPONSE_TOKENS20000リソースへの参照を付けて切り詰めるまでの応答トークン数
OLLOS_INLINE_THRESHOLD_SEC8推定作業時間がこれ未満の場合はインラインで実行します。0 の場合はインライン実行しません
OLLOS_FFMPEG / OLLOS_FFPROBE / OLLOS_YTDLP自動バイナリのパスを明示的に指定します
OLLOS_YTDLP_ARGS—すべてのサイトからのダウンロードに使う追加の yt-dlp フラグ。許可リストに登録されたものに限ります(例:--no-check-certificates --js-runtimes node)
OLLOS_DEBUG_MEM01 にすると、すべてのジョブイベントにプロセスメモリ(rss、heap、arrayBuffers。単位は MB)を記録します

サイトからのダウンロード(YouTube、Instagram、TikTok など)には、PATH 上(または OLLOS_YTDLP で指定した場所)に yt-dlp が必要です。ベストエフォートでの対応となります。プラットフォームは頻繁に変更されます。TLS 証明書を再署名する企業プロキシ経由の場合は、OLLOS_YTDLP_ARGS="--no-check-certificates" を設定してください。ローカルファイルは常に使用できます。

トラブルシューティング

症状原因と対処法
FFMPEG_MISSINGffmpeg が見つからず、お使いのプラットフォーム向けの 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_OFFLINEOLLOS_OFFLINE=1 ですが、モデルが一度もダウンロードされていません。オンライン時に一度 ollos warmup --all を実行してください。
PRIVATE_ADDRESS_BLOCKEDURL(またはその 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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。