FableCut:整条时间线就是一个 JSON 文件,Agent 改得动,按导出的还是你

FableCut:整条时间线就是一个 JSON 文件,Agent 改得动,按导出的还是你

今天拆的是 FableCut:把一整条时间线写成一份 JSON 文件、让编码 Agent 直接改、你在浏览器里实时看着它重排的剪辑器。文章给全它在链条上的位置、三条上手入口、五处已知阻塞,以及今天该不该动手的判断。

今天这一个叫 FableCut,挂在 GitHub 的 ronak-create 账号下,作者是 Ronak Parmar,MIT 许可1。它是一只跑在浏览器里的非线性剪辑器,整条时间线写在一个叫 project.json 的文件里:Agent 改这个文件,你开着的那扇编辑器窗口就跟着刷新,项目自己报的时间是约 150 毫秒2
它在 2026 年 7 月 9 日以 Show HN 的形式发出,当时拿到 98 分3。截至今早,仓库首页显示 675 star、71 fork、260 次提交、7 位贡献者,创建于 7 月 6 日,主分支最后一次推送在 9 月 17 日;issue 开着 7 条,pull request 开着 2 条14
前 4 期讲的是镜头卡(video-shotcraft)、产线编排(OpenMontage)、剪辑手艺(video-use)和贴着 FFmpeg 的执行层(kinocut)。FableCut 站在这四样的上一层:它就是那台剪辑器本身,只是它的时间线被写成了一份任何程序都能读写的文档。

一条时间线就是一个文件

project.json 里装着一次剪辑的全部内容:画布尺寸与帧率、轨道清单、每条素材、每个片段的入点与时长、每个属性的关键帧曲线、片段头尾的转场、标题文字与它的动画、滤镜与调色、绿幕抠像与背景移除、导出用的裁剪框5。项目自己把这个文件称作接口,官网首页的说法是「凡能写 JSON 的东西都能剪视频」2
Agent 有三个等价入口,改的都是同一份文档:一个走 stdio 的 MCP 服务端、一套 REST 接口,以及直接改文件5。MCP 一侧一共 8 个工具:fablecut_status(顺手把编辑器进程拉起来)、fablecut_docsfablecut_get_projectfablecut_set_projectfablecut_patch_projectfablecut_import_mediafablecut_analyze_referencefablecut_encode_profiles6
其中两个是为省 token 设计的。fablecut_get_projectcompact:true 时每条片段压成一行,约为完整文档的十分之一;fablecut_patch_project 只发要变的那几笔,服务端自己重读一遍最新文档再合并,所以你刚在界面上拨过的滑块不会被它盖掉5
让这套设计自洽的是渲染这一侧。FableCut 只为导出写了一套合成器。编辑器里拖动播放头调用的是 drawFrame(t) 这个纯函数,给一个绝对时间就把整帧画出来,导出就是把同一个函数放进循环里跑7
维护者在 9 月 1 日回复一个「把 Rive 接进来做矢量动画」的提议时,把这条约束讲得最细。他的说法是:Rive 当前的 API 只能按帧推进,回答不了「跳到第 30 秒」这种随机访问;而导出必须能跳到任意时刻;一旦只能靠顺序推帧走到某个时间点,预览和导出画出来的东西就会分叉,两套渲染一致这条前提也就没了。回复里顺带交代,它自带的动画 SVG 是量化到帧之后再栅格化的,会缓存约 90 帧7
FableCut 编辑器界面,项目名 Aurora — Launch Teaser,中间是 Program Monitor 与音频表,下面是时间线:V4 放 sparkles、confetti、lower third 三个叠加层,V2 与 V3 各放一条文字,V1 是背景片,A1 与 A2 是同一条背景音乐拆开的左右两条链接音轨
仓库自带的 docs/screenshot.png,取自主分支,2026 年 9 月 19 日。中栏是节目监视器,右侧是检视面板,时间线上 V1 放背景片、V2 与 V3 各放一条文字、V4 放三个叠加 SVG;A1 与 A2 是导入视频后自动拆出来的左右声道链接音轨,这是 1.7.0 加入的行为。右上角那个 Export 按钮,就是 Agent 按不动的那一步。1

