mcpField
F
Flickies

Flickies

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

Flickies について

Flickies は、スクリプト、関数呼び出し対応 LLM、エージェントのワークフロー向けのセルフホスト型動画ツールキットです。リップシンク、顔の補正、ffmpeg 処理を非同期ジョブと MCP ツールで提供し、Go と Python のクライアントも備えています。

主な機能

  1. 01動画のリップシンク
  2. 02顔の補正
  3. 03ffmpeg による動画処理
  4. 04非同期ジョブと Webhook
  5. 05生成された Go・Python クライアント

活用シーン

  1. 01動画にリップシンクを追加
  2. 02顔の画質を補正
  3. 03動画のトリミング、結合、変換
  4. 04エージェントから動画処理を実行

MCP 対応

`/v1/mcp` で streamable-HTTP JSON-RPC 経由の 11 個の MCP ツールを公開し、MCP クライアントから動画処理を実行できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"psyb0t-flickies": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/flickies:v0.3.17"
]
}
}
}
起動コマンドdocker run -i --rm docker.io/psyb0t/flickies:v0.3.17

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocidocker.io/psyb0t/flickies:v0.3.17

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

flickies

CI version license Docker Pulls

動画ツールキット。ポートは1つ。クラウド不要。リップシンク、顔の復元、ffmpeg。実行したらあとは任せられる非同期ジョブ。Webhook。仕様ファーストの OpenAPI。同じ仕様から生成された、型付きの Go クライアントと Python クライアント。

audiolla(音声)と talkies(音声合成)の動画版です。同じワイヤ形式、同じ非同期ジョブモデル、同じ /data のバインドマウント方式、同じ Makefile の構成、同じ :latest と :latest-cuda の分割、同じオプトイン方式の非商用利用制限です。

JSON 本文を POST すると、動画が返ってきます。curl、シェルスクリプト、生成済みの Go/Python クライアントから実行するか、LLM エージェントに MCP エンドポイントを指定してください。

アカウント不要。サブスクリプション不要。docker run すれば完了です。


同梱されているもの

👄 リップシンクLatentSync 1.5(ByteDance、Apache-2.0、CUDA でデフォルト有効)+ Wav2Lip / Wav2Lip-GAN(Rudrabha、高速/低 VRAM、FLICKIES_ENABLE_NONCOMMERCIAL=1 で有効化)
🧹 顔の復元GFPGAN v1.4(TencentARC、Apache-2.0)。Wav2Lip の後に連結して、ぼやけた 96×96 の口元の切り抜きを修正するか、単独で使用できます
⚙️ ffmpeg 操作トリミング · 結合 · トランスコード(gif + fps +コーデック変更を含む) · 拡大縮小 · 音声の多重化 · 音声の抽出 · サムネイルグリッド。ffmpeg のみ、CPU で動作
📋 情報/v1/video/info の ffprobe メタデータ。再生時間、コーデック、fps、解像度、ビットレート
🔗 MCP サーバーすべてのエンドポイントを MCP ツールとして公開し、関数呼び出しに対応した LLM からパイプラインを操作できます
📜 仕様ファーストopenapi.yaml を唯一の信頼できる情報源とし、サーバー側の Pydantic、Go クライアント、Python クライアントをすべて1つのファイルから再生成します
🐳 ホットスワップによる追い出し+アイドル時のアンロードGPU プールは1つです。異なるモデルが要求されると、現在のモデルは追い出されます。FLICKIES_IDLE_UNLOAD_SECS(デフォルトは600秒)を超えてアイドル状態になると、スイーパーによってアンロードされます。

クイックスタート

docker run -d --name flickies \
  -v $HOME/flickies-data:/data \
  -p 8000:8000 \
  psyb0t/flickies:latest

curl -s -X POST http://localhost:8000/v1/video/info \
  -H "Content-Type: application/json" \
  -d '{"file_path": "uploads/clip.mp4"}' | jq

