Content について
Contentは、URL、ファイル、テキストを文字起こし、要約、翻訳、Markdown、PDFなどに変換するセルフホスト可能なエンジンです。MCP、CLI、SDK、Webアプリ、REST APIのクライアントが共通のバックエンドを利用します。
主な機能
- 01入力から多様なメディアや文書を生成
- 02入力を分析して処理ジョブを計画
- 03ジョブ履歴を記録してファイルを配信
- 04複数のクライアントから同じエンジンに接続
- 05解決された機能に基づくリクエスト作成
活用シーン
- 01動画から文字起こしや要約を生成
- 02コンテンツを翻訳してPDFに出力
- 03MCPエージェントから処理を依頼
- 04CLIやREST APIでファイル処理を自動化
MCP 対応
エージェントがエンジンに処理を依頼し、生成された成果物を受け取るためのMCPサーバーが含まれています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx content-mcpCONTENT_API_URLBase URL of your running Content engine (the REST API this server drives).CONTENT_MCP_DOWNLOAD_DIRThe only directory this server may write downloaded artifacts to.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Content
URL、ファイル、テキストをメディア、ナレッジ、ドキュメントに変換します。
セルフホスト可能な単一のエンジン。YouTube 用の HomeTube クライアント、その他すべてに対応する Content Studio、HomeTube ブラウザー拡張機能、MCP サーバー、CLI、型付き SDK、そしてそれらすべてを支える REST API
クイックスタート · HomeTube · HomeTube からの移行 · すべてのクライアント · エージェントを接続 · ドキュメントを読む
Content は、対応するソースをメディア、文字起こし、要約、翻訳、画像、メタデータ、Markdown、PDF などに変換する、セルフホスト可能なエンジンです。バックエンドは各ソースを分析し、実際に生成できるものを判断して、ジョブを計画・実行し、その履歴を記録して、結果を提供します。
それ以外はすべて、1つの公開契約のクライアントです。YouTube に特化した体験を提供する HomeTube、汎用的なワークフロー向けの Content Studio、現在開いているタブに対応する Chromium 拡張機能、エージェント向けの content-mcp サーバー、ターミナルや cron 向けの CLI、アプリケーション向けの 型付き Python SDK、その他のあらゆる言語から利用できる REST API、そしてエンジンの動作を確認する Content Console があります。1つでも複数でも選べます。どのクライアントも、他のクライアントが経由しなければならない層ではなく、独自のビジネスロジックも持ちません。
HomeTube を使えば、これがどういう意味かを最も手早く確認できます。YouTube の URL を貼り付け、必要な出力を選ぶだけで、ファイルがライブラリに届く様子を確認できます。
> [!NOTE] > **実績のあるワークフローが、いまプラットフォームへと成長しています。** スタンドアロンの > [HomeTube](https://github.com/EgalitarianMonkey/hometube) コンテナーは、GitHub Container Registry での**パッケージダウンロード数が 300,000 件を突破**しました。引き続き稼働し、保守も続けられます。何も壊れることはなく、期限もありません。その取り組みは Content へと引き継がれ、ユーザーは自分のペースで移行できます。 > > 2 つは別々のプロジェクトです。スタンドアロンの HomeTube は、Content 上で動作するように改修されていません。このリポジトリの **HomeTube アプリは、Content エンジン上に新たに構築された UI** であり、同じワークフローを引き継いでいます。 > [スタンドアロンの HomeTube から移行する場合はこちら ↓](#coming-from-standalone-hometube)クイックスタート
実行時に必要なのは Docker Compose だけです。公開済みのイメージからインストールできます。クローンやビルドは不要です。
mkdir content && cd content
curl -fsSLO https://raw.githubusercontent.com/LatentNoise/content/main/deploy/docker-compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/LatentNoise/content/main/.env.example
docker compose up -d
デフォルトの .env で、ローカルスタック全体が起動します。
| サービス | デフォルト URL | 用途 |
|---|---|---|
| Content Studio | http://localhost:8502 | URL、ファイル、アップロード、インラインテキストのソースを対象とする一般的なリクエスト |
| HomeTube | http://localhost:8501 | YouTube の動画やプレイリストに特化したワークフロー |
| Content Console | http://localhost:8503 | ヘルス、設定、ストレージ、ジョブ、イベント、ログ |
| Content API | http://localhost:8010/docs | REST API、OpenAPI、組み込みワーカー |
一般的なワークフローには Content Studio を、ソースが YouTube の場合は HomeTube を開いてください。両方の Web アプリを使わずに、MCP サーバー、CLI、SDK、拡張機能、REST API から同じエンジンを操作することもできます。
すべてのデータはインストールフォルダー内に保存されます。./data にはデータベース、ジョブ、成果物が保存され、処理済みのファイルは ./playground/output に出力されます。代わりに .env の CONTENT_DELIVERY_DIR_HOST を独自の NAS やメディアライブラリに設定すると、そのサブフォルダーがクライアントに表示される出力先の選択肢になります。
後から更新する場合は、次を実行します。
curl -fsSLO https://raw.githubusercontent.com/LatentNoise/content/main/deploy/docker-compose.yml
docker compose pull && docker compose up -d
最初の行は省略できません。また、うっかり飛ばしやすい行です。
docker compose pull で更新されるのはイメージです。スタック定義は、初日にダウンロードしたローカルコピーのままで、新しい設定はその定義に追加されます。コンテナーに渡されるのは、environment: ブロックに記載された設定だけです。そのため、Compose ファイルを元のバージョンのままにしておくと、.env に正しく記述していても、それ以降に追加された設定はすべて黙って反映されなくなります。.env が変更されることはありません。新しい設定項目を使う場合は、現在の .env.example と照らし合わせてください。
代わりにソースからビルドする — 開発用、またはオプションの音声文字起こしランナーを含める場合
git clone https://github.com/LatentNoise/content.git
cd content
cp .env.example .env
docker compose up -d --build
リポジトリの docker-compose.yml には、同じイメージに加えてローカルの build: 定義が含まれています。上記で使用した、ビルド不要のデプロイ用ファイルは deploy/docker-compose.yml です。テストによって両者の整合性が保たれています。
1 つのソースから多様な成果物へ
同じエンジンで、メディアとドキュメントのワークフローを実行できます。
┌─ My Conference.mp4
├─ My Conference - audio.opus
YouTube URL ──→ Content ─────┼─ My Conference - subtitles - en.srt
├─ My Conference - subtitles - fr.srt
├─ My Conference - transcript.txt
├─ My Conference - summary.md
└─ My Conference - summary.pdf
Web page / text / .md file ──→ Content ──┬─ Article.txt
├─ Article - summary.md
├─ Article - translation.md
└─ Article.pdf
どちらの分岐も、宣言的なリクエストから始まります。必要な成果物を記述すると、Content が実行可能な内容を判断し、作業を計画して、利用可能なツールを実行し、各成果物の生成元を記録します。クライアント側で yt-dlp のフラグを指定したり、ffmpeg のパイプラインや文字起こし処理を組み立てたり、LLM のオーケストレーションを行ったりする必要はありません。
クライアント
エンジンはひとつ、契約もひとつ、入口は複数です。以下の各クライアントは、
同じ GenerationRequest を使用し、同じ解決済み機能を参照して、
同じ成果物を生成します。異なるのは使い勝手であり、要求できる内容では
ありません。HomeTube は完全に任意で、ほかの各項目も同様です。
| クライアント | おすすめの用途 | まずはこちら |
|---|---|---|
| HomeTube | YouTube の動画やプレイリストをライブラリに取り込む、最も簡単な方法 | Docker Compose に同梱、:8501 |
| Content Studio | URL、アップロード、サーバー上のファイル、インラインテキストから、機能に基づく汎用的なリクエストを送信 | Docker Compose に同梱、:8502 |
| Chromium extension | 現在開いている Chrome、Brave、Edge、Vivaldi のタブを Content に送信 | リリースの zip をダウンロードして解凍し、Load unpacked を選択 |
| MCP server | Claude、IDE、その他の MCP エージェントに、会話だけでなく実際の成果物を提供 | uv tool install content-mcp |
| CLI | ターミナル、スクリプト、cron ジョブ、生のリクエストファイル | uv tool install content-cli |
| Python SDK | 型付きの同期・非同期アプリケーション連携 | pip install content-sdk |
| REST API | HTTP を使用するあらゆる言語や連携 | /api/v1、Swagger は :8010/docs |
| Content Console | エンジンの監視と操作 | Docker Compose に同梱、:8503 |
HomeTube — YouTube に特化
http://localhost:8501 · README
URL を貼り付け、メディアと関連する成果物を選択して、ジョブの進行を ライブラリで確認できます。このページの冒頭で紹介したワークフローです。
Content の HomeTube では、次のことができます。
- 品質、コーデック、コンテナ、音声言語、字幕を選んで、動画やプレイリストを 動画または音声としてダウンロードする。
- SponsorBlock でスポンサー区間を削除またはマークし、クリップを切り出し、 サーバー側の Cookie 認証情報を使用して、字幕、チャプター、サムネイル、 メタデータを埋め込む。
- すべての成果物にわかりやすい名前を付け、Plex、Jellyfin、Emby が監視する ファイルシステムライブラリに配信する。
- 必要なランナーが利用可能な場合、ダウンロードしたメディアだけでなく、 同じソースから文字起こし、要約、サムネイル、メタデータも取得する。
HomeTube は意図的に機能を絞っています。ファイル、アップロード、 インラインテキストをソースとして受け付けず、より幅広いドキュメント ワークフローや PDF 出力も提供しません。これらには Content Studio、API、 CLI、SDK を使用してください。HomeTube は Content のクライアントであり、 Content を使うすべてのユーザーが必ず通るレイヤーではありません。
**独自の設定はありません。**エンジンの設定を読み込むため、HomeTube に反映
される設定は、docker-compose.yml と同じ場所にある .env で変更します。
配信ライブラリのサブフォルダーは保存先の選択肢になります
(CONTENT_DELIVERY_DIR_HOST)。音声と字幕であらかじめ選択される言語は
次の変数で設定します(CONTENT_LANGUAGE_PRIMARY、
CONTENT_LANGUAGES_SECONDARIES、CONTENT_VO_FIRST、
CONTENT_LANGUAGE_PRIMARY_INCLUDED_IN_SUBTITLES)。また、年齢制限付きまたは
メンバー限定の動画を利用できるようにする、サーバー側の Cookie ファイルも
設定できます(CONTENT_CREDENTIALS — HomeTube に表示されるのは ID のみで、
ファイルがサーバーの外に出ることはありません)。ソースが提供していない項目が
あらかじめ選択されることはなく、デフォルト設定も変更できないものではありません。
HomeTube の README では各変数について 説明し、具体例を使って言語のルールを紹介しています。日本語の講演、フランス語 話者、そして実際に何が事前選択されるかを確認できます。 すべての変数の一覧 には、エンジンが受け付ける設定がすべて記載されています。
スタンドアロン版の HomeTube をお使いですか?
HomeTube — スタンドアロンの Streamlit アプリ — は、引き続き動作し、メンテナンスも継続されます。何も壊れることはなく、期限もありません。作業はコンテンツのほうで続いているため、これは準備ができたときに移行するものであり、強制されるものではありません。
引き継がれるもの。 使い慣れたワークフローです。URL を貼り付け、品質、コーデック、コンテナ、音声言語、字幕を選択し、SponsorBlock でスポンサーセグメントを削除またはマークし、クリップを切り出し、サーバー側の Cookie ファイルで制限付き動画のロックを解除し、字幕、チャプター、サムネイル、メタデータを埋め込み、Plex、Jellyfin、Emby が監視するライブラリに読みやすいファイル名で保存します。プレイリストも引き継がれます。各項目は個別に分析・計画され、項目ごとに名前が付けられ、それぞれ独立した成果物として保存されます。
新しく加わったもの。 同じソースから、文字起こし、要約、翻訳、生成されたサムネイル、メタデータ、Markdown、PDF も作成できます。また、エンジンにアクセスする方法もウェブフォームだけではなくなりました。Studio、Chromium 拡張機能、MCP エージェント、CLI、SDK、通常の HTTP のすべてから、同じリクエストを実行できます。
まだ引き継がれていないもの。 HomeTube のプレイリスト同期 — 時間の経過とともにローカルフォルダーをプレイリストと同期させる計画・適用差分(名前の変更の検出、削除された動画のアーカイブまたは削除、名前や場所の変更後の再配置) — は、こちらにはまだありません。Content ではプレイリストをダウンロードできますが、再同期にはまだ対応していません。これはM2 の一環としてロードマップに掲載されています。プレイリスト同期が主な用途であれば、その作業にはスタンドアロン版 HomeTube を引き続きお使いください。
実用上の注意点。 どちらの HomeTube アプリも、デフォルトではポート 8501 を使用します。2 つを同時に実行したい場合は、.env でどちらか一方のポートを変更してください。
Content Studio — すべての機能をフォームで利用
http://localhost:8502 · README
汎用ウェブアプリです。1 つのリクエストで複数のソースを扱い、エンジンが解決できるすべての出力タイプを、そのオプション、設定、制約とともに利用できます。フォームは機能に応じて動的に表示されます。ソースについて /capabilities が返す内容を表示するため、エンジンに機能が追加されれば UI のリリースなしで利用でき、作成できないものは表示されなくなるのではなく、その理由がサーバーから示されます。
Content Studio — URL、ファイル、アップロード、テキストの汎用リクエストを作成
Studio では、ファイルを 2 通りの方法で指定できます。エンジンが別のマシンで実行されている場合、この違いが重要になります。
- このデバイスから — バイト列がエンジンに送信され、
uploadソースになります(ADR 0020)。複数のファイルを一度に指定すると、複数のソースになります。Streamlit は UI コンテナ内でアップロードをバッファリングするため、ここでの上限は API の上限より意図的に低く設定されています(デフォルトで 200 MB。上限を超えて失敗するまで気づかないのではなく、ファイル選択画面に現在の上限が表示されます)。 - サーバー上 — エンジンがすでに読み取れる、設定済みの許可入力ルート内のパスです。この Compose 設定では、そのルートは
./playground/inputです。
非常に大きなファイルの場合は、ブラウザーを介さず、SDK から client.upload_file(path) を使ってディスク上のファイルをストリーミングしてください。
Chromium 拡張機能 — すでに開いているタブ
UI を開かずに、表示中のページをエンジンに送信します。Manifest V3、Chromium のみ(Chrome、Brave、Edge、Vivaldi、Opera、Arc など)、ビルド手順は不要です。ブラウザーが読み込むのは、zip 内のファイルそのものです。
- 最新リリースから
content-browser-extension-chromium-v<version>.zipをダウンロードし、解凍します(Chromium が読み込むのはフォルダーであり、zip ではありません)。 chrome://extensionsを開き、デベロッパーモードをオンにして、パッケージ化されていない拡張機能を読み込むをクリックし、フォルダーを選択します。- 動画を開き、拡張機能をクリックします。
タブの URL を正規化し(youtu.be、Shorts、埋め込み動画は正規の視聴 URL になり、視聴 URL の list= はプレイリストではなく その動画 を意味します)、ソースから生成できるものをエンジンに問い合わせて、その中から選択肢を提示します。名前には命名エンジンが独自に提案したものをあらかじめ入力し、ライブラリ内の既存フォルダーに加えて 新しいフォルダー… も提示します。その後、ジョブを追跡し、各ファイルの保存先を表示します。すべてのネットワーク呼び出しはサービスワーカー内で行われます。エンジンはデフォルトで CORS ヘッダーを送信しませんが、これにより、何も設定せずに標準のインスタンスでも拡張機能を利用できます
(ADR 0016)。
ブラウザー拡張機能 — タブから、現在のタブを Content に送信します
ポップアップのフッターには、通信しているエンジンの名前が常に表示されるため、「この動画はどこに送信されるのか?」を画面上で確認できます。README には、経路ごとの検証表も正直に記載されています。ブラウザーで実際に動作させて確認した内容と、まだ確認していない内容が分かります。
MCP サーバー — エージェントと IDE 向け
Content は、MCP 互換エージェントが URL を単に説明するのではなく、実際の成果物に変換するための、制御された方法を提供します。公式の content-mcp サーバーは、エンドポイントごとではなく意図のレベルで設計されたツールを公開し、次の操作を行えます。
- URL を分析し、生成可能なものを確認する;
- 1 つまたは複数の出力をリクエストし、ライブラリの保存先を選択する;
- ジョブを監視してキャンセルし、実行可能な対処方法を含むエラーを報告する;
- 成果物とその保存先パスを見つける;
- 小さなテキスト成果物はインラインで読み取り、大きなメディアはモデルのコンテキストに含めない。
エージェントがシェルアクセスや yt-dlp の構文、バックエンドの内部情報を必要とすることはありません。
インストールは不要です。 uvx は初回使用時にサーバーを取得してキャッシュするため、ライフサイクル全体をクライアントが管理します(更新は明示的に行います — uvx --refresh を実行するか、[email protected] を固定します)。
# Claude Code
claude mcp add content \
--env CONTENT_API_URL=http://localhost:8010 \
-- uvx content-mcp
Claude Desktop、Cursor、その他の標準 JSON 形式を使う MCP クライアントの場合:
{
"mcpServers": {
"content": {
"command": "uvx",
"args": ["content-mcp"],
"env": { "CONTENT_API_URL": "http://localhost:8010" }
}
}
}
オフラインのマシンで使う場合や、バージョン変更のタイミングを管理する場合は、PATH 上の実行ファイルを固定して使う方法がおすすめです。インストールして、直接指定します("command": "content-mcp"、または Claude Code では -- content-mcp)。
uv tool install content-mcp # or: pipx install content-mcp
あとは、自然な言葉で依頼できます。
この講義を分析して、音声を
Talksに保存し、利用可能なランナーで対応できる場合は、文字起こしと構造化された要約を作成して、すべての成果物の保存先を教えてください。
通常のツールの流れは
get_config → analyze_source → generate → get_job → get_artifact です。
エージェント自身のマシンへのダウンロードは、1 つの変数
(デフォルトは ~/Downloads/Content の CONTENT_MCP_DOWNLOAD_DIR)で制限されています。範囲外を指す保存先は、範囲内に切り詰められるのではなく拒否されます。この範囲を広げるかどうかは運用者が決めることであり、プロンプトでサーバーにそうさせることはできません。
できること、できないことの概要 — 詳細は MCP ガイドの 3 つの表をご覧ください。そこに記載された各項目は、推測ではなく、稼働中のエンジンに対して stdio 経由で実際に動作を確認したものです。
| 対応 | URL とプレイリスト · ローカルファイル(エンジンにアップロードするため、ノート PC から NAS を操作できます) · テキストレイヤーを読み取る PDF · 動画、音声、字幕、文字起こし、要約、翻訳、チャプター、サムネイル、メタデータ、Markdown、PDF · ライブラリへの保存 · Cookie 認証が必要なソース |
| 非対応 | リアルタイムの進捗表示なし(get_job はポーリングです) · .docx/.epub/.odt/.rtf は非対応、スキャン文書の OCR なし · トランスコードなし · プレイリストの同期なし · 何も削除しません · API に認証機能はありません |
| ランナーが必要 | 要約、翻訳、派生チャプターには、ローカルの Ollama またはクラウドキーが必要です。文字起こしには字幕またはオプションの Whisper ランナーが必要です。エンジンは途中で失敗させるのではなく、事前にこれらを unavailable として報告します |
| 設計上の仕様 | HTTP エンドポイントではなく stdio — サーバーはあなたのマシン上で動作します。そのため、エージェントが ~/Documents/report.pdf を渡し、そのバイト列を NAS 上のエンジンにアップロードできます。また、認証機能のないシステムでポートを開放せずに済みます。プロセスを起動できないクライアント(Open WebUI、ホスト型 UI など)には、現在 mcpo がブリッジとして機能します |
| 今後の予定 | 失敗した項目だけを再試行 · プレイリストの同期 · 保持ポリシー · その他のドキュメントリーダー |
CLI — ターミナル、スクリプト、cron
uv tool install content-cli
export CONTENT_API_URL=http://nas.local:8010
content analyze "https://www.youtube.com/watch?v=…"
content video "https://…" --height 1080 --subs en,fr --watch
content audio "https://…" --format opus --playlist --watch
content submit request.json --watch # a raw GenerationRequest, or -
content jobs ; content job <id> ; content artifacts <id>
content download <artifact_id> -o out.mkv
--watch はステータスを再確認するのではなく、ジョブのイベントストリームを追跡します。また、終了コードで結果を示すため、スクリプトでその結果に応じた処理を連鎖させられます
(ADR 0021)。
0 は成功、2 は部分的な成功、1 は失敗またはキャンセルを表します。2 は意図的に区別されています。6 本中 5 本の動画を取得できたプレイリストは失敗ではありませんが、これを成功として扱うスクリプトは、ファイルが欠けたまま気づかずに先へ進んでしまいます。
Python SDK — 型付き、同期・非同期対応
公式 API クライアントはこれ1 つです。CLI、MCP サーバー、ウェブアプリはすべてこれを通じてやり取りするため、エンジンのルールが重複することはありません。Python 3.11 以降が必要で、依存関係は httpx と pydantic のみです。
from content_sdk import ContentClient, outputs
with ContentClient("http://localhost:8010") as client:
analysis = client.analyze(outputs.url_source("https://www.youtube.com/watch?v=…"))
job = client.generate(analysis.id, [outputs.audio_output()])
job.wait()
for artifact in job.artifacts:
print(artifact.display_filename, artifact.delivered_path)
AsyncContentClient は全機能に対応しています。分析にはアドレスを指定できるため、すべての呼び出しで analysis_id とインラインソースのどちらも使用できます
(ADR 0014)。
client.upload_file(path) はローカルファイルをエンジンにストリーミングし、すぐに使えるソースを返します。また、2xx 以外の応答はすべて、安定したエラーコード(NotFound、Gone、ValidationError)を持つ型付き例外になります。
REST API — それ以外のすべての言語向け
公開仕様 · Swagger(http://localhost:8010/docs)
/api/v1 は、上記のすべてのクライアントが基盤とする仕様であり、新たに 9 つ目のクライアントを構築するのにも十分安定しています。リクエストでは技術的な操作ではなく、希望する出力を指定します。エラーコードは変更されない機械向けの識別子であり、変わるのは人間向けのメッセージのみです。また、「有効だが未実装」 は 「無効」 とは異なる、明示的な応答です。予約済みのフィールドは、黙って無視するのではなく拒否されます。V1 API には組み込みの認証機能がありません。詳しくはデプロイとセキュリティをご覧ください。
Content Console — エンジンの監視と操作
http://localhost:8503 · README
運用コンソールです。役割は監視と制御に限定されており、ダウンロードの作成には使用しません(その用途には Studio と HomeTube を使います)。
Content Console — エンジンを監視・操作
- 概要 — バージョン、キャッシュ、同時実行数、分析の TTL、ジョブのリアルタイムな動作状況、インストール済みランナーとその利用可否、ストレージのパスを表示します。
- 環境 — すべての
CONTENT_*変数について、実効値、設定されているかデフォルト値にフォールバックしているか、および 1 行の説明を表示します。シークレットそのものは表示せず、設定の有無と長さのみを表示します。 - ジョブ — フィルター可能な一覧と詳細情報を表示します。詳細には、ステップ、送信された
GenerationRequest、生成元情報付きの成果物、順序付きイベント、ステップごとのログ、キャンセルと再試行が含まれます。また、実行中のジョブがある間のみポーリングする、任意で有効にできる 5 秒間隔の自動更新機能もあります。 - ストレージとキャッシュ、およびスキーマ、Swagger、ReDoc、未加工の API テスターを備えた仕様と APIタブ。
Contentで生成できるもの
Contentは、分析対象の各リソースとインストール済みのランナーについて、利用可能性を判定します。 クライアントには実際に生成できるものが表示されるため、静的な一覧を提示してジョブの途中で失敗することはありません。
| 出力 | 一般的な入力と動作 |
|---|---|
| 動画 | メディアのURLとローカルメディアファイル。ストリームの選択、リマックス、高速またはフレーム精度でのカット、SponsorBlock の処理 |
| 音声 | ソース音声としてのメディアURL、Opus、MP3、M4A。ローカルファイルではネイティブの音声ストリームを維持 |
| 字幕 | 言語を指定して選択する手動または自動のトラック |
| 文字起こし | 既存の字幕、またはオプションの Whisper ランナーを使った音声 |
| 要約 | ローカルまたはオプトインのクラウド LLM を使った文字起こしまたは読み取り可能なテキスト |
| 翻訳 | LLM を使った字幕または文字起こし。字幕のタイミングは維持 |
| チャプター | ソースで指定されたチャプター、または LLM を使って文字起こしから生成したチャプター |
| サムネイルとキーフレーム | 公開されているアートワーク、または動画から抽出したフレーム |
| メタデータ | 正規化された、プロバイダーに依存しないリソース情報 |
| Markdown とプレーンテキスト | 読み取り可能なウェブページ、テキストファイルと Markdown ファイル、PDF(テキストレイヤー)、インラインテキスト |
| 読み取り可能なソース、または要約、文字起こし、翻訳などの出力 |
メディアの取得は、YouTube と yt-dlp がサポートするサイトに対応しています。 プレイリストでは、追跡可能な単一のジョブで、各項目のアーティファクトを生成できます。 生成したファイルは、Plex、Jellyfin、Emby が監視するフォルダーを含め、マウントされたあらゆるファイルシステムライブラリに直接保存できます。
ローカルおよびオプションの AI ランナー
Content に必須のクラウド依存関係はありません。互換性のあるランナーが利用可能になると、AI を利用した出力が有効になります。
- 要約、翻訳、派生チャプター: ローカルの Ollama インスタンスに接続するか、Anthropic または OpenAI の API キーを明示的に設定します。クラウドランナーはリクエストごとに除外できます。
- 音声からの文字起こし: エンジンの隣で音声サービスを実行します —
docker compose --profile speech up -dとCONTENT_SPEECH_URL=http://speech:8000を設定するか、 Helm チャートでspeech.enabled: trueを設定します。これは OpenAI の音声 API の背後で動作する speaches で、同じコンテナでテキスト読み上げも行います。音声が送信されるのはプライベートネットワーク上のサービスだけです。既存の字幕から文字起こしを作成する場合は必要ありません。
利用できないオプションのランナーがあっても、Content の健全性には影響しません。影響を受ける機能は利用不可として報告され、実行不可能なリクエストはジョブ開始前に拒否されます。すべての項目については デプロイと設定をご覧ください。
Content を基盤にする理由
- ツールではなく、意図を宣言。 リクエストでは出力を指定し、yt-dlp、ffmpeg、 Whisper、LLM、PDF レンダラーは交換可能な実装の詳細として扱います。
- セルフホスト可能でローカルファースト。 ワークステーション、NAS、ホームラボで実行できます。 アカウント、テレメトリー、必須のクラウドサービスはありません。
- 単一の公開コントラクト。 Studio、HomeTube、MCP、CLI、SDK、拡張機能、REST API は、 並行する機能セットへ分岐せず、同じドメインに統一されます。
- パイプラインの残骸ではなく、人が使えるファイル。 エンジンはすべてのアーティファクトに名前を付け、すでに使っているライブラリに直接配置できます。
- 作業の可観測性。 ジョブでは、状態、順序付けされたイベント、進捗、ログ、 アーティファクト、来歴、キャンセル、再試行を確認できます。
- 機能を正直に報告。 「有効だが未対応」、「このソースでは利用不可」、「故障」はそれぞれ異なる状態として、適切な段階の前または最中に報告されます。
仕組み
公開リクエストでは、望む出力を指定します。技術的な処理方法は指定しません。
Sources → Analysis → Capabilities → Execution plan → Job → Artifacts
Content Backend (REST /api/v1) ← domain, planning, execution, persistence
│
Content Python SDK ← official Python API client
│ │ │
CLI MCP Web apps ← thin clients of the public contract
Browser extension ← JavaScript client of /api/v1
エンジンはソースの事実を分析し、インストール済みの実装に照らして実現可能な機能を特定し、決定論的な実行計画を作成して、状況を確認できるジョブとして実行します。データベースを信頼できる唯一の情報源とし、yt-dlp、ffmpeg、文字起こし、LLM、PDF の実装は専用の境界の内側にとどめます。
ドメインでは、ユーザーの意図(GenerationRequest)、解決済みの戦略(ExecutionPlan)、実行(Job)、具体的な結果(Artifact)を分離しています。設計の全容については、
アーキテクチャ概要、
公開コントラクト、ドメインモデル、および
アーキテクチャ上の決定を参照してください。
デプロイとセキュリティ
Content は、amd64 または arm64 の Linux/macOS 上の単一ホストへのデプロイを想定しています。Docker Compose では API と組み込みワーカーをまとめて実行し、Web アプリは別個の API クライアントとして動作します。SQLite とアーティファクトストレージはローカルに保持されます。Redis、 Celery、Kubernetes、クラウドインフラストラクチャは不要です。
コメント付きの .env.example には、UI の選択、イメージのバージョン、ポート、ストレージと配信、言語設定、サーバー側の Cookie 認証情報、オプションの LLM/STT ランナー、CORS、通知に関する設定が記載されています。リリース時のチェックで外部リクエストを行うことはありません。設定した場合を除きます。
V1 API には組み込みの認証機能がありません。API にアクセスできる人は誰でもジョブの送信、ファイルのアップロード、すべてのアーティファクトの読み取りができます。信頼できるネットワーク内で使用するか、外部からアクセス可能なインスタンスの前に認証を行うリバースプロキシを配置してください。また、ポートを公開しないでください。API にアクセスした攻撃者ができること、できないことについては、docs/operations/threat-model.mdに記載しています。設定、ヘルスチェック、データの配置、認証が必要なソース、本番環境でのガイダンスについてはデプロイを参照してください。また、これが V1 における回答である理由については ADR 0024を参照してください。
開発
このリポジトリは、バックエンド、Web アプリ、CLI、
MCP サーバー、Chromium 拡張機能、Python SDK を含むモノレポです。ルートの Makefile が主なエントリーポイントです。
make install # create the development environment and install packages
make validate # formatting, linting, and hermetic tests: the official gate
make test-ui # hermetic Streamlit application tests
make validate-all # official gate plus UI and opt-in external-tool tests
メインのテストスイートはインターネット接続を必要としません。コードを変更する前に、 リポジトリアーキテクチャと 検証ガイドをお読みください。 リリースはリリース手順書に従って行います。
ドキュメント
docs/README.mdにドキュメントの全体像が記載されています。まずはこちらをご覧ください。
ライセンス
Content は、Functional Source License, Version
1.1, ALv2 Future License(FSL-1.1-ALv2)に基づくソース公開型です。
簡単に言えば、Content を読んだり、監査したり、変更したり、実行したりできます。自宅で個人利用する場合も、組織内で利用する場合も同様です。ただし、Content 自体、または Content を基に構築した実質的に類似するものを、競合する商用製品またはサービスとして提供することはできません。
**公開から 2 年後に、各バージョンは Apache 2.0 に移行します。**この約束はライセンス自体に定められており、撤回できません。
Copyright 2026 Yann Orieult. 「Content」と「Latent」はプロジェクトおよび作者の作品の名称です。フォークでこれらの名称を独自の製品に使用してはなりません。
**0.8.4 までのバージョンは AGPL-3.0-or-later の下で公開されており、今後も永久に同ライセンスで利用できます。**詳細についてはCOMMERCIAL.mdの概要全文を参照してください。現在、別途提供されている商用版はありません。
ガバナンス
コンテンツは、単独のメンテナーモデルのもと、Yann Orieult が開発・保守しています。バグ報告、アイデア、設計に関するフィードバックは、issue を通じて歓迎します。コードのコントリビューションは受け付けていません。事前の連絡がないプルリクエストは、レビューせずにクローズします。独自の変更を加える場合は、フォークすることを想定しています。CONTRIBUTING.md と GOVERNANCE.md をご覧ください。
セキュリティ上の問題は、SECURITY.md の説明に従って、非公開で報告してください。
© 2026 Yann Orieult。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。