你要给什么,它交回什么

给它三样:Node.js 18 以上、一个 Chromium 系的浏览器,以及放进 ./media/ 的素材。ffmpeg 可选,装在 PATH 上更好——快导出和上传时的重封装都靠它28。它没有 npm 依赖,装完只有一条 node server.js,跑在 http://localhost:7777;1.3.1 版之后服务端只绑 127.0.0.1,要让局域网里别的机器访问得自己设环境变量1
拿回来的是:一条能被任何程序读写的时间线文档、一个跑在浏览器里的编辑器界面、8 个 MCP 工具、一套 REST 端点(项目读写、素材上传、URL 导入、资产库列举、参考片分析、导出,外加一条 SSE 变更流),以及一份可以自己改的导出预设表5。预设表里每一条就是一段原样的 ffmpeg 参数,加一个浏览器侧 JPEG 画质和一个输出扩展名,改完不用重启服务端9
资产库是现成的:25 个自带动画 SVG、5 个叠加元素、20 个 Google 字体(OFL 许可,说明在 library/fonts/LICENSES.md10。音效目录 library/sfx/ 里只有一份说明文件,项目写明音效站的素材通常不允许重新分发到公开仓库,所以留给你自己填;而 CLAUDE.md 的配方一章里已经写着「把 library/sfx 里的 impact-hit.mp3 放到 A2 轨」这样的做法,Agent 照着走会扑空510
分析这一路值得单说。给它一段你喜欢的参考片,它会切出镜头边界、找出音乐节拍与 BPM、算出响度曲线和每个镜头的能量、标出全片最强的那个 drop,并把参考片的音乐轨抽出来存进 ./media/,合成一份 edit blueprint5。这一步要 ffmpeg 在 PATH 上。它交回的是结构,配色、字幕、音效这些风格部分仍然归你。

从零到第一个成片

三条入口,挑一条走。
  1. 只想看看git clone https://github.com/ronak-create/FableCut.gitcd FableCutnode server.js,浏览器打开 http://localhost:77778
  2. 在 Claude Code 里用/plugin marketplace add ronak-create/FableCut,再 /plugin install fablecut@fablecut。插件会替你注册 MCP 服务端,并装上 edit-videoremake-reel 两个技能;它把时间线和素材放在插件自己的数据目录里,升级插件不会碰到你的片子211
  3. 别的 MCP 客户端claude mcp add -s user fablecut -- node "<路径>/mcp-server.js",服务端只讲 stdio,不认 Claude 专属的环境变量5
接上之后第一件事是让 Agent 调 fablecut_status:它会把编辑器拉起来,报出界面地址、当前项目摘要和 media/ 里有什么5。素材进门有三条路——拖进窗口、点界面上的 + URL(只收 https,会挡掉内网地址与远程 SVG),或者让 Agent 调 fablecut_import_media5
FableCut 官网首页,主标题 The browser video editor agents can drive,下面一行小字写着 Zero npm dependencies. One node server.js. MIT licensed.,页面下半是 Playground 与一个 project.json 编辑面板
官网首页,2026 年 9 月 19 日截取。下半那个 Playground 是给静态托管用的替身:docs/demo/static-shim.js 把编辑器原本要发给服务端的四个请求改成从内存里应答,所以它演示的是真的编辑器界面,导出和真实素材导入都不在那个页面里。想在本地跑完整功能,还是得 clone 下来开服务端。212
钱这一项是零:MIT 许可,没有账号、没有遥测、没有付费层,素材留在本地8。真实成本落在别处——一个 Chromium 浏览器、一块放得下素材和导出文件的磁盘、可选但推荐的 ffmpeg,以及最后一步需要有人在浏览器前面按键。

会卡住的地方

FableCut 的 issues 列表页,顶部 Open 9、Closed 68,列表里可见 #62、#77、#76、#74、#5、#3、#64、#2、#12
issues 列表,2026 年 9 月 19 日截取。Open 9、Closed 68。排在前面的四条里,两条是别人提的功能(Rive 渲染器、三点剪辑),#77 是那份还没合的导出重写,#76 是它要修的导出变慢。#5 从 7 月 9 日开到现在,是这一节里最老的一条。4

能改时间线的 Agent,按不下导出键

症状:Agent 把剪辑做完了,成片出不来;或者只出来一个用 ffmpeg 直接从原始素材拼的粗糙版本。
触发条件:你让 Agent 自己导出。
现状:项目的手册把这件事写在导出那一节里,原话是「Claude 无法无头触发导出——合成器在浏览器里」,紧接着给的办法是「让用户去点 Export,或者从 media/ 里的源文件用 ffmpeg 直接渲染一个文件」5。三套导出引擎都长在浏览器的合成器上:快导出由浏览器逐帧渲染、把 JPEG 和一段离线混音推给服务端的 ffmpeg 进程编码;WebCodecs 导出由浏览器硬件编出 H.264 码流、服务端只做复制与封装;两套都跑不了时退回 MediaRecorder 实时录屏5
你能怎么办:把「人在浏览器前面」当成这条流水线的一个工序来排,导出由你自己按;要全自动,就得绕开这套合成器、自己用 ffmpeg 从素材直接渲染,那样也放弃了文字动画、关键帧、抠像这些只有浏览器合成器画得出来的东西。

装到手上的版本,比 README 描述的老一截

症状:按 README 或官网的介绍去装,打开以后找不到那一项功能。
触发条件:用 v1.7.0 那一版的发布包来装。
现状:release 与 tag 都停在 v1.7.0,发布于 2026 年 8 月 24 日13;主分支在它之后走了 124 次提交,最后一次落在 9 月 17 日14。README 里当卖点写的 WebCodecs 导出、从 URL 导入素材、那套 node:test 测试,在 CHANGELOG 里都还挂在 [Unreleased] 下面15package.json 和仓库里的 server.json 都写 1.7.0,MCP 官方注册表上那一条还停在 1.6.01617。npm 上没有这个包,registry.npmjs.org/fablecut 返回 404。
FableCut 的 release 列表页,最新一条是 FableCut v1.7.0 — linked audio tracks, monitor zoom, project folders,右侧标着 Latest,正文写着 released this last month
release 列表,2026 年 9 月 19 日截取。最新一条是 v1.7.0(2026 年 8 月 24 日),右侧标着 Latest,正文写它是 20 个已合 pull request 攒出来的一版。主分支在它之后还有 124 次提交,README 主推的 WebCodecs 导出和 URL 导入就落在那 124 次里。1314
你能怎么办:要 README 里写的那一套就 clone 主分支;只用发布包的话,把 CHANGELOG 的 [Unreleased] 那一节当成「我手上还没有」的清单。这段落差来自 8 月底之后主分支上一直在动,属于版本节奏的问题。

它听得见,但看不见

症状:Agent 挑不准入点。它会切、会按节拍摆、会加字幕,但决定「从这一段的哪一秒开始」的时候,它在盲选。
触发条件:素材是实拍画面,入点得看着画面挑。
现状:issue #5 从 2026 年 7 月 9 日开到现在,标题就是「给 Agent 一双眼睛」18。它列出的最小一步是服务端加一个 GET /api/frame?src=…&t=… 端点,用 ffmpeg 抽一帧返回 JPEG,再用一个 MCP 工具包起来,让多模态 Agent 在定入点之前先看画面;issue 里估这一条大约是 30 行服务端代码加一个工具,写下的完成标准是「Agent 能对任意已登记素材的任意时间点请求一帧,并拿到一张可以拿来推理的图」18。已经有的那一半是耳朵:参考片分析能给出镜头边界、节拍、能量曲线和 drop 的位置5
你能怎么办:入点这活先由人给标记,或者在指令里把入点写死;也可以照那条 issue 自己补上抽帧端点,它要的正是 ffmpeg 抽一帧这一件事。

25fps 的素材放到 50fps 的时间线上导出,会明显变慢

症状:导出时间成倍拉长。
触发条件:时间线帧率是素材帧率的两倍,比如 25fps 的素材放上 50fps 的时间线。
现状:issue #76 在 2026 年 9 月 14 日提交,作者写的是「修 CodeRabbit 意见时引入的提交 2ed0ac79,在某些情况下强制对每一帧做硬寻址」,复现环境是 Windows 11、Edge、ffmpeg 9.0.119。修它的 PR #77 同一天提出,正文写着 WebCodecs 那条路整个重写,并标了关闭 issue #76,到今天还开在队列里没有合20。CHANGELOG 的 [Unreleased] 里已经记下这条修复:导出改成等 requestVideoFrameCallback 的 mediaTime、用 currentTime 寻址、卡顿时暂停,并说明早先那条 JPEG 管道本身就是逐帧对应的15
你能怎么办:把时间线帧率设成和主力素材一致;或者把 PR #77 里的改动拿来自己打补丁;或者等它合。

素材必须以同源路径进来

症状:素材地址填的是 https:// 直链,预览看着正常,导出时画布被污染,快导出和 WebCodecs 都编不出 JPEG。
触发条件:把远端地址直接写进 media.src,或者用别的方式让素材留在另一个源上。
现状:手册把这条写在导入那一节——media.src 只能是 /media/… 这样的同源路径,直链会让画布过不了 CORS 检查,两个导出引擎都编不出帧;远端地址要走 POST /api/import-url 先下载到本地,那个端点只收 https,并且挡掉 localhost、私有网段、链路本地和 CGNAT 地址,连跳转过去的情况也挡,远程 SVG 同样被拒5。同一个端点旁边还有一处坑:用外部工具直接拷进 ./media/ 的 mp4 跳过了 +faststart 重封装,播放会卡住,得自己先跑一遍 ffmpeg -c copy -movflags +faststart5
你能怎么办:素材一律经 fablecut_import_media 或界面上的 + URL 进来;自己拷进去的 mp4 先重封装一次。

许可与真实成本

许可是 MIT,版权人是 ronak-create,年份写的 2026,个人和商用都免费1。仓库自带的 20 个字体是 OFL 许可,各家的说明收在 library/fonts/LICENSES.md10。音效是唯一要你自备的一类素材,理由写在 library/sfx/README.md:音效站通常不允许把文件重新分发到公开仓库10
软件本身不收费。没有账号、没有 API key、没有按次或按量的计费闸门,也没有遥测,素材不上传8。价格因此落在四样东西上:一台装得下 Node 18 的机器、一个 Chromium 浏览器、素材与导出文件占的磁盘,以及导出时需要有个人在浏览器前面。ffmpeg 是可选件,不装也不会报错——快导出与 WebCodecs 那两条路都需要它,两条都走不了时浏览器会退回实时录制,画质与所花的时间另算5
把素材留在本机是它的默认做法:服务端只绑 127.0.0.1,素材不进任何云端,参考片分析用的 ffmpeg 也在你这台机器上跑。会另外产生费用的,是你自己接上去的模型服务8

和已经在用的五套方案放在一起

方案你给它什么它给你什么它在这一层许可与公开体量
FableCut(本期)Node 18 以上、一个 Chromium 浏览器、放进 ./media/ 的素材浏览器里的编辑器加一条 JSON 时间线,MCP/REST/文件三种改法;导出要你自己按键剪辑器本体:项目文件即接口,渲染器就是浏览器里的合成器MIT;675 star、71 fork、260 次提交1
kinocut(第 4 期)一个本地媒体文件,加 PATH 上的 FFmpeg有类型的工具调用和一张回执:成片、每步的哈希、质量分、待人工确认项Agent 与 FFmpeg 之间的执行与验证层Apache-2.0;157 star、39 fork21
video-use(第 3 期)一个装原始素材的文件夹,加一把 ElevenLabs key按词边界剪出的成片,连转写稿、剪辑决定和字幕一起交回方法论与资产层里的剪辑手艺MIT;25,096 star、3,051 fork22
video-shotcraft(第 1 期)一句需求,加你产品的截图一支还能继续改的 Remotion 宣传片工程站在 Remotion 之上的镜头与动效资产库Apache-2.0;8,948 star、802 fork23
OpenMontage(第 2 期)一句需求,加你的素材走完工序的成片,带审批门、决策日志和预算上限流程与方法层,安排哪个阶段谁做什么AGPL-3.0;59,936 star、7,570 fork24
HyperFrames用 HTML、CSS 和 JavaScript 写的合成确定性渲染出的 MP4渲染底座;kinocut 可以把 HyperFrames 当可选后端调起来Apache-2.0;51,368 star、4,678 fork25
hypit一支参考视频,或者一句描述一套以词为锚点的工作流,换宿主、换语言、换比例都能重跑视频工作流的描述语言自订许可;10,050 star、1,235 fork26
这六样各站一段,能叠着用。FableCut 是里面唯一一只你能用鼠标直接改的编辑器:Agent 改它的文档,你改它的界面,两边打在同一份文件上;往下,kinocut 那类东西把 FFmpeg 包成有类型的工具;再往下是 HyperFrames 这一层管确定性渲染;往上,OpenMontage 那类编排器排流程、定预算;素材进来之后怎么下刀归 video-use 那种手艺;hypit 那门语言管的是换一台机器之后还能不能重跑21222426
和上一期的 kinocut 摆在一起看,分野在人来不来这件事上。kinocut 的设计里,人在三个位置出现——钩子、缩略图、最终复核;FableCut 的设计里,人从头到尾都可能在场,因为编辑器就在浏览器里开着,Agent 每写一次文件,你眼前的时间线就动一次5

今天装还是不装

今天就该动手的:你在用编码 Agent 改视频,但手上没有一台能让它直接改的时间线,每次都要它猜参数;或者你本来就在用浏览器剪东西,想让它把重复的部分接过去。第一步不花什么力气:clone 下来 node server.js,打开 http://localhost:7777,把三五个素材拖进去,再让 Agent 调一次 fablecut_status。走通了之后,先拿前面那条参考片分析练手——给它一段你喜欢的成片,看它切出来的镜头边界和节拍跟你眼睛看到的是不是一回事,这一步不用写一行代码。
先收藏的:你的流程要求无人值守——Agent 改完自动出片、自动发走,那它最后那一步会把你拦住,等你在浏览器前面按下 Export。你主力素材的帧率和时间线对不上,导出变慢那条还在队列里。你用的是真实拍摄的素材,靠 Agent 自己挑入点,那它现在挑不了,得等你先给标记。你要求装到手上的版本和文档严格对得上,那 clone 主分支,别用发布包。
可以跳过的:你要的是从一句话生成画面。FableCut 处理的是你手上已经有的素材,画面本身它不生产。你要的是一条把素材送进云端的流水线,它按设计只绑在本机 127.0.0.1。你要的是一套能嵌进自己服务的渲染后端,那往下走一层,kinocut 那一类的工具接口更合适;FableCut 的价值长在浏览器这个界面上,把界面拿掉,它剩下的东西和你自己写一段 ffmpeg 脚本的距离就会缩短。

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content