wecut_doctor
Check FFmpeg
Check that FFmpeg is installed and has what WeCut needs (libass, xfade, an H.264 encoder). Run once before the first render.
無需輸入參數。

io.github.13kailouis-stack由 GitHub 帳號 13kailouis-stack 發布v0.1.0更新於 Nov 6, 2026
Local video editing for AI agents: cut, caption, analyse, reuse viral formats. FFmpeg, no cloud.
本機影片剪輯引擎,讓助理用 FFmpeg 完成剪裁、字幕、預覽與算圖,並把爆紅影片的格式重用為範本。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
WeCut is a free, open-source video editing engine for AI agents. The agent writes a small JSON project; wecut renders it with the FFmpeg already on the machine. It cuts, captions, reframes and mixes short-form video, and it can analyse a video that went viral and reuse its format as a template on new footage. CLI and MCP server. No cloud, no API key, no GPU, no telemetry.
Things you can ask an agent that has WeCut:
talk.mp4 and put the music under it, quieter when he speaks."Every command prints one JSON object on stdout. Exit codes: 0 ok, 2 invalid input, 3 missing dependency, 4 render failed, 5 over a limit.
WeCut Studio is an independent static web editor. Choose local clips, trim and reorder them, add text and music, then download a portable template for an agent on another device. Editing runs in the browser; rendering runs on the agent's computer. A public editor needs only static file hosting, not a rendering server. A localhost URL itself is not public.
Run python -m http.server 8770 --bind 127.0.0.1 --directory studio from this checkout and open http://127.0.0.1:8770. No build or backend is needed. The template file is shared through your agent chat; public template storage and project autosave are not included. Bundle import requires the 0.2.0 source/build; published npm 0.1.0 does not include it yet.
The quick way, for Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf and Grok Build:
It only touches the clients it finds (or --client codex,cursor), keeps every other setting as it was, and reads each file back. Quit Claude Desktop before you run it: while it runs it can write its settings back and drop the entry. Run it again after updating WeCut, so the installed skill stays current. Or do it by hand:
WeCut needs FFmpeg 6 or newer with libass (npx -y wecut doctor checks it and says what to install):
sudo apt-get install -y ffmpegbrew install ffmpeg-full (the slim ffmpeg formula has no libass; WeCut finds ffmpeg-full on its own)winget install Gyan.FFmpegThen connect it to the agent you use. The MCP server works in a fixed workspace folder (--root, default: the folder it was started in); every media path is relative to it.
Or as a plugin, which also installs the WeCut skill:
Claude Desktop, Cursor, Windsurf, Cline, Roo Code, LM Studio and most other clients take this block in their MCP settings file. Give --root explicitly, because desktop apps start servers from an unpredictable folder.
or in .vscode/mcp.json:
or in ~/.codex/config.toml:
WeCut targets any agent with permission to run local programs and access the user's media. Product names do not determine compatibility: a terminal agent can use the CLI without MCP.
Grok Bot, Manus, Muse, OpenBot, Dots and Claude Duet are examples of requested integration targets, not a list of tested integrations. For each product, verify that its execution environment can run the WeCut binary and FFmpeg. A chat interface alone does not provide that access.
Then follow the guide: probe, write project.json, validate, preview, render. In a fresh Linux sandbox install FFmpeg first with sudo apt-get install -y ffmpeg.
Clients that can launch a local MCP process can use wecut mcp over stdio; the client-specific examples above are not an allowlist. An HTTP-only MCP client needs a separate bridge: WeCut does not currently serve remote HTTP MCP. Browser-only agents need an execution environment before they can render. Node is needed for the npm launcher; a standalone binary does not need Node.
The skill in skills/wecut/SKILL.md teaches the workflow to agents that load skills (Claude Code, Claude apps, Codex, Cursor and others):
npx -y wecut <command>, or npm i -g wecut. npm installs only the binary for your platform (@wefluence/wecut-<os>-<arch>); there are no install scripts.SHA256SUMS.go build -o wecut ./cmd/wecutPrebuilt for Linux, macOS and Windows on x64 and arm64. Set WECUT_BINARY to use your own build through the npm launcher.
xfade), clip fadesgradients), like the dark fade behind captionsinset), colour washes for a stretch of the video, captions that light up word by word (reveal) with key words set apart (accent)--no-loudnorm skips it)clone turns a finished video into a template the way an editor would have built it: every cut and transition (flash, fade, dissolve, zoom, blur) at its exact time, each shot's framing (full screen, or shown whole on black or blurred bars) and push-in, the text cards with their colours, box, size, line spacing, padding, timing and entrance (fade, pop, slide or type), the caption style and position, the logo, and a talk that already plays under the opening B-roll. A steady beat is stored as beat indexes; recipe apply snaps those cuts onto replacement music. Each shot is a media slot, like a CapCut template. WeCut holds no model and no API key: it returns a review with the images and evidence behind each finding, and the agent running it looks and answers, so words, fonts, what each shot is and the kind of each transition come from real eyes and OCR is only a fallback. The comparison sheet puts the original beside the template filled with numbered stand-ins, so a person or a model can check it at a glance. People fill the slots in WeCut Studio; agents with wecut recipe apply. Details and the format: docs/clone.md. Cloning needs the 0.3.0 source/build; the published npm 0.1.0 does not have it yet.
analyze measures what a model cannot see in a transcript: where the cuts are (a white flash or a strobe counts once), how long the opening shot holds, whether cuts land on the beat, and whether the file ends with a silent platform outro. Its frame sheet, one frame per shot with timestamps, is how the agent reads the headline card, text style and framing.
A recipe (wecut.recipe/1, schema in schema/wecut.recipe.schema.json) is an edit's shape without its content: sections fed by roles (a 5 s hook with a headline card, then the body), text slots filled at apply time (with emphasis for the words to colour), caption and music style, effects on cuts. A recipe can carry its own default track, like a CapCut template; the music passed at apply time replaces it and "none" drops it. The built-in recipes copy the structure of formats that are common on Indonesian short-form video today: news-style reposts with a headline card, quote hooks, phrase-captioned vlogs, punched-in podcasts, photo slideshows.
Copy the structure, not the content: other creators' footage, wording and music stay theirs.
Prompts (slash commands in clients that show them): clips-from-video, copy-viral-format, add-captions, save-template.
Projects go in as an object (project) or a workspace file (projectFile). The server speaks both protocol eras: modern clients (2026-07-28, per-request _meta, server/discover) and clients that open with initialize (2024-11-05 to 2025-11-25). Renders run one at a time; notifications/cancelled stops one and removes its partial file.
wecut guide (the same text as skills/wecut/SKILL.md) explains the workflow, the two clocks (source seconds vs output seconds), captions and troubleshooting. wecut schema prints the full JSON Schema and wecut example <name> prints a working project.
What is WeCut? An open-source command-line video editor made for AI agents. The agent describes an edit as JSON, WeCut checks it, shows preview frames and renders it with FFmpeg on the same machine. It is made by Wefluence, an Indonesian UGC and clipping marketplace.
Is it free? Yes. Apache-2.0, no account, no API key, no usage limits. It runs on your own computer or your agent's sandbox, so there is no server bill either.
How do I let ChatGPT, Claude, Grok or another AI edit videos?
Give the agent WeCut: as an MCP server (npx -y wecut mcp) in clients that support MCP, as the skill, or by letting an agent with a terminal run npx -y wecut guide and follow it. See Install in your agent. Chat apps without a code sandbox cannot reach files on your computer; use a desktop or terminal agent for those.
Can an AI agent make TikTok, Reels or YouTube Shorts from a long video?
Yes. The agent reads a transcript, picks the moments, writes one project per clip with captions.src pointing at the source, previews one, and renders them all in 9:16 with captions.
Can it copy the format of a viral video?
It measures the video (wecut analyze: cuts, pace, hook length, flashes, tempo, pauses, outro) and returns a frame sheet the model looks at. The agent then picks or writes a recipe and applies it to new footage, words and music. It copies the structure, not the footage, wording or music.
Does it transcribe speech?
It reads word timings from OpenAI or Groq Whisper verbose_json, whisper.cpp JSON, SRT, VTT or a plain word list. wecut transcribe media/talk.mp4 writes those timings locally: FFmpeg's whisper filter when this build has it, otherwise a whisper-cli (or whisper-cpp / whisper) binary on PATH. Both need a ggml model (--model, WECUT_WHISPER_MODEL, or models/ggml-base.bin). Nothing is downloaded. wecut doctor reports local_transcription: true when either engine is available.
Does it upload my video anywhere? No. WeCut makes no network requests and has no telemetry. Media paths are refused if they are URLs or outside the workspace.
Does it need a GPU?
No. It encodes with libx264 on the CPU by default and can use NVENC, Quick Sync or VideoToolbox with --encoder. A 43-second 1080x1920 clip with captions renders in about 28 seconds on a 2019 laptop.
Which platforms? Linux, macOS and Windows on x64 and arm64, with FFmpeg 6+ and libass.
Can I make my own templates?
Yes. An agent can write and revise project JSON from your instructions, validate it, preview it and render it. You do not have to edit manually first. Then run wecut recipe from-project my-edit.json --write recipes/my-style.json, or author recipe JSON directly using wecut recipe schema. Workspace recipes appear in wecut recipe list beside the built-ins.
A recipe can retain a music path, but does not bundle the audio file. Extraction captures a reusable structure rather than a lossless copy of every project feature. Review the applied recipe before reusing it in bulk.
The Wefluence Creator companion adds Kirim ke agent to a saved project's menu: export a recipe with music, then send it to an agent on another device. In the 0.2.0 source/build, wecut recipe unpack received.wecut.json --write templates/my-style imports it; recipe pack creates a package from an engine recipe. Published npm 0.1.0 does not have these commands. See cross-device template authoring for supported edits, limits and rollout requirements. Visual import back into the app is not implemented.
WeCut runs on someone else's machine and takes instructions from a model that may have read hostile content. So:
.ass file with braces and backslashes escaped, so a caption cannot inject override tags or filters.--root, default: current folder). .., absolute paths outside it, symlinks pointing out, and URLs are refused. Output may not overwrite an input.-protocol_whitelist file and a demuxer whitelist (MP4/MOV, Matroska/WebM, common audio and image formats). HLS playlists, concat lists and network protocols are refused, including a playlist renamed to .mp4.Measured on a 2019 laptop (Intel i5-1035G7, 4 cores, under load), final preset, 1080x1920 unless noted:
Encoding dominates; text and captions cost almost nothing. A plain cut without re-encoding is not used, because any crop, caption or effect needs a re-encode.
Agent and registry manifests: server.json (MCP Registry), .claude-plugin/ (Claude Code plugin and marketplace), gemini-extension.json and GEMINI.md (Gemini CLI), glama.json, llms.txt, AGENTS.md (for agents changing this code).
Release build: go run ./tools/release -version 0.2.0 (nothing is published; see .github/workflows/release.yml).
Tests: go test ./... (the CLI tests render real video and are skipped without FFmpeg). Golden FFmpeg plans live in internal/engine/testdata; after an intended change run go test ./internal/engine -update and render the examples to check them.
uvx wecut (PyPI wheels) and an MCPB bundle for one-click install in Claude DesktopCode: Apache License 2.0 (see LICENSE). Bundled fonts: SIL Open Font License 1.1 or Apache 2.0, see internal/assets/fonts/LICENSES.md.
來源:README.md,提交 c532783
Check FFmpeg
Check that FFmpeg is installed and has what WeCut needs (libass, xfade, an H.264 encoder). Run once before the first render.
無需輸入參數。
Inspect media files
Duration, width, height, fps, rotation and audio for video, image or audio files in the workspace. Use the durations for clip from/to.
files必填Check a project
Check a project against the media without rendering. Returns the finished duration and size, or every error with a JSON pointer (e.g. /clips/0/to) and a hint on how to fix it.
projectprojectFileLook at frames
Render a few still frames (540p JPEG) at chosen times of the finished video and return them as images, so you can check framing, text size and captions before rendering. Also saved under out/preview/.
atprojectprojectFileRender video
Render the project to output.file (MP4 or GIF) inside the workspace, overwriting an earlier render with the same name. The result is checked with ffprobe. Sends progress notifications when the call has a progressToken.
outpresetprojectprojectFileList styles and names
Names usable in a project: text styles, caption styles, fonts, transitions, filters, effects, motions, ratios and text animations.
whatProject format
The JSON Schema of the WeCut project format, with a description of every field. what=recipe gives the recipe (template) format instead.
whatExample project
A complete working project to copy from: podcast-clip (cuts + karaoke captions + ducked music), slideshow (photos with motion and transitions) or product-promo (contain + blur, logo, text). Omit name to list them.
nameAnalyse a video
Measure a video that worked: shots and pace, cuts in the first 3 s, flashes, beat and tempo, pauses, a silent platform outro, and (with a transcript) words per minute and the hook's words. Returns a sheet of frames, one per shot, as an image: look at it for the headline card, text style, framing and captions. Use the result to pick or write a recipe.
file必填framestranscriptList recipes
Recipes are templates: the shape of an edit without its content (sections such as hook and body, text slots, caption and music style). Lists the built-in ones and the workspace's own (recipes/*.json).
無需輸入參數。
Show a recipe
A recipe in full, with the roles its clips can feed, its text slots, and its default music.
name必填Apply a recipe
Turn a recipe plus new material into a project: clips (each with an optional role such as hook or body), words for the text slots, a transcript for captions, and music (replaces the recipe's own track; "none" drops it). Returns the project (saved with write); then wecut_preview and wecut_render it.
clips必填musictextswriteoutputrecipe必填captionSrctranscriptSave a project as a recipe
Make a reusable template from a finished project: sections, transitions, text slots (current words kept as defaults), caption style, effects, and its music as the default track.
namewriteprojectprojectFile已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
npx -y wecut doctor # is FFmpeg ready?npx -y wecut guide # the full guide for agentsnpx -y wecut probe media/talk.mp4 # duration, size, fps, audionpx -y wecut validate project.json # errors with JSON pointers and fix hintsnpx -y wecut preview project.json --at 1,5,9 # small JPG frames to look atnpx -y wecut render project.json # out/clip.mp4npx -y wecut mcp # the same, as an MCP server on stdionpx -y wecut setup # shows what it would changenpx -y wecut setup --apply # registers the MCP server and the skill, backs up each file it editsnpx -y wecut setup --remove --applyclaude mcp add wecut -- npx -y wecut mcp/plugin marketplace add 13kailouis-stack/wecut/plugin install wecut@wecut{ "mcpServers": { "wecut": { "command": "npx", "args": ["-y", "wecut", "mcp", "--root", "/path/to/workspace"] } }}code --add-mcp '{"name":"wecut","command":"npx","args":["-y","wecut","mcp"]}'{ "servers": { "wecut": { "type": "stdio", "command": "npx", "args": ["-y", "wecut", "mcp"] } } }codex mcp add wecut -- npx -y wecut mcp[mcp_servers.wecut]command = "npx"args = ["-y", "wecut", "mcp"]gemini extensions install https://github.com/13kailouis-stack/wecutnpx -y wecut guide # read this first: workflow, project format, templatesnpx -y wecut doctornpx skills add 13kailouis-stack/wecutwecut clone media/viral.mp4 --name news-card # -> recipes/news-card.json + out/clone/news-card/compare.jpgwecut analyze media/viral.mp4 # shots, pace, hook, flashes, tempo, pauses + a frame sheetwecut recipe list # templates: built-in and the workspace's recipes/*.jsonwecut recipe apply --input request.json # recipe + new clips, words, music -> projectwecut recipe from-project my-edit.json --write recipes/my-style.json # "save as template"{ "wecut": "1", "output": { "file": "out/clip-01.mp4", "ratio": "9:16" }, "clips": [ { "src": "media/talk.mp4", "from": 754.2, "to": 781.0, "focus": { "x": 0.42, "y": 0.5 } } ], "texts": [ { "text": "How I made my first $10k", "end": 3, "style": "hook", "y": 0.2, "in": { "type": "pop" } } ], "captions": { "words": "media/talk.words.json", "src": "media/talk.mp4", "style": "karaoke" }, "audio": [ { "src": "media/music.mp3", "volume": 25, "loop": true, "duck": true } ]}cmd/wecut entry point (CLI and `wecut mcp`)internal/spec project format: types, strict decoding, validation, cataloginternal/engine timeline, captions, .ass builder, FFmpeg graph compiler (pure, no I/O)internal/analyze shots, pace, tempo, pauses from FFmpeg's measurements (pure)internal/recipe the template format: validate, apply to new material, derive from a projectinternal/ff finding, probing and running FFmpeginternal/cli the commands; every result is one JSON objectinternal/mcp MCP stdio server, a thin layer over internal/cliinternal/workspace keeps every path inside the workspaceinternal/assets fonts embedded in the binaryschema/ JSON Schema (kept in sync with the Go types by a test)examples/ example projects (`wecut example`)recipes/ built-in recipesskills/wecut/ Agent Skill (`wecut guide` prints it)npm/wecut/ the npm launcher (`npx wecut`)tools/release/ builds all platforms, npm packages and release archives into dist/