
AdAnvil
io.github.maxbuildog由 GitHub 帳號 maxbuildog 發布v0.4.0更新於 Oct 26, 2026
Lets an AI agent edit vertical 9:16 video ads from your footage, a reference ad or an idea.
概覽
AdAnvil 讓 AI 助理用你自己的素材、參考廣告或一個點子來剪輯 9:16 直式影片廣告,算圖結果確定且可做品質檢查。
- 可以做什麼
- 建立與管理廣告專案、品牌檔案與簡報
- 索引素材、檢視縮圖總覽與單一畫格、標註與搜尋片段,並轉寫語音以挑選最佳鏡頭與剪接點
- 把參考廣告解析成鏡頭、節奏、文字與語音,並儲存逐鏡頭拆解
- 選擇配方、撰寫與修改分鏡、預覽字幕與片尾卡、驗證並在背景算圖
- 尋找、下載並分析音樂,產生配音,列出音效並把剪接點對齊節拍
- 對成品做技術品檢與創意評分,並批次產生變體組合
- 適用情境
- 適合希望由助理把原始素材或參考廣告做成完整直式廣告的情境:索引片段、撰寫分鏡、算圖並檢查結果。適合能自行判斷成品品質,並能提供素材、品牌資料與音樂的行銷人員與創作者。
- 執行需求
- 以 stdio 在本機執行。可透過 Claude Desktop 擴充套件、Docker,或 uvx 安裝,需 Python 3.11 以上、uv,以及 PATH 中的 ffmpeg 6.1 以上(含 libzimg)。建議設定 ADANVIL_PROJECTS_DIR 把專案限制在一個資料夾內。選用:轉寫(faster-whisper)、視覺環境(約 2.5 GB)、配音環境(約 3 GB),以及用於音樂搜尋的 Freesound 金鑰。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 AdAnvil,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
AdAnvil
An MCP server that lets an AI agent edit vertical 9:16 video ads.
AdAnvil works with Claude Code, Codex, Cursor or any MCP client. It builds ads from a brand's own footage, from a reference ad, or from an idea. The agent judges (which clips, what the text says, whether the result looks right). AdAnvil renders deterministically and checks the result: the same storyboard always gives the same video.
It is not tied to a niche. The recipes and the editing guide speak in general terms (product, benefit, problem, target customer) with examples from several niches: coffee, fashion, fitness, pets, software, home, beauty.
The demo above was made from the CC0 demo pack in examples/demo/ (four Wikimedia Commons clips, a product still and a fictional brand called Ember & Oak). No footage is stored in this repository: the pack is fetched on demand.
What it does
- Reference decoding: shots, pacing, burnt-in text and speech, plus a shot-by-shot breakdown the agent writes and compares to your edit.
- Footage library: indexing, contact sheets and mosaics so the agent can look at every clip before using it, and the speech of every video and audio file (word timestamps, searchable as soon as each file is done) so a talking creator can be cut on the pauses. Cuts are found on every frame, so the jump cuts between the takes of a long phone clip are separate shots, and the validator warns when a segment crosses one (a flash of one take, then another).
- 9 recipes (YAML) for common ad shapes: text hook, hook plus product, before and after, customer diary, comment reply, meme text, voice-over ad, long remake, talking-head UGC.
- 7 caption styles (
pill,meme,outline,outline_soft,box,label,comment) with emoji support. - Removal of burnt-in text from reference footage.
- HDR (HLG and PQ) to SDR tone-mapping.
- Music matching and loudness control.
- Optional open-source voice-over (Chatterbox) with captions synced to the spoken words, paused with
start/endwindows; a sentence end the voice repeats is cut and flagged. - Talking-head UGC: best take of each line across several recordings, cuts on the pauses without hesitations, the creator's own sound kept (with B-roll laid over the voice), captions built from the speech.
- Visual devices: a before/after reveal (a divider sweeps one picture away to show the other), split screens, picture cards (a photo or a screenshot that comes in over the video), video insets (picture-in-picture), stickers and arrows, a progress bar and punch-in zooms, and information cards drawn by AdAnvil (one idea per card, one card at a time, on screen while the voice says it).
- Sound design: a pack of about 18 sound effects (CC0 or synthesised, never stored in the repository),
sfxoverlays andaudio.sfx_autoat the cuts and captions, and cuts that snap to the beat of the music. - End cards composed from a real product photo, and offer storyboards (
story: "offer") for announcements and lead-collection ads that show the product from the first second. - Quality control with images: automatic checks, contact sheet of the result, full-resolution frames.
- Detached background jobs for indexing, voice and rendering, so long work survives a dropped connection.
Install
Pick one path. The first is the simplest.
1. Claude Desktop extension (one click)
Download adanvil-<version>.mcpb from the latest release, double-click it, and click Install in Claude Desktop. It asks for a projects folder and, optionally, a Freesound key (stored securely). You still need ffmpeg 6.1 or newer on your computer (brew install ffmpeg, winget install Gyan.FFmpeg, sudo apt install ffmpeg); if it is missing, the extension says so with the command for your system.
2. Docker (no Python, no ffmpeg to install)
The image has ffmpeg 6.1, runs as a non-root user and speaks MCP over stdio. Mount the folder that holds your projects at /projects; the agent must give tool calls paths under /projects (for example /projects/my-ad): the image sets ADANVIL_PROJECTS_DIR=/projects, so any other folder, and /projects itself, is refused.
On Linux add --user "$(id -u):$(id -g)" so the files written to the folder belong to you.
Codex, in ~/.codex/config.toml:
Cursor, in .cursor/mcp.json:
The image holds the base package only. Transcription is available with docker build --build-arg EXTRAS=transcribe -t adanvil:transcribe .. The voice, vision and music-generation environments (adanvil voice-setup, vision_setup, music-setup) are not included: they need gigabytes of models, so use the uvx path for them.
3. uvx
Requirements: Python 3.11 or newer, uv (it provides uvx), and ffmpeg 6.1 or newer, built with libzimg, on your PATH (check with ffmpeg -version; if it lives elsewhere, set ADANVIL_FFMPEG and ADANVIL_FFPROBE to the full paths).
ADANVIL_PROJECTS_DIR (recommended) is the folder that holds your projects: the server then refuses any project outside it. Projects are subfolders of it (for example ~/AdAnvil/summer-ad). See SECURITY.md.
The package is named adanvil. It installs two commands: adanvil (command line) and adanvil-mcp (the MCP server over stdio). uvx adanvil-mcp alone does not work, because uvx looks for a package with that name: always add --from.
The agent creates the project folder and tells you where to drop your files: footage in footage/, the reference ad in reference/, music in music/, logo and end card in brand/. It learns the method from the editing_guide tool and from AGENTS.md.
Codex, in ~/.codex/config.toml:
Without default_tools_approval_mode, a non-interactive codex exec run rejects every AdAnvil tool call with "MCP tool call requires approval".
Cursor, in .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
Any other MCP client (generic stdio entry):
Restart the client after editing its config, then ask the agent to call recipe_list. Nine recipes means the server is connected.
Optional: reference transcription needs the transcribe extra (faster-whisper). Use --from "adanvil[transcribe]" in place of the plain --from value above.
Try it with the demo pack
The demo needs a checkout, because the fetch script lives in the repository:
Then register the MCP server and ask your agent to make an ad from ./demo-project (give it the absolute path), or follow the command line walkthrough in examples/demo/README.md.
How it works
Everything lives in one project folder: footage/, brand/, music/, reference/, renders/, cache/, plus adanvil.json, brand.yaml and catalog.json. Every tool takes the absolute project_dir; every other path is relative to it and cannot escape it.
- The agent indexes the footage, looks at the contact sheets, and optionally decodes a reference ad.
- It picks a recipe and writes a storyboard (JSON): shots, captions, audio.
storyboard_validatechecks the storyboard against the recipe rules, thenrender_startrenders it in the background.qc_runchecks the file and returns control images that the agent looks at before delivering;ad_scorescores its creative quality (aim for 80 or more).
Details: docs/ARCHITECTURE.md for the pipeline, docs/EDITING_GUIDE.md for the editing doctrine, and AGENTS.md for the step-by-step guide an agent follows (same content as skill/SKILL.md, the Claude Code skill version).
Choosing a model
The result depends on the model that drives AdAnvil. Reference analysis and shot choice are judgement work: use the strongest model you can (for example Claude Opus) for them. Smaller models execute the steps well, but they tend to copy the surface of a reference (same words, same shots) instead of rebuilding its logic for your brand.
Tools (43)
CLI commands (adanvil <command> --help): mcp, voice-setup, vision-setup, init, cat, onboard, index, decode, recipes, validate, render, voice, qc, preview-caption, end-card, sfx-fetch. Add --json for machine-readable output.
Smart library (optional)
Finding the right shot is the slowest part of an edit. adanvil vision-setup (or the vision_setup tool) installs, once, a separate environment (about 2.5 GB, CPU only, no GPU needed) with a small multilingual image and text model (SigLIP 2, Apache-2.0) and a face detector (YuNet, MIT); the licences are in THIRD_PARTY.md. Nothing else changes without it, and library_index then says vision: unavailable.
- Index with vision.
library_indexalso embeds the frames of each contact sheet and looks for faces (cache/vision/<file key>.npz), and gives every entryauto_tags(a fixed label list such asperson,bathroom,hands,smiling,text on screen), kept apart from your owntags. - Search by sentence.
library_search(query="a woman with a sad face touching her jaw"), in any language, ranks shots across the whole library, with the usual filters applied first, and returns the best ones with one numbered mosaic: no sheet to open. - Product versions from photos.
brand.yamllistsproduct_versions: [{name: current, photos: [...]}, {name: old, photos: [...]}]; indexing guesses which version each shot shows, andlibrary_search(product_version="current")uses the guess unless a human annotation exists (a human annotation always wins). Give photos, not words. - Face-aware framing.
focus: "face"keeps the main face centred atface_y(0.38 of the frame by default) on clips, images, split panels and reveal sides; arevealalso puts both faces at the same place and size by default (align_faces).compare_pairuses the face detector too.
Voice-over (optional)
AdAnvil can add a generated voice-over with Chatterbox, an open-source text-to-speech model, with captions synced to the spoken words.
- Run
adanvil voice-setuponce. It creates a separate Python environment (in the AdAnvil cache folder) and downloads about 3 GB of models.adanvil voice-setup --engine kokoroadds the fast engine (below) to the same environment. - Generation runs on the CPU. One worker process per job loads each model once and serves every step (speech, alignment, check). Measured on an idle 8-core server (French, 3 to 9 lines of about 5 seconds): the Chatterbox voice takes about 25 to 35 seconds per line, so 9 lines take about 5.5 minutes (it took 10.5 before V2.6); a busy machine is slower, count up to 5 minutes per sentence.
- Two engines.
chatterboxis the default and the recommended voice for ads (the owner listened to both and kept it): it clones thereferencevoice, so it also fits a brand that has a voice to match.kokoro(Apache-2.0) has fixed voices and no cloning ({"engine": "kokoro", "voice": "ff_siwis"}, Frenchff_siwis, Englishaf_heartby default,bf_emmaand others for British English): a fast option for drafts and previews (check the script, the timing and the captions before paying for the real voice), about 25 seconds for 9 lines plus 50 seconds of alignment and check on the same server. It speaks French and English only. - The pronunciation check reuses the alignment transcript when every word is confident (
check_confidence, default 0.6) and the line reads as written; only doubtful lines are transcribed again by thecheck_model. Setcheck_confidencetonull(orADANVIL_VOICE_CHECK_CONFIDENCE=off) to check every line with thecheck_model. - The voice speaks for the brand, as a narrator. It must not pose as a fake customer.
- The voice language is the
languageof the voice spec. When the spec does not set it, AdAnvil uses thelanguageof the project'sbrand.yaml(fr-FRcounts asfr), andenwhen the brand has none. - When the voice repeats the end of a sentence, the line is cut after the last word of the script and flagged (
trimmed_extra); a repeat that cannot be cut makes the line suspect. Write a foreign word as it must sound insay({"say": "...", "show": "..."}) and avoid acronyms the voice spells badly. - Chatterbox embeds a Perth watermark in its audio. AdAnvil keeps it. Do not remove it.
- Use only a reference voice you have the right to use.
Talking-head UGC (optional)
A creator talking to camera is cut from the speech in the footage. library_index transcribes the clips and audio files that have sound (word timestamps, in the same job, once per file, each file stored as soon as it is done), with faster-whisper when it is installed (pip install 'adanvil[transcribe]') or else the voice environment (adanvil voice-setup); without either, indexing still succeeds and the entries say so. Indexing uses a fast model to make the speech searchable; speech_refine transcribes the clips you keep again with a stronger one, and the brand name, the product name and speech.vocabulary of brand.yaml are given to the transcriber. A voice recorded in a separate audio file is found by name (separate_audio_candidates on a video with silent sound) and laid with audio_from; syncing is up to the agent, on a preview. Then speech_takes picks the best take of each line, speech_view gives the cuts that keep the speech and drop pauses and hesitations, and a storyboard with audio.clips, audio_from (B-roll over the voice) and a speech_captions overlay renders the ad. The ugc_talking recipe puts it together; the guides explain each step.
ADANVIL_SPEECH_MODELsets the indexing model (defaultbase: fast, good enough to search).speech_refineusesmediumunless told otherwise. The language is thelanguageofbrand.yaml, else auto-detected.ADANVIL_SPEECH=offstopslibrary_indexfrom transcribing on its own (transcribe="auto");transcribe=truestill does.- The creator's words are claims: the validator warns
banned_word_spokenwhen a kept word is on the brand's banned list, andcut_mid_wordwhen a cut falls inside a word (not when the voice goes on across the cut). The fillers that are cut (euh, um, uh, er, genre...) can be replaced inbrand.yamlunderspeech, which also takes avocabularylist of words to spell right.startandendlimit aspeech_captionsoverlay to a window. A misheard word can be fixed in the captions withspeech_captions.corrections, close spellings only (a word the transcriber glued together can be split in up to three), and every correction is listed for review (speech_corrections).
Visual devices (optional)
A reveal segment (a divider line sweeps a before picture away to show the after picture, from two real pictures or two clips, with labels that follow their side) for a before/after the viewer watches happen, a split segment (side by side or top and bottom, with labels such as FROM THIS and TO THIS) for comparisons, an image overlay with animation, frame and rotate (a photo or a review screenshot that comes in over the video as a card), a video overlay (picture-in-picture, with a rect, rounded or circle shape, border and shadow), sticker overlays (arrow, hand-drawn circle and underline, badge, emoji, image, with a pop or draw animation), a progress bar, a punch (instant zoom) on a clip and an info_card (an information card AdAnvil draws itself: an accent intro card, then numbered item cards, one at a time, each while the voice says it, with an entry and an exit, no shadow by default). Use one or two per ad. Fields and rules: AGENTS.md and the editing guide.
Sound design (optional)
Sounds go over the audio bed of an ad: a whoosh on a cut, a pop on a caption, a ding on the price, a riser before the reveal.
adanvil sfx-fetch <project_dir>(orsfx_listwithfetch=true) builds a pack of about 18 short sounds in the project'ssfx/folder. Each one is downloaded from a pinned CC0 source (checked by SHA-1) or synthesised in code, then trimmed and set to one level. Nothing is stored in this repository; sources and licences are listed inexamples/sfx/README.mdand written tosfx/LICENCES.txt. Your own files insfx/work too.{"type": "sfx", "source": "sfx/pop.wav", "at": 3.2, "volume": 0.8}places a sound;audio.sfx_autoplaces them at the cuts and at the captions. Sounds never clip and never run past the end.music_beatsgives the beats of a track as it will play, andstoryboard_snapmoves the cuts onto them (the validator reports how many cuts are already on a beat).
Performance settings
ADANVIL_WORKERS: how many files, thumbnails or segments are processed at once. Defaultmax(1, min(4, cpus // 2)), and at most 2 when the machine has under 12 GB of RAM.ADANVIL_FFMPEG_THREADS: threads of each ffmpeg decoder or encoder. Defaultmax(1, cpus // workers).- Voice:
ADANVIL_VOICE_CHECK_MODELsets the Whisper model of the pronunciation check (unless the voice spec setscheck_model).ADANVIL_VOICE_THREADSsets the torch and Whisper threads (default: usable cores).ADANVIL_VOICE_CHECK_CONFIDENCEis the word confidence from 0 to 1 above which the alignment transcript replaces the check model (offto always run the check model; the spec'scheck_confidencewins).ADANVIL_VOICE_PERSISTENT=0goes back to one process per step instead of one worker per job. - Speech:
ADANVIL_SPEECH_MODEL(defaultbase),ADANVIL_SPEECH=off(no automatic transcription),ADANVIL_SPEECH_PROMPT(an optional text that biases the transcriber, for example towards keeping hesitations). - Other:
ADANVIL_CACHEmoves the cache folder;ADANVIL_FFMPEGandADANVIL_FFPROBEpoint to the binaries (absolute paths; otherwise they are looked up onPATH, never in the current folder). - Security:
ADANVIL_PROJECTS_DIRkeeps every project under one folder;ADANVIL_ALLOW_PRIVATE_URLS=1letsbrand_onboardand the downloads reachlocalhostand the local network (development only). SeeSECURITY.md. - Benchmark:
uv run python scripts/bench.py --files 12 --seconds 4.
Responsible use
AdAnvil edits ads; you answer for what they say and show.
- Use real comments and real customer words only. The tool never invents an offer, a price, a guarantee or a claim: the human confirms them.
- Get the consent of the people who appear in your footage.
- Check the licences of the music and the footage you use (the demo pack is CC0, your own files may not be).
- Make sure every claim in the ad is true and allowed in your market.
- Do not clone a voice without the right to do so, and do not present a generated voice as a real customer.
Contributing
See CONTRIBUTING.md.
Licence and status
MIT, see LICENSE. Fonts, emoji and other third-party material are listed in THIRD_PARTY.md.
Status: alpha, version 0.4.0. Interfaces can still change. See CHANGELOG.md.
來源:README.md,提交 191c513
工具
0版本歷史
4- v0.4.0最新Oct 19, 2026
- v0.3.1Oct 16, 2026
- v0.3.0Oct 14, 2026
- v0.2.0Oct 13, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
