Flickies

io.github.psyb0t由 GitHub 帳號 psyb0t 發布v0.3.17更新於 Oct 31, 2026

Self-hosted MCP server: video lipsync, face restore, and ffmpeg ops (trim, concat, transcode).

已驗證STDIO僅桌面媒體與設計AI 與機器學習

概覽

AI 產生的概覽

自架式的影片工具 MCP 伺服器,提供嘴型同步、人臉修復,以及裁剪、拼接、轉檔等 ffmpeg 操作。

可以做什麼
  • 用指定音軌對影片做嘴型同步,並以 GFPGAN 修復或銳化人臉。
  • 裁剪、拼接、轉檔、縮放,以及調整影格率與編碼,包含輸出 GIF。
  • 混流或擷取音軌,並產生縮圖網格。
  • 讀取 ffprobe 中繼資料,例如長度、編碼、影格率、解析度與位元率。
  • 在執行工作前列出可用引擎與其狀態。
適用情境
適合希望助理在本機完成影片製作或編輯、不依賴雲端服務的情境,例如替片段換上新音軌、修復人臉,或進行例行的 ffmpeg 轉檔與剪輯。適用於能自行執行容器、並透過掛載資料目錄共用檔案的自架環境。
執行需求
以 Docker 容器執行,提供含 MCP 路徑的 HTTP 端點,助理連線該端點,也可透過本機 stdio 橋接外掛接入。需要掛載資料目錄以存放檔案、模型權重與日誌;首次使用需連網從 Hugging Face 下載模型權重,除非已離線預先放置。LatentSync 與 GFPGAN 需要 CUDA GPU,CPU 映像僅支援 ffmpeg 操作與 Wav2Lip。可選擇以 FLICKIES_AUTH_TOKEN 設定 Bearer 權杖。
安裝前請注意
未設定 FLICKIES_AUTH_TOKEN 時驗證功能關閉,任何能連上該端點的人都能使用。工作會寫入掛載的資料目錄,並可能從 Hugging Face 下載大型模型權重。啟用 Wav2Lip 需接受非商業授權限制。日誌會寫入資料目錄下的輪替檔案,敏感欄位會被遮蔽,但請求細節仍會被記錄。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Flickies,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

flickies

[CI] [version] [license] [Docker Pulls]

Video toolkit. One port. Zero cloud. Lipsync, face restore, ffmpeg. Fire-and-forget async jobs. Webhooks. Spec-first OpenAPI; typed Go + Python clients generated from the same spec.

The video sibling of audiolla (audio) and talkies (speech). Same wire format, same async-job model, same bind-mount-/data story, same Makefile shape, same :latest + :latest-cuda split, same opt-in non-commercial gate.

POST a JSON body. Get a video back. Drive it from curl, shell scripts, the generated Go/Python clients, or point an LLM agent at the MCP endpoint.

No account. No subscription. docker run and you're done.


What's in the box

👄 LipsyncLatentSync 1.5 (ByteDance, Apache-2.0, default on CUDA) + Wav2Lip / Wav2Lip-GAN (Rudrabha, fast/low-VRAM, behind FLICKIES_ENABLE_NONCOMMERCIAL=1)
🧹 Face restoreGFPGAN v1.4 (TencentARC, Apache-2.0) — chains after Wav2Lip to fix the soft 96×96 mouth crop, or use standalone
⚙️ ffmpeg opsTrim · concat · transcode (incl. gif + fps + codec change) · scale · mux audio · extract audio · thumbnail grid — pure ffmpeg, CPU
📋 Infoffprobe metadata at /v1/video/info — duration, codec, fps, dimensions, bitrate
🔗 MCP serverAll endpoints exposed as MCP tools so function-calling LLMs can drive the pipeline
📜 Spec-firstopenapi.yaml is the single source of truth — server-side Pydantic, Go client, and Python client all regenerated from one file
🐳 Hot-swap eviction + idle unloadOne GPU pool. Different model requested → current model evicted. Idle longer than FLICKIES_IDLE_UNLOAD_SECS (default 600s) → unloaded by the sweeper.

Quick start

bash
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

CUDA image at psyb0t/flickies:latest-cuda runs every engine at usable speed. CPU image runs all ffmpeg ops (trim/concat/transcode incl. gif/scale/mux/extract/thumbnail-grid/info) + Wav2Lip-CPU (~44s for a 3s clip; OK for short ones). GFPGAN + LatentSync 1.5 are CUDA-only — CPU image refuses to load them.

Weights live in the standard HuggingFace cache layout under /data/hf/hub/models--<org>--<name>/{blobs,snapshots,refs}/… — content-addressed blobs, snapshot-named symlinks, reusable by any other HF-aware tool sharing the bind mount (not just flickies). Sources:

engineHF repo
wav2lip / wav2lip-ganNekochu/Wav2Lip
S3FD detectorByteDance/LatentSync-1.5 (bundled in auxiliary/)
gfpganleonelhs/gfpgan
latentsync-1.5ByteDance/LatentSync-1.5

