关于 FableCut
FableCut 是面向用户和 AI Agent 的浏览器非线性视频编辑器,时间线以可编辑的 JSON 表示。界面会实时更新,用户可与 Agent 协作编辑,并通过撤销和版本记录管理修改。
主要功能
- 01基于 JSON 编辑项目和时间线
- 02浏览器实时预览、撤销与版本记录
- 03视频和音频轨道、转场与效果
- 04基于转录文本剪辑并生成字幕
- 05删除静音、节拍剪辑与重新构图
- 06通过 ffmpeg 导出
适用场景
- 01让 AI Agent 修改时间线并在浏览器中查看
- 02通过选择转录文本剪辑访谈视频
- 03为录音生成字幕或删除停顿
- 04将剪辑重新构图为竖屏或方形画面
MCP 相关
FableCut 通过 MCP 服务向 MCP 客户端开放时间线编辑和媒体操作,包括项目补丁、删除静音、重新构图、转录和字幕等操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
14收录的工具列表 · 更新于 1 天前
此工具无需参数。
详细介绍
FableCut 是一款 Premiere 风格的非线性视频编辑器,完全运行在浏览器中——并将整个时间轴作为一个 JSON 文档公开。你可以手动编辑、通过界面编辑,也可以让 AI Agent(Claude Code、Claude Desktop,或任何支持 MCP/REST 的工具)为你剪辑视频,同时实时观看时间轴更新。
零 npm 依赖。只需运行一个 node server.js。就这么简单。

