mcpField
F
FableCut

FableCut

本地服务
fablecut.space媒体与设计7681 天前更新

关于 FableCut

FableCut 是面向用户和 AI Agent 的浏览器非线性视频编辑器,时间线以可编辑的 JSON 表示。界面会实时更新,用户可与 Agent 协作编辑,并通过撤销和版本记录管理修改。

主要功能

  1. 01基于 JSON 编辑项目和时间线
  2. 02浏览器实时预览、撤销与版本记录
  3. 03视频和音频轨道、转场与效果
  4. 04基于转录文本剪辑并生成字幕
  5. 05删除静音、节拍剪辑与重新构图
  6. 06通过 ffmpeg 导出

适用场景

  1. 01让 AI Agent 修改时间线并在浏览器中查看
  2. 02通过选择转录文本剪辑访谈视频
  3. 03为录音生成字幕或删除停顿
  4. 04将剪辑重新构图为竖屏或方形画面

MCP 相关

FableCut 通过 MCP 服务向 MCP 客户端开放时间线编辑和媒体操作,包括项目补丁、删除静音、重新构图、转录和字幕等操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmfablecut1.18.0
mcpbfablecut.mcpb

工具

14

收录的工具列表 · 更新于 1 天前

此工具无需参数。

详细介绍

FableCut

可由 AI Agent 操作的浏览器视频编辑器。

ronak-create%2FFableCut | Trendshift

Hacker News — front page DEV — Top 7 of the week Official MCP registry Mentioned in Awesome MCP Servers Glama score Glama — #18 Best Browser Automation MCP Servers Docs Discord

English · 简体中文 · 日本語 · Español · Português (BR)

观看 FableCut Studio 演示:Agent 实时剪辑短片(58 秒)

FableCut 是一款 Premiere 风格的非线性视频编辑器,完全运行在浏览器中——并将整个时间轴作为一个 JSON 文档公开。你可以手动编辑、通过界面编辑,也可以让 AI Agent(Claude Code、Claude Desktop,或任何支持 MCP/REST 的工具)为你剪辑视频,同时实时观看时间轴更新。

零 npm 依赖。只需运行一个 node server.js。就这么简单。

FableCut 编辑器

赞助商

Sidrune AI — 一个 API 接入 GPT、Claude 和其他领先的 AI 模型

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_reference MCP 工具。

查看素材

  • Agent(或你自己,通过 REST)可以获取任意时刻的实际图像: GET /api/frame?src=/media/x.mp4&t=3.2 会返回该帧的 JPEG,而 &frames=12 会返回覆盖整个片段的 4×3 缩略图集——快速浏览 一段 3 分钟素材中的所有内容。抓取的帧会缓存在 analysis/frames/ 中。
  • fablecut_frame MCP 工具封装了这一功能,并以内嵌方式返回图像,因此 多模态模型可以查看画面。传入 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。

三种等效的控制方式:

  1. 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]。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。