FableCut: 面向 AI Agent 的零依赖浏览器视频编辑器

FableCut: 面向 AI Agent 的零依赖浏览器视频编辑器

FableCut 通过将项目文件作为主要接口来实现 AI 驱动的视频编辑

FableCut 是一款 Premiere 风格的非线性视频编辑器,完全在浏览器中运行,且没有任何 npm 依赖。与传统的将编辑逻辑隐藏在 API 后面的 AI 视频工具不同,FableCut 将其整个时间轴——包括媒体、剪辑、轨道、效果、关键帧和过渡——作为一个单一的 project.json 文档公开。这种架构允许任何能够编写 JSON 的进程进行视频编辑,同时浏览器 UI 通过服务器发送事件 (SSE) 在约 150ms 内热重载更改。

AI Agent 集成与控制界面

AI agent 可以通过遵循项目 CLAUDE.md 文件中提供的 schema 和配方来端到端地操作 FableCut。系统为 agent 提供三种主要的交互方式:

Model Context Protocol (MCP)

对于 Claude Code 或 Claude Desktop 的用户,FableCut 包含一个零依赖的 MCP 服务器。该接口旨在提高 token 效率,允许 agent 使用小型操作 (fablecut_patch_project) 来修补时间轴,而不是重写整个文档。Agent 还可以根据需要获取项目的紧凑摘要或特定文档章节。

直接文件操作

Agent 可以读取 project.json,修改内容,并增加 revision 计数器。由于 UI 会实时重载,这些更改会立即出现在编辑器中。

REST API

FableCut 提供 REST API 用于程序化控制,其功能包括项目管理 (GET/PUT /api/project)、媒体上传 (POST /api/upload) 和资产库 (GET /api/library) 的端点。

核心编辑与动态功能

FableCut 为手动和 agentic 编辑提供了一套专业的特性集:

  • 时间轴管理: 支持 4 个视频轨道和 3 个音频轨道,具备拖拽、修剪、分割和吸附功能。它包含用于多选的橡胶带选框以及用于节奏编辑的节拍/标记点。
  • 视觉效果: 包括 12 种滤镜预设、用于全局调色的调整层,以及对亮度、对比度、饱和度、色调、色温、色调、模糊和胶片颗粒的完整控制。
  • 高级合成: 具备带溢色抑制的色度键 (绿幕) 功能,以及通过 MediaPipe 实现的 AI 驱动背景移除。
  • 动态与过渡: 支持 25 种属性的关键帧动画(带缓动效果),能够同时对视频和音频进行时间重映射的变速功能,以及 17 种不同的过渡效果(包括 glitch 和 whip-pan 效果)。
  • 排版: 提供动态字幕(打字机、卡拉 OK 等)并带有霓虹发光效果,并支持通过名称自动加载任何 Google Font。
  • SVG 叠加层: 支持 CSS 动画 SVG 的帧准确渲染,允许 agent 编写如底栏或纸屑等矢量叠加层,并将其保存为纯 .svg 文件。

参考视频分析与重制

FableCut 包含一个专门的工具 (analyze.js),可以从参考视频中提取“编辑蓝图”。该蓝图包括镜头边界、音乐节拍、BPM、响度曲线和每个镜头的能量水平。AI agent 可以使用 fablecut_analyze_reference MCP 工具来分析参考视频,然后使用用户自己的素材重新构建相同的结构。

技术架构与并发编辑

FableCut 是作为一个单页应用构建的,并带有 Node.js 后端 (server.js)。它使用基于 Chromium 的浏览器进行渲染,并可选择使用 ffmpeg 进行快速、帧准确的 MP4 导出。

为了防止并发编辑期间的数据丢失,FableCut 实现了 revision 计数器。如果人类编辑者在 UI 中进行更改时,AI agent 正在修改项目,系统会检测到冲突。REST API 会返回 409 错误,并且 UI 会通过 toast 通知用户,而不是静默地覆盖更改。

社区洞察

Hacker News 上的用户强调了使用 JSON 和 SSE 相比于传统 API 在 agent 交互方面的效率。一些贡献者建议为未来版本进行进一步改进,例如:

"I was hoping to see some very clever use of vision and maybe waveform analysis to give the model 'eyes and ears' to edit audio and video."

其他用户指出,基于 JSON 的方法为模块化模板和 agentic 演示视频旁白提供了机会。

Sources