赞助商
Sidrune AI — 一个 API 接入 GPT、Claude 和其他领先的 AI 模型。注册即可获得 3 美元的 API 额度。
为什么有趣
大多数“AI 视频”工具都会把剪辑过程藏在 API 后面。FableCut 则反其道而行:项目文件就是界面。project.json 描述了媒体、剪辑片段、轨道、效果、关键帧和转场——任何能写入 JSON 的进程都能剪辑视频,而打开的浏览器 UI 会通过服务器发送事件在约 150 ms 内热重载。人和 Agent 可以同时在同一条时间线上协作。
撤销 Agent 做过的操作。 Agent 的每次编辑都会单独成为一个撤销步骤:按 Ctrl+Z 会先撤销 Agent 最近的一次修改(并明确提示),然后再撤销你自己的修改,因此两者不会混在一起。需要大幅回滚时,可以使用版本:Agent 开始编辑时会保留一个版本(工作期间最多每 10 分钟保留一次);重写整个项目之前、每次大型操作(剪掉静音、对齐节拍、重新取景)之前,以及你编辑期间每 10 分钟也会保留版本。你可以在版本面板中恢复某个版本,也可以向 Agent 发起请求(fablecut_versions),并在恢复前先比较任意版本与当前状态。
功能
剪辑
-
视频 + 音频轨道(默认各 3 条和 4 条;在轨道标题中点击 +V / +A 添加更多;右键点击空白标题 → Remove track),可拖动、修剪、拆分、吸附,并支持撤销/重做
-
Settings(顶部栏中的齿轮)——可选偏好设置,储存在此浏览器的
localStorage中。启用 Link timeline and Project bin selection 后,选择时间线片段会在 Project 中高亮其媒体;点击 Project 项目则会选中所有使用该媒体的时间线片段(默认关闭)。 -
视频 + 音频轨道(默认各 3 条和 4 条),可拖动、修剪、拆分、吸附,并支持撤销/重做
- 在轨道标题中点击 +V / +A 可添加视频或音频轨道(每种最多 16 条)
- 右键点击空白轨道标题 → Remove track(若轨道上有片段,或删除后视频/音频轨道将变为零条,则此选项不可用)
- 轨道标题中的 S 可独奏该轨道(静音其他所有轨道);再次点击可恢复之前的静音状态。独奏时使用静音切换按钮会退出独奏。
- 轨道目标选择——点击轨道名称可将其设为目标或取消设为目标(亮起 = 已设为目标)。拆分、插入、波纹编辑、关闭间隙和跳转到剪辑点只会作用于目标轨道;眼睛 / 扬声器切换按钮仅影响输出(在预览和导出中隐藏),不再阻止编辑。所选片段无论位于何处都会被编辑。
- 轨道锁定——使用轨道标题中的挂锁。锁定轨道上的内容无法移动、修剪、拆分或删除;波纹编辑时,该轨道上的内容会保持原位,而其他轨道会移动。锁定音乐底轨后,即可自由重剪画面。
-
锁定、禁用和取消链接片段——右键点击片段(或使用检查器顶部的切换按钮):Lock 会像锁定轨道一样固定片段;Disable(⇧E)会让片段保留在时间线上,但在预览和导出中隐藏;Unlink(Ctrl/Cmd+L)会将视频与音频拆开,使它们可以分别移动;再次对齐后可用 Link 重新链接。Agent 也会识别锁定状态:除非操作中指定
force: true,否则fablecut_patch_project不会编辑锁定的片段。- 如果放入的视频音频声道数多于 A 轨道数,会自动添加缺少的轨道(最多 16 条),并提示添加的数量;每个声道都会作为独立的链接音轨放在各自的 A 轨道上
-
在监视器上直接操作——点击预览中的片段或标题,即可直接移动、调整大小(拖动角部控点)或旋转(拖动顶部控点,按住 Shift 可吸附)
-
时间线多选——拖动空白轨道区域可框选;按 Ctrl/Cmd/Shift+click 可添加或移除片段;按 Ctrl+A 全选,按 Esc 取消选择。拖动任一已选片段可移动整组;按 Delete 可删除所有已选片段;按 S 可在播放头位置拆分所有已选片段。检查器会显示“已选择 N 个片段”横幅。
-
节拍和提示标记(播放时跟着节拍按 m)——可为标记命名和设置颜色,在标尺上拖动标记,通过 ⇧m / Alt+⇧m 或 Markers 列表跳转;可通过 Snap 旁的 ▾ 选择吸附目标(片段边缘、播放头、标记、入点/出点、关键帧、帧网格)
-
按 Alt+t 可根据播放头在所选片段上的位置添加入场/出场转场。最近使用的转场会记为默认转场;拖动叠加的三角形可调整时长;按 Delete 可清除当前聚焦的转场。
-
片段上显示经过解码的真实音频波形
-
Mixer——检查器旁的 Mixer 标签页为每条音频轨道提供一个通道条(推子、声像、静音、独奏、音量表),并提供带实时 LUFS 读数的主推子。预览和导出使用相同的混音,因此听到的效果就是最终渲染的效果。
-
片段增益、声道和 Normalize——每个音频片段都有 Gain(dB,在音量和关键帧之前应用)、Channels 模式(立体声、单声道、左声道、右声道、交换)和 Normalize:测量所选片段的响度(ITU-R BS.1770 响度或采样峰值),并设置增益,使其达到 −14 / −16 / −23 LUFS 或 −1 dBFS。链接音轨共用一个增益,让立体声对保持平衡。
-
音量线、淡入淡出和交叉淡化——每个音频片段都以一条可拖动的线显示音量;按住 Ctrl/Cmd 并点击可添加关键帧,按住 Alt 并点击可移除关键帧。拖动角部控点可调整淡入和淡出,并以真实曲线(等功率、等增益或指数)绘制。按 Shift+D 可对所选片段旁的剪辑点进行交叉淡化,从两侧借用多余媒体,不会移动其他内容。
-
自动闪避——选择音乐、指定对白轨道和闪避幅度后,音乐会在有人说话时自动降低音量(说话前逐渐降低,结束后再逐渐恢复)。闪避效果叠加在音乐自身音量之上,因此重复运行或清除闪避都不会影响原有音量。Agent 可使用
fablecut_auto_duck。 -
音频效果和预设——均衡器、高/低通滤波器、压缩器、限制器、噪声门、延迟、混响、失真、立体声宽度和音高偏移;可按片段、轨道(Mixer → FX)、总线及主混音串联使用。预设包括:清晰人声、播客、广播、低沉人声、电话音效、电影感、宽广和闷音,之后都可调整。预览和导出使用相同的效果。Agent 可使用
setFx补丁操作。 -
效果自动化——效果设置旁的 ◆ 可在播放头位置设置关键帧,类似片段关键帧:让滤波器逐渐变化至高潮,或在结尾增强混响。Agent 可使用
setFxKeys。 -
子混音总线——点击 Mixer 中的 + Bus 可添加总线,配有独立效果、推子、声像、静音和音量表;可通过每条轨道名称下方的菜单将轨道路由到总线(例如,让所有对白共用一个压缩器和一个推子)。
-
降噪——检查器中的 Noise 控件(轻度 / 中度 / 强力)会测量文件的噪声底,并使用 ffmpeg 渲染清理后的副本;片段音频会切换为处理后的版本,选择 Off 可切回原音频。Agent 可使用
fablecut_denoise。 -
重新构图——创建 9:16、1:1 或 4:5 的剪辑副本,让镜头跟随主体:虚拟摄像机会在每个镜头中跟随重要对象移动,并生成仍可编辑的常规位置关键帧。可在 New sequence… 中或检查器的 Reframe 区域中使用;Agent 可使用
fablecut_reframe。 -
精彩片段——将长素材中表现最佳的片段(动作、声音、清晰画面)按故事顺序剪辑成新序列中的短片,且不会跨越剪辑点。可从序列菜单中选择 Highlights…;Agent 可使用
fablecut_highlights。 -
删除静音——使用检查器中的 Silence 区域(或右键 → Find silences)分析一段录音,并在时间线上标记每处停顿;点击 Cut 即可通过一次撤销操作删除所有停顿,同时保留每句话两侧少量静音,避免截断语句。Agent 可使用
fablecut_silence。 -
节拍——检查器中的 Beats 区域可分析音乐片段的速度、稳定节拍网格和高潮,并在时间线上显示节拍。可标记节拍、将所有剪辑点吸附到最近的节拍,或重新剪辑轨道,让每个镜头持续 1、2、4、8 或 16 拍。Agent 可使用
fablecut_beats。 -
转录和基于文本的编辑——Transcript 标签页可在浏览器中将语音转换为带时间戳的文字(使用 Whisper;模型只需下载一次,音频不会离开你的设备)。点击某个词可跳转至对应位置,选择词语后按 Delete 可剪掉它们,也可以搜索短语并剪掉每次出现的位置。Agent 可使用
fablecut_transcribe阅读访谈、查找某句话并剪辑。 -
字幕——一键即可从转录稿生成逐词定时的字幕:普通字幕、卡拉 OK 字幕、高亮词语或醒目弹出的大字,并自动适配画布大小。支持导出或导入 SRT 和 WebVTT。Agent 可使用
fablecut_captions。 -
Project bin 文件夹——树状视图,支持展开/折叠;拖动媒体或文件夹可嵌套;右键点击 Project 标签页 → New folder;将文件拖到文件夹上可导入其中
-
媒体管理——显示每个文件的帧率、编解码器、音频声道和大小(ffprobe);可按名称、编解码器、分辨率或
#tag搜索;按收藏、已使用/未使用、类型、标签或集合筛选;按任意详情或使用次数排序;提供带元数据列的列表视图;支持收藏、标签和集合;提供 Find timeline instances 和 Reveal in project;离线文件会显示“Media offline”画面,并支持 Relink…(按名称和大小查找已移动的文件)和 Replace file… -
项目——展示所有项目的仪表板,包含图片、备注和标签;可打开、从画布或已保存的项目模板创建、复制、重命名、归档和删除项目,也可导入旧项目文件;媒体共享,因此复制项目不会占用额外素材
-
序列——一个项目中可有多条时间线(16:9 和 9:16 版本、精简版、备选版本),共享媒体和合成内容,但各自拥有画布、帧率、混音和交付设置;可通过时间线工具栏左侧的菜单切换
-
版本——非破坏性历史记录:保存版本(Ctrl/Cmd+S),每 10 分钟自动保存版本,并在 Agent 编辑前保存版本;可将某个版本与当前状态比较并恢复(恢复前会先将当前状态保存为版本),也可标记最终剪辑;备份包含所有版本,启动时会恢复无法读取的
project.json -
代理文件——在后台(使用 ffmpeg)生成轻量、帧精确的 H.264 副本,用于 4K / HEVC / ProRes 素材;使用监视器中的 Proxy 按钮通过代理文件进行编辑,导出始终使用原始文件渲染
-
从 URL 导入——+ URL 会将 HTTPS 视频/音频/图片下载到
./media/(导入后使用同源资源)。不允许使用远程 SVG。Agent 可通过https://路径调用fablecut_import_media。URL 不会保存为media.src,因为这会污染画布并导致导出失败。 -
音频保持——时间线工具栏中的切换按钮:暂停时循环播放播放头处的一帧音频(适用于逐帧移动)。拖动或逐帧移动会重新定位保持的音频片段;音量表会保持实时更新。点击 Play / Pause 可关闭此功能。
-
画布宽高比预设(16:9、9:16 短视频、4:5、1:1)+ 项目 FPS 选择(24 / 25 / 30 / 50 / 60;非预设帧率显示为 Custom)+ 安全区域参考线
-
导出帧 / 重新构图——合成画布可以大于交付裁切画面(
project.json中的exportFrame)。预览会将画面外区域调暗;拖动 Export frame 控点可重新构图(例如将 16:9 画布调整为 9:16 导出)。快速导出会裁切至该画面;设置导出帧时,将禁用 WebCodecs 和 Realtime 导出 -
节目监视器缩放——在预览上滚动鼠标滚轮,可朝光标所在位置缩放合成画面(从适应窗口到每个画布像素占用 2 个屏幕像素)。放大视图使用原生滚动条,确保可访问溢出区域;点击鼠标中键或按住 Alt 拖动可平移。放大时会显示 Fit 按钮,点击即可重置为适应舞台的基准视图
-
完整的 J/K/L 播放速度控制——L 正向播放,J 反向播放;再次按下可切换为 1.5×/2×/4×,按另一个键可反转方向,按 K 停止。按住 K 再按 J/L 可逐帧移动;同时按住两者可按 ¼ 倍速缓慢播放。仅影响预览,不影响导出
-
输入时间码——点击播放头读数(或直接输入数字)即可跳转:
01:15:00、1500、+30、12.5;也可在入点/出点读数中输入时间 -
可调整大小的工作区:拖动监视器与时间线之间的分隔线(双击可重置),并提供 S/M/L 时间线轨道密度预设(S 会隐藏缩略图,使轨道更紧凑)
-
缩放至所选内容(⇧Z)会显示所有已选片段,而不只是一个片段
-
IN/OUT 工作区间——使用 i 和 o 设置标记(使用 ⇧I / ⇧O 清除)。节目监视器会以
当前位置 / 序列时长的格式显示播放头位置;设置标记后,右侧会依次显示 IN、标记区间时长和 OUT。Export 提供 Range 下拉菜单(整个时间线 / IN–OUT;存在标记时默认选中 IN–OUT),因此你可以保留标记以便拆分/修剪,同时导出完整序列。启用 Limit 后,播放会限制在标记区间内,Home / End 会分别跳转至 IN 和 OUT,而不是整个时间线的起止位置。按 t 可在标记处拆分片段;按 ⇧t 可将片段修剪至工作区间(入点标记和出点标记之间)。 -
查找并关闭间隙——间隙指所有目标轨道都为空(显示黑帧)的一段区域。按 g 可将播放头跳转至下一个共享间隙(循环跳转;仅在同时设置 IN/OUT 时遵循其范围)。按 ⇧G 可关闭播放头下方的间隙,将所有目标轨道上的后续片段向左移动(锁定的片段保持原位)。
-
修剪工具——使用时间线工具栏中的工具选择器(或按 V B R Y U)选择:Selection、Ripple edit(拖动片段边缘,后续内容会随之移动,因此不会产生间隙)、Rolling edit(拖动两个片段之间的剪辑点,不会移动其他内容)、Slip(更改片段显示的源素材部分,但不移动片段)和 Slide(移动片段,同时修剪相邻片段以腾出空间)。所有工具都会遵守源素材长度、目标轨道、锁定状态和链接音频,并在拖动时于指针旁显示偏移量。Agent 使用相同代码执行相同编辑操作——拆分、波纹删除、Lift / Extract、插入 / 覆盖、波纹 / 滚动 / Slip / Slide 和交叉淡化——这些操作均可作为
fablecut_patch_project操作使用。 -
Lift / Extract——按 ; 可从目标轨道中移除 IN→OUT 范围并保留间隙;按 ' 可移除该范围并关闭间隙。这两个操作也可通过时间线工具栏使用。
-
跳转到剪辑点——按 ↑ / ↓ 可将播放头移至上一个/下一个编辑点(片段入点或出点)。选中片段时,首次按键会先跳到该片段的起点,再跳到终点(Premiere 风格);未选中片段时,会在目标轨道的剪辑点之间移动。在源监视器中,这些按键可在 0、入点、出点和时长之间跳转。左/右方向键仍用于逐帧移动;Home/End 仍跳至序列起止位置(启用 Limit 时则跳至 IN/OUT)。
-
波纹删除——点击时间线中的 Ripple delete 按钮(或按 ⇧Del)可删除所选内容,并将每条目标轨道上的后续片段向左移动以关闭间隙;普通 Del 仍只会移除内容并留下间隙。链接的音视频配对片段始终会一起移动,即使它们位于非目标轨道上(同步锁);锁定的片段绝不会被删除或移动。
-
重置属性——按住 Ctrl/Cmd 并点击检查器中的标签或滑块,可将对应效果/属性恢复为默认值,并清除该通道上的所有关键帧(缩放 → 1、不透明度 → 1,裁剪等成对字段如 L/R 会一起重置;转场标签会清除入场/出场转场)。按住 Shift 并点击标签只影响播放头位置:如果播放头停在关键帧上,则只移除该关键帧;否则会将播放头处的值设为默认值(如果该通道已有动画,则自动创建关键帧)。
-
替换媒体——检查器中的 Source 按钮(适用于任意视频/音频/图片/svg 片段)可替换底层文件,同时保留位置、修剪、关键帧、转场和所有效果。可从素材箱中选择另一个项目,也可选择 Browse file…,一步完成导入和替换。视频关联的 L/R 音频片段也会一并替换;如果替换文件较短,会将修剪范围限制在文件长度内并提示已执行此操作。
-
多声道视频音频——音频声道数超过 2 个的视频会为每个声道创建一个链接音频片段,而不只是创建 L/R(5.1、7.1 等)。系统会按需自动创建额外音轨(A5、A6、……,最多 16 条);替换片段媒体时,会根据新源文件的声道数重新同步链接声道片段,并按需添加/删除额外声道和轨道。 Look
-
14 种一键滤镜预设(电影感、青橙色调、黑色电影、复古、赛博朋克、日落、午夜……)
-
调整图层 — 一个片段即可为其下方的所有内容调色,类似 Premiere
-
色彩工作区(顶部栏 → Color):在节目监视器旁实时显示波形图、RGB Parade、矢量示波器和直方图;Color 标签页可通过 GPU 为所选片段调色 — Lift / Gamma / Gain / Offset 色轮、曝光、使用拾色器的白平衡(点击白色物体)、黑色 / 阴影 / 中间调 / 高光 / 白色、带枢轴点的 Log 风格对比度、柔和滚降和饱和度,以及曲线 — 亮度和 R / G / B、色相 vs 色相、色相 vs 饱和度、色相 vs 亮度、饱和度 vs 亮度,并配有可从监视器标记颜色的拾色器;还有图层(二级调色):通过 HSL 限定器和/或椭圆、矩形、多边形、贝塞尔或手绘蒙版(可羽化、反转、添加关键帧,并可在监视器上拖动)限制调色范围,并提供遮罩视图。可在多个镜头间复制/粘贴调色。Agent 使用
setGrade补丁操作调色,并通过fablecut_scopes读取数值结果(电平、剪切、偏色) -
快速滤镜滑块:亮度/对比度/饱和度/色相、色温和色调、模糊、灰度/棕褐色/反相、暗角、动画胶片颗粒
-
17 种混合模式(滤色、正片叠底、叠加、颜色加深、排除、色相、亮度……)、适配模式(包含/覆盖/拉伸)、各边裁剪、圆角、水平/垂直翻转
-
蒙版 — 隔离片段(视频、图像、SVG、文本或调整图层)的任意部分:矩形、椭圆、贝塞尔钢笔和手绘形状;每个片段可有多个蒙版,并通过添加/减去/相交/差集进行组合;每个蒙版都可设置羽化、扩展、反转和不透明度,且都可添加关键帧(轮廓会变形)。可在监视器上绘制和编辑蒙版,并查看遮罩。Agent 使用
setMask补丁操作设置蒙版,并通过fablecut_scopes测量 -
形状和动态图形 — 形状图层可在组中包含矩形、椭圆、多边形、星形、线条和钢笔绘制的贝塞尔路径,并支持填充、描边、虚线和修剪路径绘制效果;支持空对象、父子关联,且每个片段都有锚点;所有数值都可添加关键帧,并可直接在监视器上编辑。Agent 使用
setShape和setParent补丁操作 -
运动路径、运动模糊和路径文字 — 在监视器上使用控制柄将片段的运动轨迹弯曲成曲线,让片段沿途旋转;通过设置快门角度为快速运动添加模糊(预览和导出均适用);还可沿直线、弧线、圆形或手绘路径排列标题。Agent 使用
setMotionPath和setTextPath补丁操作 -
合成 — 嵌套序列:只需制作一次下三分之一字幕、Logo 动效或场景,即可将其作为一个片段放置在任意位置,并像图像一样移动、添加蒙版、调色和混合,同时其中的视频和音频照常播放和导出。打开合成即可在时间线上编辑,也可对所选内容进行预合成。Agent 使用
addComp、inComp和precompose补丁操作 -
动画预设和模板 — 33 种可用于任意片段当前位置的现成入场、退场、强调和循环动画;还有模板(下三分之一字幕、Logo 动画、9:16 / 1:1 / 16:9 社交媒体布局),只需填入文本、颜色和 Logo,每个模板都会作为独立合成添加。可将自己的动画和合成保存到素材库,供所有项目使用。Agent 使用
applyPreset、addTemplate和setTemplate补丁操作 -
运动跟踪 — 在视频片段中跟踪一个点或一个区域(包括其缩放和旋转),然后让蒙版跟随它,或将标题、贴纸或任意片段固定到该对象上;结果为普通的可编辑关键帧。Agent 使用
fablecut_track -
轨道遮罩 — 使用上方轨道中的画面,根据 Alpha 或亮度(可反转)裁切片段:用视频填充文本、形状显露、纹理镂空。遮罩轨道会隐藏自身。Agent 使用
setMatte -
色度键(绿幕),支持调整容差/柔和度并抑制溢色
-
AI 背景移除(人物抠像,通过 MediaPipe 在浏览器中运行) 动态效果
-
为约 25 种属性设置关键帧动画,并支持缓动
-
片段上的关键帧标记 — 片段主体上的菱形标记表示每个唯一的关键帧时间(悬停提示会列出通道;多个关键帧时间相同时会显示计数徽标)。按 Ctrl/Cmd+← / Ctrl/Cmd+→ 可将播放头跳转到上一个 / 下一个关键帧(优先查找已选片段,否则查找播放头下方的片段)。检查器字段会显示播放头位置的插值结果;更改字段会更新当前关键帧,或者在该通道已有关键帧时插入一个新关键帧。在程序监视器中拖动片段(移动 / 缩放 / 旋转)也会以相同方式写入。◆ 按钮可在播放头位置添加关键帧,或移除当前停留位置的关键帧;✕ 可清除整个通道。当播放头位于所选片段之外时,关键帧字段和 ◆ 按钮会被禁用(显示最近边缘处的值)——只有播放头实际位于片段内时才会应用关键帧编辑;未添加动画的属性可在任意位置编辑
-
关键帧曲线图 — 在检查器中切换属性曲线,即可在程序监视器旁显示插值结果曲线图;点击曲线图可跳转
-
变速曲线 — 为
speed添加关键帧,渲染引擎会对视频和导出音频混音进行时间重映射(先快速播放、再慢动作的短视频效果) -
摄像机抖动和 RGB 分离 / 色差,两者均支持动画
-
17 种转场:淡入淡出、滑动、擦除(4 个方向)、缩放、虹膜、旋转、模糊、快速摇摄、故障、弹出
文本
- 标题样式 — 一键应用协调统一的风格(Impact、Elegant、Kinetic cut、Neon、Handwritten、Luxury 等);新标题会自动调整字体、位置和动画,而不是始终套用一种单调样式
- 动态字幕:打字机、逐词弹出、逐词滑入、卡拉 OK、逐字母弹出、波浪、弹跳、抖动、裁剪显现、缩放进入、字体切换(节奏感字体切换)、遮罩上升
- 霓虹辉光,打造 TikTok 字幕效果
- 字体编辑器:系统字体、拖入自定义字体(
library/fonts/),以及输入任意 Google Font 名称——自动加载 - 渐变填充、描边、背景胶囊、字间距、行高、字重、斜体、全大写、柔和阴影
- 文本布局 — 水平对齐:左对齐 / 居中 / 右对齐 / 两端对齐(在单词之间增加空格)。拖动标题的角点控制柄可创建文本框(
boxW/boxH);继续拖动角点可调整其大小(对角保持固定;Ctrl/Cmd 从中心调整大小;Shift 锁定宽高比)。默认情况下,文本会在文本框内按固定字号自动换行;启用缩放以适应可缩小字体,使整个文本块适合文本框。垂直对齐(顶部 / 居中 / 底部)可设置文本块在文本框内的垂直位置。将 Box W/H 设为0可恢复为贴合内容的尺寸。
动画 SVG 片段
- 一等公民的
svg片段类型:CSS@keyframes动画 SVG 可在预览和导出时实现逐帧精确渲染(合成器可将动画冻结在任意时刻)。Agent 可以使用纯.svg文件制作自己的矢量叠加效果——字幕条、彩纸、闪光效果等。附带入门示例。
重制参考视频
- 提供一个参考剪辑(例如你喜欢的短视频),即可获取一份剪辑蓝图:镜头边界、音乐节拍和 BPM、响度曲线、每个镜头的能量、高潮点——还会提取参考视频中的音乐曲目并放入媒体库,方便你用自己的素材重现相同创意。无需额外依赖(ffmpeg 负责解码;起音 / 节奏检测由纯 Node 实现)。
node analyze.js ref.mp4、POST /api/analyze或fablecut_analyze_referenceMCP 工具。
查看素材
- Agent(或你自己,通过 REST)可以获取任意时刻的实际图像:
GET /api/frame?src=/media/x.mp4&t=3.2会返回该帧的 JPEG,而&frames=12会返回覆盖整个片段的 4×3 缩略图集——快速浏览 一段 3 分钟素材中的所有内容。抓取的帧会缓存在analysis/frames/中。 fablecut_frameMCP 工具封装了这一功能,并以内嵌方式返回图像,因此 多模态模型可以查看画面。传入time而非path,即可通过编辑器自身的合成器渲染 合成后的时间线——已调色、包含所有轨道,效果与导出结果完全一致——这样,“这个调色效果对吗?”和“我实际做出了什么?”就都有了直观的答案。- 配合上文的分析器,Agent 可以通过查看素材来挑选片段,而不是根据能量数值猜测。
素材库
library/文件夹会在 UI 中显示为选项卡:元素(叠加图稿)、 音效、SVG——将文件放入其中,已打开的编辑器会实时刷新
导出
- 交付预设:YouTube、YouTube Shorts、Instagram Reels、TikTok、X、 LinkedIn、Master、Broadcast(ProRes 422 HQ)、Web、Archive(无损 FFV1)和 Custom。每项设置都可调:分辨率和重新构图(裁切、适配或拉伸至其他画幅)、 帧率、编解码器(H.264、HEVC、AV1、VP9、ProRes、 DNxHR、XDCAM HD422、FFV1)和硬件编码器、CRF / VBR / CBR、最大码率、 关键帧间隔、像素格式、颜色、封装格式、音频编解码器、码率和采样率、 响度标准化(−14 / −16 / −23 / −24 LUFS,并设有真峰值上限)、文件名模板和元数据。保存自定义预设;渲染前,对话框会针对升频、裁切和平台限制发出警告, 并会读取并检查每个已完成的文件——大小、帧率、帧数、编解码器、时长、响度、真峰值和文件大小
- 批量导出:一个项目 → 多个文件(母版、YouTube 1080p、9:16 短片、方形视频、720p 预览……),按帧率和范围每种组合只渲染一次 (每次最多输出 8 个文件)——每帧只绘制一次,再由 ffmpeg 对每个输出进行 编码。批量输出会与项目一同保存;导出队列会依次运行这些任务,并显示进度,支持停止、 重试和打开
- 快速导出:浏览器渲染每一帧并混合离线音频;ffmpeg
使用交付预设或来自
encoding-profiles.json的原始编码配置 进行编码(切换选项卡后仍会继续渲染)。编码和上传会与合成器并行进行,因此快速时间线不会被toBlob阻塞 - WebCodecs 导出:浏览器以硬件编码方式生成 Annex-B H.264;服务端 直接流复制并复用音频。上传速度更快;可在“导出”对话框中设置码率/VBR-CBR。设置了导出帧时不可用(请使用快速导出)
- 如果 ffmpeg 或 WebCodecs 不可用,则回退到实时 MediaRecorder
- Agent 也可以导出:
fablecut_export会在已打开的编辑器中运行快速导出, 或由服务端在无头 Chrome / Edge 中启动,并返回文件路径;preset和delivery用于选择和调整交付预设;outputs可一次生成 多个文件 - 导出范围下拉菜单:整个时间线或 IN–OUT(设置标记后默认为 IN–OUT)。
实际 IN/OUT 导出边界会限制在
projDur()范围内。
快速开始
npx -y fablecut # → http://localhost:7777
你的项目、媒体和导出文件会存放在 ~/FableCut。也可以从克隆的仓库运行:
git clone https://github.com/ronak-create/FableCut.git
cd FableCut
node server.js # → http://localhost:7777
要求:Node 18+ 和基于 Chromium 的浏览器。ffmpeg 在 PATH 中并非必需,但建议安装(可加快导出并进行上传重封装)。AI 背景移除功能会在首次使用时从 CDN 获取模型。
服务器仅绑定到 127.0.0.1(v1.3.1+)。若要从局域网中的其他设备使用,请明确选择加入:HOST=0.0.0.0 FABLECUT_ALLOWED_HOSTS=<your-ip> node server.js。
将媒体拖入窗口(或放入 ./media/),通过 + URL 粘贴 HTTPS URL,将片段拖到时间线上,编辑并导出。
若要将工作内容保存在仓库之外,请设置 FABLECUT_DATA_DIR — 它会将 project.json、media/、exports/、analysis/ 和 library/ 移到你选择的目录。若不设置,所有内容都会像之前一样保留在仓库中。
或将其安装为 Claude Code 插件
/plugin marketplace add ronak-create/FableCut
/plugin install fablecut@fablecut
它会为你注册 MCP 服务,并添加三个技能 — edit-video、remake-reel 和 motion-graphics。你的时间线和素材会存放在插件自己的数据目录中,因此更新不会触及它们。你的计算机上仍需安装 Node 18+,以及(可选的)ffmpeg。
使用 AI Agent 操控
Agent 所需的一切都在 CLAUDE.md 中 — 包含完整的架构、语义和操作方法。将该文件提供给任何能力足够的模型,它就能端到端地操作编辑器。
📖 可浏览的文档: 同一份手册以网页形式提供,每个主题一页(MCP 工具、
project.json架构、片段属性、操作方法、REST API、导出):fablecut.space/docs。
三种等效的控制方式:
-
MCP(最适合 Claude Code / Claude Desktop)— 注册一次随附的零依赖 MCP 服务:
claude mcp add -s user fablecut -- npx -y fablecut mcp
无需克隆仓库或指定路径;你的工作内容存放在 ~/FableCut。若从克隆的仓库运行,请改为指向该文件:
claude mcp add -s user fablecut -- node "<path-to>/fablecut/mcp-server.js"
OpenCode 可通过项目级或全局 opencode.json 配置使用同一个 stdio 服务:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"fablecut": {
"type": "local",
"command": ["node", "/absolute/path/to/FableCut/mcp-server.js"],
"enabled": true
}
}
}
对于其他 MCP 客户端,请使用此等效命令注册本地 stdio 服务。确切的键名因客户端而异,但命令和参数不变:
{
"name": "fablecut",
"transport": "stdio",
"command": "npx",
"args": ["-y", "fablecut", "mcp"]
}
(从克隆的仓库运行时:"command": "node","args": ["/absolute/path/to/FableCut/mcp-server.js"]。)
该服务特意设计为不依赖特定客户端。它通过 stdio 使用 MCP 通信,无需 Claude 专属环境变量。从克隆的仓库运行时,请使用绝对路径。无论采用哪种方式,都需要 Node 18 或更高版本。
工具:fablecut_status(自动启动编辑器)、fablecut_docs、fablecut_get_project、fablecut_set_project、fablecut_patch_project、fablecut_import_media、fablecut_analyze_reference、fablecut_frame、fablecut_encode_profiles、fablecut_normalize_audio、fablecut_auto_duck、fablecut_denoise、fablecut_silence、fablecut_beats、fablecut_reframe、fablecut_highlights、fablecut_transcribe、fablecut_captions、fablecut_export、fablecut_scopes、fablecut_track。
FableCut 也已发布到 官方 MCP 注册表,名称为
io.github.ronak-create/fablecut
— 每个版本都会附带一个 MCPB 捆绑包(fablecut.mcpb),支持 MCPB 的客户端可直接安装。
该接口经过专门设计,能节省 Token:Agent 使用小型操作(fablecut_patch_project)修改时间线,而不是来回传输整个文档;读取每个片段占一行的精简摘要
(fablecut_get_project {compact:true});并且只获取所需的手册章节(fablecut_docs {section:"props"})。
2. 文件 — 读取 project.json、修改内容、递增 revision 并写入。UI 会实时重新加载。
3. REST — GET/PUT /api/project、POST /api/upload、POST /api/import-url、
GET /api/library、GET /api/export/profiles、/api/events 上的 SSE。完整列表见
CLAUDE.md。
示例:让 Claude Code “按照节拍标记剪辑这 6 个片段,添加青橙色调色,在上方添加逐字弹出的字幕,并在每个切点加上呼啸音效”——然后看着时间线自动重建。
也可以给它一个参考:“这是我喜欢的短视频——分析它,并用我的片段和同一首音乐重新制作。” Agent 会调用 fablecut_analyze_reference,获取蓝图(剪辑点、节拍、BPM、能量、高潮段落、提取的音乐),再用你的素材逐镜头重建结构。
Agent 不只能测量,还能观察。 fablecut_analyze_reference 给它耳朵——剪辑点在哪里、哪些镜头冲击力强。fablecut_frame 给它眼睛:请求任意片段的任意时刻({path, t:3.2}),调用就会返回模型可以查看的实际图像;也可以请求 12 帧的缩略图表,一次调用即可浏览整个片段({path, frames:12})。不传 path、只传 time,就会渲染合成后的时间线——包含调色和所有轨道,效果与导出时完全一致。这样就能通过观察素材来选择镜头,而非凭数字猜测;也能根据实际画面检查调色效果。
支持冲突安全的并发编辑:UI、MCP 工具和直接写入 project.json 都会共同维护一个 revision 计数器。如果你在 Agent 执行任务期间通过 UI 编辑了片段,Agent 的下一次写入就会被拒绝(REST API 返回 409,或 fablecut_set_project 返回冲突错误),而不会悄悄覆盖你的修改。UI 同样会检测 Agent 的写入是否覆盖了尚未保存的本地修改,并通过提示消息告知你,而不是悄悄丢弃修改。
项目布局
server.js zero-dependency HTTP server: static hosting, REST API, SSE,
ffmpeg export pipeline
app.js the editor: timeline UI, compositor, keyframes, text engine,
SVG rasterizer, chroma key, exporters
index.html single-page UI
style.css dark editor theme
mcp-server.js stdio MCP server exposing the editor to AI agents
analyze.js reference-video analyzer: shots, beats/BPM, energy, drop,
music extraction (module + CLI)
CLAUDE.md the agent manual (schema + recipes) — also served by fablecut_docs
encoding-profiles.json
Fast-export ffmpeg presets (hot-reloaded)
project.json your timeline (created on first run; gitignored)
media/ project footage (gitignored)
analysis/ cached edit blueprints from /api/analyze (gitignored)
library/ default assets: elements/ sfx/ svg/ fonts/
exports/ finished renders (gitignored)
架构概览
flowchart TD
subgraph group_interaction["Editing Experience"]
node_browser_ui["Browser Editor<br/>[app.js]"]
node_timeline_model["Timeline Model<br/>[app.js]"]
node_ruler_worker["Ruler Worker<br/>[ruler-worker.js]"]
end
subgraph group_project_media["Project And Media"]
node_project_store[("Project Store<br/>[paths.js]")]
node_media_store[("Media Store<br/>[paths.js]")]
node_asset_library[("Asset Library<br/>[server.js]")]
node_url_importer["URL Importer<br/>[import-url.js]"]
end
subgraph group_agent_api["Agent Control"]
node_rest_api["REST Server<br/>[server.js]"]
node_mcp_server["MCP Server<br/>[mcp-server.js]"]
node_sse_hub["Change Notifications<br/>[server.js]"]
end
subgraph group_playback_export["Playback And Export"]
node_compositor["Canvas Compositor<br/>[app.js]"]
node_audio_engine["Audio Engine<br/>[app.js]"]
node_audio_meter["Audio Meter<br/>[meter-worklet.js]"]
node_export_engine["Export Engine<br/>[server.js]"]
node_encoding_profiles["Encoding Profiles<br/>[encode-profiles.js]"]
end
subgraph group_analysis["Analysis Tools"]
node_reference_analyzer["Reference Analyzer<br/>[analyze.js]"]
end
node_human(("Human Editor"))
node_ai_agent(("AI Agent"))
node_ffmpeg["FFmpeg"]
node_human -->|"edits timeline"| node_browser_ui
node_ai_agent -->|"sends tools"| node_mcp_server
node_browser_ui -->|"updates project"| node_timeline_model
node_timeline_model -->|"persists JSON"| node_project_store
node_browser_ui -->|"calls REST"| node_rest_api
node_rest_api -->|"reads writes"| node_project_store
node_rest_api -->|"serves media"| node_media_store
node_rest_api -->|"lists assets"| node_asset_library
node_mcp_server -->|"checks server"| node_rest_api
node_mcp_server -->|"patches project"| node_project_store
node_mcp_server -->|"imports media"| node_url_importer
node_url_importer -->|"stores downloads"| node_media_store
node_rest_api -->|"downloads URLs"| node_url_importer
node_rest_api -->|"broadcasts changes"| node_sse_hub
node_sse_hub -->|"pushes changes"| node_browser_ui
node_timeline_model -->|"renders timeline"| node_compositor
node_timeline_model -->|"routes clips"| node_audio_engine
node_audio_engine -->|"measures audio"| node_audio_meter
node_browser_ui -->|"uploads frames"| node_rest_api
node_rest_api -->|"streams export"| node_export_engine
node_export_engine -->|"loads profile"| node_encoding_profiles
node_export_engine -->|"encodes video"| node_ffmpeg
node_reference_analyzer -->|"analyzes media"| node_ffmpeg
node_reference_analyzer -->|"writes music"| node_media_store
node_ai_agent -.->|"requests analysis"| node_reference_analyzer
node_browser_ui -.->|"draws ruler"| node_ruler_worker
click node_browser_ui "https://github.com/ronak-create/fablecut/blob/main/app.js"
click node_timeline_model "https://github.com/ronak-create/fablecut/blob/main/app.js"
click node_compositor "https://github.com/ronak-create/fablecut/blob/main/app.js"
click node_audio_engine "https://github.com/ronak-create/fablecut/blob/main/app.js"
click node_audio_meter "https://github.com/ronak-create/fablecut/blob/main/meter-worklet.js"
click node_rest_api "https://github.com/ronak-create/fablecut/blob/main/server.js"
click node_mcp_server "https://github.com/ronak-create/fablecut/blob/main/mcp-server.js"
click node_sse_hub "https://github.com/ronak-create/fablecut/blob/main/server.js"
click node_project_store "https://github.com/ronak-create/fablecut/blob/main/paths.js"
click node_media_store "https://github.com/ronak-create/fablecut/blob/main/paths.js"
click node_asset_library "https://github.com/ronak-create/fablecut/blob/main/server.js"
click node_url_importer "https://github.com/ronak-create/fablecut/blob/main/import-url.js"
click node_export_engine "https://github.com/ronak-create/fablecut/blob/main/server.js"
click node_encoding_profiles "https://github.com/ronak-create/fablecut/blob/main/encode-profiles.js"
click node_reference_analyzer "https://github.com/ronak-create/fablecut/blob/main/analyze.js"
click node_ruler_worker "https://github.com/ronak-create/fablecut/blob/main/ruler-worker.js"
classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_browser_ui,node_timeline_model,node_ruler_worker toneBlue
class node_project_store,node_media_store,node_asset_library,node_url_importer toneAmber
class node_rest_api,node_mcp_server,node_sse_hub toneMint
class node_compositor,node_audio_engine,node_audio_meter,node_export_engine,node_encoding_profiles toneRose
class node_reference_analyzer,node_human,node_ai_agent,node_ffmpeg toneIndigo
编写动画 SVG 叠加层
SVG 使用纯 CSS @keyframes 制作动画。一个约定:永远不要硬编码 animation-delay,而应设置 --d: 0.4s,由合成器暂停所有动画并重新设置延迟,以此驱动时间。完整规则和骨架参见
CLAUDE.md;可运行示例见
library/svg/。
备注
- 仓库附带 20 款 Google Fonts(
library/fonts/,采用 OFL 许可——详见其中的LICENSES.md),以及一组原创 SVG 叠加层和动画元素(library/elements/、library/svg/,与仓库其余部分一样采用 MIT 许可)。 library/sfx/由你自行填充(已加入 gitignore):音效网站通常不允许在公开仓库中再分发其文件,因此 FableCut 不会提供这些文件——library/sfx/README.md列出了优质的免费来源。- 导出在浏览器中运行,因为合成器本身就是浏览器;Agent 会提示你点击 Export(或直接使用
media/中的文件通过 ffmpeg 渲染)。
社区
有问题、想法,想展示你的剪辑,或想参与规划后续方向?欢迎加入 FableCut Discord。Bug 和功能请求仍然建议通过 GitHub issues 提交。 更愿意通过邮件联系?请发送邮件至 [email protected],需要帮助请联系 [email protected]。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