Lazy by default — each engine fetches its repo on first request. Set FLICKIES_ENABLED_ENGINES=wav2lip,gfpgan (or FLICKIES_PREFETCH_ALL=1) to pull at boot before uvicorn starts. FLICKIES_OFFLINE=1 disables auto-download (operators stage the snapshot dir manually).

Auth

Bearer token set via env. Any string works:

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

Unset → auth disabled. /healthz is always probe-exempt.

Logging

Structured JSON to both stderr AND a rotating file at FLICKIES_LOG_FILE (default /data/logs/flickies.log, 50 MB × 5 backups). Every line carries time (ISO 8601 UTC sub-ms), level, logger, file, line, func, msg, trace_id, request_id + typed extras.

Inbound X-Request-Id (UUID v4 OR ULID; garbage → server mints fresh) threads onto the logging scope via ContextVar + echoes back on the response. Outbound httpx fetches forward X-Request-Id + X-Trace-Id so the next hop's logs correlate. Sensitive keys (authorization, cookie, *token*, *secret*, hf_*, sk-ant-*) get [REDACTED] automatically at format time.

Default level is INFO; set FLICKIES_LOG_LEVEL=DEBUG for reconstruction-grade tracing: every ffmpeg/ffprobe command + result, each transform's decision (e.g. trim stream_copy vs precise_reencode) + output size, engine inference timing (wall_secs), URL fetch/upload byte counts, and job lifecycle. Logged URLs are stripped of their query string so presigned credentials never reach the logs.

MCP

Eleven tools at /v1/mcp via streamable-HTTP JSON-RPC: list_engines, info, lipsync, restore, transcode, trim, concat, scale, mux_audio, extract_audio, thumbnail_grid. Point a function-calling LLM at it (LibreChat, Cursor, Claude desktop with the MCP connector) and it drives the pipeline.

Hardware ceiling

Tested target: RTX 3060 12 GB. Fits LatentSync 1.5 (~8 GB) with headroom. Wav2Lip + GFPGAN chain peaks at ~5 GB. One engine resident at a time — different model request triggers hot-swap eviction.

License posture

Wav2Lip variants are trained on LRS2 (non-commercial). The server refuses to load them unless FLICKIES_ENABLE_NONCOMMERCIAL=1 is set in the server env. LatentSync 1.5 (Apache-2.0) is the commercial-safe default — no gate.

EngineLicenseGate
LatentSync 1.5Apache-2.0none
Wav2Lip / Wav2Lip-GANLRS2 non-commercialFLICKIES_ENABLE_NONCOMMERCIAL=1
GFPGANApache-2.0none
ffmpeg / ffprobe (not an engine; standard CPU helper)LGPL (ffmpeg)none

Same pattern as audiolla's MusicGen / matchering gates.

Spec-first

Every request/response shape lives in openapi.yaml. The Pydantic models in src/flickies/schema/_generated.py, the Go client in pkg/clients/go/client.gen.go, and the Python client in pkg/clients/python/flickies-client/ are all generated from that single file.

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

Never hand-edit generated files. Edit openapi.yaml, run make generate, commit everything together.

Generated clients

Go

bash
go get github.com/psyb0t/docker-flickies/pkg/clients/go@latest
go
import flickies "github.com/psyb0t/docker-flickies/pkg/clients/go"
c, _ := flickies.NewClient("http://localhost:8000")resp, err := c.PostVideoLipsync(ctx, flickies.VideoLipsyncRequest{...})

Python

bash
pip install "git+https://github.com/psyb0t/docker-flickies.git#subdirectory=pkg/clients/python/flickies-client"
python
from flickies_client import Clientfrom flickies_client.api.lipsync import post_video_lipsyncfrom flickies_client.models import VideoLipsyncRequest
client = Client(base_url="http://localhost:8000")result = post_video_lipsync.sync(client=client, body=VideoLipsyncRequest(...))

Agent integrations

The skill works in any agent that reads .agents/skills/ (such as peen), and installs natively in the clients below.

Claude Code

bash
claude plugin marketplace add psyb0t/agentsclaude plugin install flickies@psyb0t

Claude Code prompts for the flickies URL and, if auth is enabled, the token — the token is stored in your OS keychain.

Codex

bash
codex plugin marketplace add psyb0t/agentscodex plugin add flickies@psyb0t

Installed via the marketplace, the skill invokes as $flickies:flickies. Codex also picks the skill up automatically with no install in any repo containing .agents/skills/, where it invokes as plain $flickies.

OpenClaw

The skill is published to ClawHub on every release:

bash
openclaw skills install @psyb0t/flickies

For MCP clients that speak local stdio, the @psyb0t/flickies plugin bridges to flickies' /v1/mcp endpoint:

bash
openclaw plugins install clawhub:@psyb0t/flickies

Then set FLICKIES_URL (and FLICKIES_AUTH_TOKEN if the server requires one).

aigate integration

Mounts in aigate at /flickies/ and /flickies-cuda/ behind the same nginx → make run-bg lives. FLICKIES=1 and FLICKIES_CUDA=1 toggle the variants.

License

WTFPL for flickies itself. Bundled models follow their upstream licenses — review before commercial redistribution.

來源:README.md,提交 d8b19e5

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v0.3.17最新Oct 10, 2026
  2. v0.3.16Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分