psyb0t/flickies:latest-cuda の CUDA イメージでは、すべてのエンジンを実用的な速度で実行できます。CPU イメージでは、すべての ffmpeg 操作(トリミング/結合/トランスコード。gif/拡大縮小/多重化/抽出/サムネイルグリッド/情報を含む)と Wav2Lip-CPU(3秒のクリップに約44秒。短いクリップなら問題ありません)を実行できます。GFPGAN と LatentSync 1.5 は CUDA 専用のため、CPU イメージではロードできません。

重みは、/data/hf/hub/models--<org>--<name>/{blobs,snapshots,refs}/… の HuggingFace 標準キャッシュ構成に保存されます。コンテンツアドレス方式の blob とスナップショット名のシンボリックリンクを使うため、バインドマウントを共有する他の HF 対応ツールでも再利用できます(flickies に限りません)。ソース:

エンジンHF リポジトリ
wav2lip / wav2lip-ganNekochu/Wav2Lip
S3FD detectorByteDance/LatentSync-1.5(auxiliary/ に同梱)
gfpganleonelhs/gfpgan
latentsync-1.5ByteDance/LatentSync-1.5

デフォルトでは遅延読み込みです。各エンジンは初回リクエスト時にリポジトリを取得します。uvicorn の起動前にブート時点で取得するには、FLICKIES_ENABLED_ENGINES=wav2lip,gfpgan(または FLICKIES_PREFETCH_ALL=1)を設定してください。FLICKIES_OFFLINE=1 を設定すると自動ダウンロードが無効になり、オペレーターがスナップショットディレクトリを手動で配置します。

認証

環境変数でベアラートークンを設定します。どのような文字列でも使用できます。

docker run -e FLICKIES_AUTH_TOKEN=testme ...
# clients then send: curl -H "Authorization: Bearer testme" ...

未設定の場合、認証は無効になります。/healthz は常にプローブの対象外です。

ロギング

構造化 JSON を stderr と FLICKIES_LOG_FILE のローテーションファイル(デフォルトは /data/logs/flickies.log、50 MB × 5 バックアップ)の両方に出力します。各行には time(サブミリ秒精度の ISO 8601 UTC)、level、logger、file、line、func、msg、trace_id、request_id と、型付きの追加情報が含まれます。

受信した X-Request-Id(UUID v4 または ULID。無効な値の場合はサーバーが新規に生成)は、ContextVar を介してロギングスコープに引き継がれ、レスポンスでも返されます。送信する httpx のフェッチでは X-Request-Id と X-Trace-Id を転送するため、次のホップのログと関連付けられます。機密性の高いキー(authorization、cookie、*token*、*secret*、hf_*、sk-ant-*)は、フォーマット時に自動的に [REDACTED] に置き換えられます。

デフォルトのレベルは INFO です。再現性を重視したトレースを行うには、FLICKIES_LOG_LEVEL=DEBUG を設定します。すべての ffmpeg/ffprobe コマンドと結果、各変換の判断(例:trim の stream_copy と precise_reencode の使い分け)と出力サイズ、エンジン推論の所要時間(wall_secs)、URL のフェッチ/アップロードのバイト数、ジョブのライフサイクルが記録されます。ログに記録される URL からはクエリ文字列が削除されるため、署名付き URL の認証情報がログに残ることはありません。

MCP

/v1/mcp でストリーミング可能な HTTP JSON-RPC を介して、11 個のツールを提供します:list_engines、info、lipsync、restore、transcode、trim、concat、scale、mux_audio、extract_audio、thumbnail_grid。関数呼び出しに対応した LLM(LibreChat、Cursor、MCP コネクターを使用する Claude デスクトップなど)を接続すれば、パイプラインを操作できます。

ハードウェア上限

テスト済みの対象はRTX 3060 12 GBです。余裕を残して LatentSync 1.5(約 8 GB)を実行できます。Wav2Lip と GFPGAN の組み合わせでは、使用量は最大約 5 GB です。一度にメモリに常駐するエンジンは 1 つのみです。異なるモデルのリクエストがあると、ホットスワップで既存のエンジンを退避させます。

