
今天拆的是 capcut-cli:一个直接读写本机剪映 / CapCut 草稿库的独立 CLI,让编码 Agent 把素材写成一份还能在剪映里继续改的工程,而不是一条 mp4;文章给全它在链条上的位置、四条上手路径、八处已知阻塞,以及剪映 6.0 及以后的加密那道门、版本适配的证据档和 MIT 之外的赞助三档各是什么。
capcut-cli 是一个独立、非官方的命令行工具,MIT 许可,作者是 Rene Zander,2026 年 4 月 13 日建仓。12 它做的事一句话能说完:直接读你本机那份剪映 / CapCut 的草稿,按命令改完再原子写回去,你在剪映里打开就能接着剪。3 到 2026 年 9 月 24 日,仓库有 709 star、76 fork、267 次提交、3 个未关闭的 issue;1 npm 上的包最新是 0.25.0(2026 年 9 月 18 日),从最早一版到现在共 41 个版本,过去一周被下载 2,493 次,过去一个月 11,259 次。4
skills/capcut-edit、.claude-plugin、wasm/capcut-core、python 几个目录,顶部那行提交是「README.zh-CN: add the commercial work section (#127)」,显示 267 Commits、20 Branches、38 Tags。1draft_content.json、draft_info.json、draft_meta_info.json、template-2.tmp;时间线可能就在根上,也可能包在一层浅的对象或字符串信封里。CapCut 8.7 及以后,可读的 template-2.tmp / draft_meta_info.json 优先,更早的版本则仍然优先 content/info 那一对;一次原子保存会把所有可读的时间线目标一起同步。16--force-write 是显式覆盖而不是默认的补救手段。16 写之前还有一道版本闸门:剪映的有效版本 ≥ 6.0 直接拒绝,CapCut 超出已知范围(大于 9.x)拒绝,顶层 schema 整数大于 360000 也拒绝,其余情况警告后照写。16npm install -g capcut-cli 之后就是 capcut <命令> <工程>;不想装就 npx capcut-cli。3loadDraft / lintDraft / saveDraft 三个入口,零依赖。3capcut serve 从 stdin 读 JSONL 任务,一条一条跑,是给 n8n、Make、扣子这类编排器准备的入口。3wasm/capcut-core 把 inspect、diff、lint-portable 三个 JSON-in/JSON-out 函数编成一个 WebAssembly Component,没有文件系统、网络、环境变量、时钟、随机、stdio 或进程导入,通过 Wassette 走 MCP;它的定位是「让 AI 看,不让它碰」。317npx skills add renezander030/capcut-cli 会把 capcut-edit 这个技能装进 Claude Code、Codex、Cursor、OpenCode 以及 skills 安装器支持的其他客户端;18 Claude Code 还可以当插件装(/plugin marketplace add renezander030/capcut-cli 之后 /plugin install capcut-cli@capcut-cli)。技能里写的是每条命令、草稿库在 macOS 与 Windows 上的位置、以及「先查看再动手」的习惯(先 inspect,别把整份草稿倒出来),触发词中英文都认——剪映、字幕、草稿。319info、tracks、materials、version、lint;往下钻有 segments、texts、segment、material;创建有 init、quickstart、compile(从一份 JSON 规格搭草稿);预览有 render;添加有 add-video、add-audio、add-text;编辑有 trim、speed、volume、转场、蒙版、文字与图片动画、缓动曲线;模板有套用与提取、make-preset;字幕有 caption、import-srt、export-srt、translate;效果有 sfx、chroma、matting;长转短有 cut、detect-scenes、detect-silence、detect-retakes;自动化有 serve、migrate、doctor、sync-timelines。320
caption 用,FFmpeg 给 render 用,ffprobe 给自动读媒体元数据用,ANTHROPIC_API_KEY 给 translate 用。3pip install capcut,纯 Python、无依赖、Python ≥ 3.9,2026 年 9 月 19 日随那一轮改动发出去,PyPI 上现在是 0.1.0。2122 它本身不实现任何剪辑,只是按参数去调同一个二进制,把返回的 JSON 交回给你。info、tracks、segments、materials 都可以只读);一张低分辨率的 ffmpeg 代理片,用来快速看时间线对不对;lint / diagnose / version 的报告;以及一个用 export-srt 或 translate 换出来的字幕文件。320 成片和发布都不在它这里。npm install -g capcut-cli(或者任何一条命令前面加 npx capcut-cli,不装也能跑)。3capcut doctor——它会告诉你本机草稿库在哪、里面每份工程是可读的、缺标记的、加密的还是读不出来的。这条命令在 2026 年 9 月 19 日那一轮改动中加上了 --drafts <dir>,让你在没有装应用的机器和 CI 里也能跑。23capcut quickstart my-first --video clip.mp4 --srt captions.srt——它建一份新草稿,把视频和字幕放上轨道。3capcut info ./my-first/ -H 把结构读回来。3npx skills add renezander030/capcut-cli,然后问它「把这条素材剪成 9:16 的字幕短片」这一类的需求。3capcut doctor 通过;capcut info 读得回你刚写的东西;capcut lint 不报警;capcut version <project> 报出 schema 标记;capcut diagnose <project> -H 报出它选了哪个文件当权威、时间线有没有分叉。16draft_content.json 不再是明文 JSON,而是 AES 加密的二进制负载。
现状:项目把这个决定单写成了一份文档,标题就是「decided — detect, do not decrypt」。三条理由写在里面:发布一个专门拆厂商加密的例程属于另一类风险(社区已知的算法是逆向来的,没有许可);密钥与算法在剪映的点版本之间移动过(文档引了 pyJianYingDraft 的 #142/#169/#174 三条);以及一个会随剪映更新静默失效的解密器,比一句诚实的「不做」更糟。24 对应到代码里就是上面那道写前闸门:剪映有效版本 ≥ 6.0 的改动请求被拒绝。16
你能怎么办:文档按优先级给了三条替代路——把剪映钉在 5.9.x 并阻止自动升级(最后一条被广泛使用的明文线,矩阵里标的是 community-reported 的 expected-compatible);改用国际版 CapCut,它不加密;已经是加密草稿就交给社区工具(文档点了 pyJianYingDraft 与 duoec/duo-video,并明说它们在这个工具之外)。1624
draft_info.json 会被应用打开、就地升级成加密格式并补齐 Timelines/。24init、quickstart、compile 看起来成功了,stderr 上却多一条 WARNING,JSON 里 template.store 说没有可读的工程可以拿来当模板。
触发条件:你的草稿库是剪映 6.0+ 的——应用写进去的每一份都是加密的,工具没法从里面挑一份当底。
现状:v0.24.0 起,这三条命令会报告草稿库里有多少工程是可读的、缺标记的、加密的、读不出来的,并在「一份都播不了种」时明说;lint 对这类草稿报 template-unverified-store,意思是这份草稿没被那个版本的任何真工程验证过。23
你能怎么办:把它当成「能生成、但没有被你这个应用版本验证过」的草稿,生成后先打开看一眼再批量跑。new_version 为空,8.5.0 拒开;#111 是真机验证——内置模板造出的草稿(连 quickstart 在内)被真实的 8.7.0 Windows 拒开,register --materials、relink、sync-timelines 都没用,因为原因是模板里的旧标记,不是路径;换用从已安装应用里捕获的模板之后,同一条流水线在 9.3.0 上跑通了「打开、编辑、保存、关闭、重开」的往返。162526
你能怎么办:v0.23 起默认改成「从草稿库里最新的应用自产工程播种」,已经造好的草稿用 migrate --from-store 重新盖章。16 但如果你库里的工程全是加密的(上一条),播种会退回内置模板,也就是退回这个问题。Timelines/<main_timeline_id>/draft_info.json 下(7.x 就是这样),或者 8.7 及以后改以 template-2.tmp / draft_meta_info.json 为准。
现状:#50 把这条写得很细(2026-08-01 开单,仍是 open):7.7 的真实工程里,根目录那份 draft_info.json 只是派生镜像,应用下次打开会用它自己的嵌套时间线重新生成,把写入覆盖掉;复现步骤是改一条已知 id 的文本片段,然后依次看到「CLI 返回成功」「根文件里是新文本」「Timelines/<active-id>/draft_info.json 里还是旧的」「打开显示旧字幕」「应用重写根镜像」。8.7+ 的清单优先级来自 #35。2728
你能怎么办:动手前后各跑一次 capcut diagnose <project> -H,它报出权威文件的选择与时间线分叉;已经分叉的用 sync-timelines --apply 修;写的时候别开着编辑器(工具会保护托管路径,--force-write 才绕得过)。16
materials.texts[].content 的 range 存的是 UTF-16 code unit 而不是字节,这个结论修掉了 0.19.1 里的一个真实写入 bug,但文档自己说明这只是「一个字段的测量,不是一轮套件」;8.4.0 记的是「首次打开后从根转成嵌套」;8.7 Windows 是「适配器已发,从草稿库播种」;9.2.8-beta4 是「嵌套文档才是权威」;9.3.0 用捕获来的模板跑通一次真机往返。1629 剪映一侧只有三行:5.9.x 是 community-reported 的 expected-compatible,6.0+ 是 known-broken(加密),11.4.0 是「明文草稿能被打开、生成不受阻」。16
你能怎么办:把这张表当口径而不是承诺——先 capcut version <project> 看 schema 标记、capcut doctor 看草稿库,再决定要不要往生产工程上写。列表里另有一条 #52(open,2026-08-02)在问 6.2.8 的安装包,报的正是 6.3.0 与 9.1.0 打开自己草稿时报「来自非常规路径」。30capcut fixture,「脱敏」包里还带着稳定的设备标识。
触发条件:装的是旧版本。
现状:#59(2026-08-08 开、2026-08-09 关)写得很具体:脱敏清单只有路径与邮箱形状的五项,而 CapCut 在每份时间线文件里都存着 device_id、mac_address、hard_disk_id,它们原样留在包里,SANITIZE_REPORT.json 还把原始绝对路径写了回去——作者当时的原话是「任何照着文档做的人都会在以为自己已经脱敏的情况下把设备标识发到公开 issue 里」。31 README 顶部那条 IMPORTANT 另外写着:0.17.0 及以前的版本里有本地命令 / 过滤注入路径与不安全的临时文件、凭据输出行为,分别修在 0.17.1 与 0.18.0。3
你能怎么办:直接用 0.25.0 或更新;要拿 fixture 包去提版本兼容的 issue,用 0.18.0 之后生成的包——#44 里也重申了这一点。32mask 只写静态的蒙版几何,keyframe 目前只动片段的位移、缩放、旋转、透明度和音量,蒙版自身的位置、宽高、旋转、羽化都还不在可关键帧的属性里;接受标准里还写着,插值曲线要以「剪映实际渲染出来的结果」为准,而不只是自己的写入器能往返。32
你能怎么办:静态蒙版、色度抠图、智能抠像这些今天就能用;要动画蒙版,要么等这一条落地,要么把这一笔留给人在应用里补。render 当成导出。
现状:README 把这件事写得很明白:render 是低分辨率的 ffmpeg 代理片,不是剪映的最终渲染;成片要在剪映或剪映国际版里打开、调整、导出,「the publish click stays human」。3
你能怎么办:把这条链路定位成「前面全自动、最后一公里交给人」;要无人值守成片,就得换到渲染底座那一层去(kinocut 把 FFmpeg 包起来、HyperFrames 是浏览器里的渲染底座,都是前几期写过的那一类)。533BACKERS.md 里留名;$25/月 进 capcut-cli-pro 私有仓库,拿到高级模板与字幕样式包、完整的 Claude 短视频管线、可直接跑的 compile 规格与提前构建,外加优先分诊;$100/月 是给最多 5 人的团队版,含一份书面的商用确认、README 上的 logo 与优先排期。作者给的用途说明是「资助换来更快的发版与对新版剪映 / CapCut 的当周支持」——它是资助,不是许可的替代品。334caption 走 Whisper、render 走 FFmpeg、translate 走你的 ANTHROPIC_API_KEY,这三样各按自己的许可与计费,跟这个项目无关。3
| 方案 | 你给它什么 | 它给你什么 | 它在这一层 | 许可与公开体量 |
|---|---|---|---|---|
| 本期:capcut-cli | Node ≥ 18 和一份本机草稿库 | 一份还能在剪映里改的工程、JSON 读数、代理片 | 剪辑工程的读写层,不起服务 | MIT,709 star1 |
| pyJianYingDraft | 一个 Python 环境 | 用代码拼出来的剪映草稿 | 同一层的库版本 | Apache-2.0,4,421 star11 |
| capcut-mate | 一台常驻的机器、接进扣子或 n8n | REST 接口管草稿、云渲染 | 同一层的服务端版本 | Apache-2.0,1,855 star12 |
| jianying-headless | macOS 26+ 与剪映 11.5.0 | 本机剪映引擎导出的 MP4 | 同一层,只走 macOS 那条窄路 | 许可未被 GitHub 识别,2,479 star13 |
| FableCut | 一个浏览器 | 一条 JSON 时间线和 MCP / REST 入口 | 自带编辑器的浏览器端 | MIT,690 star6 |
| kinocut | FFmpeg 和 Python 环境 | 196 个 MCP 工具与一张渲染回执 | FFmpeg 的执行与验证层 | Apache-2.0,166 star5 |
| FireRed-OpenStoryline | 一份 config.toml 和几个模型 key | 18 个工具节点串起的成片产线 | 自带 Agent 的成片流水线 | Apache-2.0,3,434 star7 |
| video-use | 一堆原始素材和转写额度 | 读着词级转写稿剪出的 final.mp4 | 装进编码 Agent 的剪辑技能包 | MIT,26,475 star8 |
| Nomi | 一台机器和外部模型来源 | 一份本地工程:画布、分镜、时间线、MP4 | 本机工作台,自带编辑器 | AGPL-3.0,522 star10 |
| Comfy MCP | 一个 Comfy 账号,或一台跑着 ComfyUI 的机器 | Agent 自己建图、跑渲染、批量出素材 | 生成引擎的 Agent 接口 | AGPL-3.0-or-later 或商用许可,233 star9 |
| HyperFrames | HTML 和组件代码 | 浏览器里的渲染底座 | 渲染底座 | Apache-2.0,52,664 star33 |
| hypit | 一份需求描述 | 一条从脚本到成片的流程 | 编排层 | 自订许可,15,389 star36 |
caption、import-srt、export-srt、translate、cut、detect-silence 这些命令就是为这类活准备的。3github.com
github.com
github.com
npmjs.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
skills.sh
github.com
github.com
github.com
pypi.org
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.