ライセンスに関する方針

Wav2Lip の各バリアントは LRS2(非商用)で学習されています。サーバー環境で FLICKIES_ENABLE_NONCOMMERCIAL=1 が設定されていない限り、サーバーは読み込みを拒否します。LatentSync 1.5(Apache-2.0)は商用利用に安全なデフォルトであり、制限はありません。

エンジンライセンス制限
LatentSync 1.5Apache-2.0なし
Wav2Lip / Wav2Lip-GANLRS2 非商用FLICKIES_ENABLE_NONCOMMERCIAL=1
GFPGANApache-2.0なし
ffmpeg / ffprobe(エンジンではなく、標準的な CPU ヘルパー)LGPL(ffmpeg)なし

audiolla の MusicGen / matchering の制限と同じ方式です。

仕様ファースト

すべてのリクエスト/レスポンスの形式は openapi.yaml に定義されています。src/flickies/schema/_generated.py の Pydantic モデル、pkg/clients/go/client.gen.go の Go クライアント、pkg/clients/python/flickies-client/ の Python クライアントは、すべてこの単一ファイルから生成されます。

make generate              # regenerate all three (server models + Go client + Python client)
make generate-models       # just server-side Pydantic
make generate-client-go    # just the Go client
make generate-client-python # just the Python client
make generate-check        # CI gate — fail if generated files drift from openapi.yaml

生成ファイルを手動で編集しないでください。openapi.yaml を編集し、make generate を実行して、すべてをまとめてコミットしてください。

生成されたクライアント

Go
go get github.com/psyb0t/docker-flickies/pkg/clients/go@latest
import flickies "github.com/psyb0t/docker-flickies/pkg/clients/go"

c, _ := flickies.NewClient("http://localhost:8000")
resp, err := c.PostVideoLipsync(ctx, flickies.VideoLipsyncRequest{...})
Python
pip install "git+https://github.com/psyb0t/docker-flickies.git#subdirectory=pkg/clients/python/flickies-client"
from flickies_client import Client
from flickies_client.api.lipsync import post_video_lipsync
from flickies_client.models import VideoLipsyncRequest

client = Client(base_url="http://localhost:8000")
result = post_video_lipsync.sync(client=client, body=VideoLipsyncRequest(...))

エージェント連携

スキルは、.agents/skills/ を読み込むあらゆるエージェント(peen など)で動作し、以下のクライアントにはネイティブにインストールできます。

Claude Code
claude plugin marketplace add psyb0t/agents
claude plugin install flickies@psyb0t

Claude Code では flickies の URL と、認証が有効な場合はトークンの入力を求められます。トークンは OS のキーチェーンに保存されます。

Codex
codex plugin marketplace add psyb0t/agents
codex plugin add flickies@psyb0t

マーケットプレイスからインストールすると、このスキルは $flickies:flickies として呼び出されます。また、.agents/skills/ を含むリポジトリでは、Codex がインストールなしでスキルを自動的に認識し、$flickies として呼び出せます。

OpenClaw

このスキルはリリースごとに ClawHub に公開されます。

openclaw skills install @psyb0t/flickies

ローカル stdio を使用する MCP クライアント向けに、@psyb0t/flickies プラグインが flickies の /v1/mcp エンドポイントとのブリッジとして機能します。

openclaw plugins install clawhub:@psyb0t/flickies

次に FLICKIES_URL を設定します(サーバーが必要とする場合は FLICKIES_AUTH_TOKEN も設定してください)。

aigate 連携

aigate に /flickies/ と /flickies-cuda/ をマウントし、同じ nginx の背後で make run-bg を実行します。FLICKIES=1 と FLICKIES_CUDA=1 で各バリアントを切り替えます。

ライセンス

flickies 自体は WTFPL です。同梱モデルにはそれぞれ上流のライセンスが適用されるため、商用目的で再配布する前に確認してください。

コメント

MCP は初めてですか?

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

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