Tool

Edit video timelines through AI-driven JSON manipulation

FableCut is a browser video editor whose whole timeline is a JSON document, so an AI agent (via MCP, REST, or the file) can cut video for you.

Works with claudeffmpegmediapipe

90
Spark score
out of 100
Updated 5 days ago
Version 1.6.0
Models
claude

Add to Favorites

Why it matters

Enable AI agents and humans to collaboratively edit video projects by exposing a browser-based non-linear video editor as a JSON document that can be modified programmatically through MCP tools, REST APIs, or direct file writes, with live preview updates and frame-accurate rendering.

Outcomes

What it gets done

01

Cut and arrange clips on multi-track timelines with beat markers, transitions, and speed ramps controlled via JSON edits

02

Apply color grading, filters, chroma key, AI background removal, and animated text overlays through structured property updates

03

Analyze reference videos to extract shot boundaries, music beats, BPM, energy curves, and rebuild edits with new footage

04

Export frame-accurate MP4 videos with offline audio mixing while maintaining edit-conflict detection between human and agent changes

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ronak-create-fablecut | bash

Overview

FableCut

FableCut is a browser-based, Premiere-style video editor whose whole timeline is one JSON project file, editable by hand, through the UI, or by an AI agent over MCP or REST - with live-updating hot reload, full grading/motion/text/SVG tools, and a reference-video analyzer that extracts shots, beats, and music to remake an edit with your own footage. Use it when an AI agent should actually cut, grade, and caption video from natural-language instructions, or when a human wants a scriptable, zero-dependency browser editor; export still runs in the browser, so a human (or ffmpeg run directly) must trigger the final render.

What it does

FableCut is a Premiere-style, non-linear video editor that runs entirely in the browser and exposes its whole timeline as one JSON document (project.json) - media, clips, tracks, effects, keyframes, and transitions. Because the project file is the interface, any process that can write JSON can edit video: a human editing through the UI, or an AI agent (Claude Code, Claude Desktop, or anything speaking MCP or REST) cutting the video programmatically, with the browser UI hot-reloading changes within about 150ms via server-sent events. A human and an agent can work on the same timeline concurrently: a revision counter is shared across the UI, MCP tools, and direct file writes, so if a clip is edited in the UI while an agent is mid-task, the agent's next write is rejected (a 409 from the REST API, or a conflict error from fablecut_set_project) rather than silently overwriting the change, and the UI similarly surfaces a toast rather than silently dropping a not-yet-saved local tweak when an agent's write supersedes it.

Editing covers 4 video and 3 audio tracks with drag/trim/split/snap and undo/redo, rubber-band multi-select, beat and cue markers, real decoded audio waveforms, and canvas aspect presets for reels or square formats. Look controls include 12 one-click filter presets, Premiere-style adjustment layers, full grade controls (brightness/contrast/saturation/hue, temperature/tint, vignette, animated film grain), blend and fit modes, chroma key with spill suppression, and in-browser AI background removal via MediaPipe. Motion tools include keyframe animation on roughly 25 properties, speed ramps that time-remap both video and the exported audio mix, animatable camera shake and RGB-split/chromatic aberration, and 17 transitions. Text supports kinetic captions (typewriter, word-pop, word-slide, karaoke, letter-pop, wave, bounce, shake) with neon glow, custom and Google Fonts loaded by name, and full styling controls. SVG clips are first-class: CSS-@keyframes-animated SVGs render frame-accurately in both preview and export, so an agent can author its own vector overlays (lower-thirds, confetti, sparkles) as plain .svg files.

A standout feature is "remake a reference video": feed it a reference edit and node analyze.js ref.mp4 (or the REST endpoint or fablecut_analyze_reference MCP tool) extracts an edit blueprint - shot boundaries, music beats and BPM, a loudness curve, per-shot energy, the drop - plus the reference's music track itself, ready to rebuild the same structure with your own footage. This uses no extra dependencies beyond ffmpeg for decoding and plain Node for onset/tempo detection. Export renders every frame plus an offline audio mix in the browser, then ffmpeg encodes a frame-accurate CRF-18 MP4 (continuing even if you switch tabs), with a realtime MediaRecorder fallback when ffmpeg isn't available.

When to use - and when NOT to

Use FableCut when you want an AI agent to actually cut and grade video for you - given an instruction like "cut these six clips to the beat markers, add a teal-orange grade, put a word-pop caption on top, and a whoosh on every cut," or "remake this reference reel with my own footage and the same music" - and watch the timeline rebuild live, or when you want a browser-based, zero-npm-dependency editor a human can drive by hand with the same feature set. It fits workflows where the editable surface being a plain JSON file matters: version control, scripted batch edits, or concurrent human-and-agent collaboration on one timeline.

It requires Node 18+ and a Chromium-based browser; ffmpeg on PATH is optional but recommended for fast, frame-accurate export (without it, export falls back to realtime MediaRecorder capture). Export itself runs in the browser because the compositor is the browser, so an agent can prepare and drive an edit but still needs a human to click Export, or to render directly from media/ with ffmpeg outside the app.

Inputs and outputs

Input is media dropped into the editor window or placed in ./media/, plus edit instructions - given through the UI, direct project.json edits (modify, bump revision, write; the UI live-reloads), REST calls, or MCP tool calls. Start it with:

git clone https://github.com/ronak-create/FableCut.git
cd FableCut
node server.js

For AI-agent control via MCP (best for Claude Code / Claude Desktop), register the bundled zero-dependency server once: claude mcp add -s user fablecut -- node "<path-to>/fablecut/mcp-server.js", exposing tools including fablecut_status, fablecut_docs, fablecut_get_project, fablecut_set_project, fablecut_patch_project, fablecut_import_media, and fablecut_analyze_reference - designed to be token-efficient (agents patch the timeline with small ops rather than round-tripping the whole document, and can request a compact one-line-per-clip summary or only the documentation sections they need). Output is the live-updating browser timeline plus, on export, a frame-accurate CRF-18 MP4.

Integrations

FableCut integrates with AI agents over three equivalent control surfaces: MCP (a bundled stdio server, mcp-server.js), direct project.json file reads/writes, and a REST API (GET/PUT /api/project, POST /api/upload, GET /api/library, with live updates over server-sent events at /api/events). It uses ffmpeg for both fast export encoding and reference-video decoding and analysis, and MediaPipe (fetched from a CDN on first use) for in-browser AI background removal. library/ folders (Elements, Sound FX, SVG, Fonts) surface directly as asset tabs in the editor UI and refresh live when files are added; the repo ships 20 OFL-licensed Google Fonts and a set of MIT-licensed SVG overlay starters, while library/sfx/ is left for the user to fill due to sound-effect licensing restrictions.

Who it's for

Developers building or driving AI video-editing agents who want a real, feature-complete non-linear editor with a programmable JSON interface rather than a black-box API, and video editors or content creators who want to direct an AI agent through cuts, grading, captions, and reference-video remakes in natural language while watching the timeline update live.

Source README

FableCut

A browser video editor that AI agents can drive.

ronak-create%2FFableCut | Trendshift

Hacker News - front page
DEV - Top 7 of the week
Official MCP registry
Mentioned in Awesome MCP Servers
Glama score
Ask DeepWiki
Discord

https://github.com/user-attachments/assets/2430b854-168b-4a9a-af2e-489e5efa7543

FableCut is a Premiere-style non-linear video editor that runs entirely in your
browser - and exposes its whole timeline as one JSON document. Edit it by hand,
from the UI, or let an AI agent (Claude Code, Claude Desktop, or anything that
speaks MCP/REST) cut your video for you while you watch the timeline update
live.

Zero npm dependencies. One node server.js. That's it.

Why it's interesting

Most "AI video" tools hide the edit behind an API. FableCut flips that: the
project file is the interface. project.json describes media, clips,
tracks, effects, keyframes and transitions - any process that can write JSON
can edit video, and the open browser UI hot-reloads within ~150 ms via
server-sent events. A human and an agent can work on the same timeline at the
same time.

Features

Editing

  • 3 video tracks + 4 audio tracks, drag/trim/split/snap, undo/redo
  • Settings (cog in the top bar) - optional prefs stored in this browser via
    localStorage. Enable Link timeline and Project bin selection so picking a
    timeline clip highlights its media in Project, and clicking a Project item
    selects every timeline clip that uses it (off by default).
  • Direct manipulation on the monitor - click a clip or title on the preview to
    move, resize (corner handles), or rotate (top handle, Shift-snap) it directly
  • Timeline multi-select - rubber-band marquee (drag on empty track area),
    Ctrl/Cmd/Shift+click to add/remove clips, Ctrl+A to
    select all, Esc to deselect. Drag any selected clip to move the
    whole group; Delete removes all selected; S splits all
    selected at the playhead. Inspector shows an "N clips selected" banner.
  • Beat & cue markers (tap ⇧m on the beat during playback) with edge snapping
  • Press Alt+t to add an in/out transition based on the playhead position over the selected clip. The last used transition is remembered as the default. Drag the overlay triangle to adjust duration; Delete clears the focused transition.
  • Real decoded audio waveforms on clips
  • Project bin folders - tree view with expand/collapse; drag media or folders to nest; right-click the Project tab → New folder; drop files onto a folder to import into it
  • Audio Hold - timeline toolbar toggle: while paused, loops one frame of
    audio at the playhead (useful when stepping frame-by-frame). Scrubbing or
    frame-step retargets the held slice; meters stay live. Play / Pause
    turns it off.
  • Canvas aspect presets (16:9, 9:16 reels, 4:5, 1:1) + safe-area guides
  • Program Monitor zoom - mouse-wheel over the preview zooms the composition
    toward the cursor (fit → up to 2 screen pixels per canvas pixel). Magnified
    view uses native scrollbars so overflow stays reachable; middle-click or
    Alt+drag pans. The Fit button (shown while zoomed) resets to the
    fit-to-stage baseline
  • Preview playback speed - shuttle the monitor through 1×/1.5×/2×/4× with J/K/L
    (from a stop J/L start playback; while playing L steps faster
    and J slower, K toggles play/pause and resets to 1×); affects the
    preview player only, never the export
  • Resizable workspace: drag the divider between monitor and timeline (double-click resets), plus S/M/L timeline track-density presets (S hides thumbnails for compact tracks)
  • Zoom to selection (⇧Z) frames all selected clips, not just one
  • IN/OUT work area - set markers with i and o (⇧I / ⇧O to clear). Enabling Limit constrains playback to the marked range and maps Home / End to the IN and OUT positions rather than the full timeline. t splits clips at the markers; ⇧t trims clips to the work (between marker in and marker out) area.
  • Find & close gaps - a gap is a stretch where every enabled track is empty (black frames). g jumps the playhead to the next shared gap (wraps; respects IN/OUT when both are set). ⇧G closes the gap under the playhead by pulling later clips left on all enabled tracks.
  • Reset a property - Ctrl/Cmd+click an inspector label to restore that effect/prop to its default (paired fields like Crop L/R reset together). Matching keyframes for the prop are cleared too; transition labels clear the in/out transition.
  • Replace media - the inspector's Source button (any video/audio/image/svg
    clip) swaps the underlying file while keeping position, trim, keyframes,
    transitions and every effect. Pick another item already in the bin or
    Browse file… to import and replace in one step. A video's linked L/R
    audio companions are swapped along with it; a shorter replacement clamps the
    trim to fit and toasts that it did so.
  • Multi-channel video audio - a video with more than 2 audio channels gets
    a linked audio clip per channel, not just L/R (5.1, 7.1…). Extra audio
    tracks (A5, A6, …, capped at 16) are created automatically as needed;
    replacing a clip's media re-syncs the linked channel clips to the new
    source's channel count, adding/dropping extras and new tracks as needed.

Look

  • 14 one-click filter presets (cinematic, teal-orange, noir, vintage, cyberpunk, sunset, midnight…)
  • Adjustment layers - one clip grades everything below it, Premiere-style
  • Full grade controls: brightness/contrast/saturation/hue, temperature & tint,
    blur, grayscale/sepia/invert, vignette, animated film grain
  • Blend modes (screen, multiply, overlay…), fit modes (contain/cover/stretch),
    per-edge cropping, corner radius, flip H/V
  • Chroma key (green screen) with tolerance/softness + spill suppression
  • AI background removal (person cut-out, in-browser via MediaPipe)

Motion

  • Keyframe animation on ~25 properties with easing
  • Keyframe markers on clips - diamonds on the clip body at each unique
    keyframe time (tooltip lists channels; a count badge when several share a
    time). Ctrl/Cmd+← / Ctrl/Cmd+→ jumps the playhead to
    the previous / next keyframe (selected clips first, else clips under the
    playhead)
  • Keyframe graphs - toggle a property’s curve in the inspector to show an
    interpolated value graph beside the program monitor; click the graph to seek
  • Speed ramps - keyframe speed and the engine time-remaps video and the
    export audio mix (the fast-into-slow-mo reel move)
  • Camera shake and RGB-split/chromatic aberration, both animatable
  • 17 transitions: fades, slides, wipes (4 directions), zoom, iris, spin, blur,
    whip-pan, glitch, pop

Text

  • Title styles - one-tap cohesive looks (Impact, Elegant, Kinetic cut, Neon,
    Handwritten, Luxury, and more); new titles vary the font, placement and animation
    automatically instead of defaulting to one flat style
  • Kinetic captions: typewriter, word-pop, word-slide, karaoke, letter-pop,
    wave, bounce, shake, clip-reveal, zoom-in, font-cut
    (rhythmic typeface cuts), rise-mask
  • Neon glow for that TikTok caption look
  • Font editor: system fonts, drop-in custom fonts (library/fonts/), and any
    Google Font by name
    - loaded automatically
  • Gradient fills, outline, background pills, letter-spacing, line-height,
    weights, italic, uppercase, soft shadows
  • Text layout - horizontal Align: left / center / right / justify
    (extra spaces between words). Drag a title’s corner handles to create a
    text box (boxW / boxH); further corner drags resize it (opposite
    corner stays fixed; Ctrl/Cmd resizes from center; Shift
    locks aspect). Inside a box, text wraps at the fixed font size by default;
    enable Scale to fit to shrink the font so the whole block fits. V-align
    (top / middle / bottom) places the text block vertically in the box. Set Box
    W/H to 0 to return to hug-content sizing.

Animated SVG clips

  • A first-class svg clip kind: CSS-@keyframes-animated SVGs render
    frame-accurately in preview and export (the compositor freezes the
    animation at any time). Agents can author their own vector overlays -
    lower-thirds, confetti, sparkles - as plain .svg files. Starters included.

Remake a reference video

  • Give it a reference edit (a reel you like) and get back an edit blueprint:
    shot boundaries, music beats + BPM, a loudness curve, per-shot energy, the
    drop - plus the reference's music track extracted into your media, ready
    to rebuild the same idea with your own footage. Zero extra dependencies
    (ffmpeg does the decoding; onset/tempo detection is plain Node).
    node analyze.js ref.mp4, POST /api/analyze, or the
    fablecut_analyze_reference MCP tool.

Asset library

  • library/ folders surface as tabs in the UI: Elements (overlay art),
    Sound FX, SVG - drop files in, the open editor refreshes live

Export

  • Fast export: browser renders every frame + an offline audio mix, ffmpeg
    encodes a frame-accurate CRF-18 MP4 (keeps rendering if you switch tabs)
  • Realtime MediaRecorder fallback when ffmpeg isn't available

Quick start

git clone https://github.com/ronak-create/FableCut.git
cd FableCut
node server.js        # → http://localhost:7777

Requirements: Node 18+ and a Chromium-based browser. ffmpeg on PATH is
optional but recommended (fast export + upload remuxing). AI background
removal fetches its model from a CDN on first use.

The server binds 127.0.0.1 only (v1.3.1+). To use it from another device on
your LAN, opt in explicitly: HOST=0.0.0.0 FABLECUT_ALLOWED_HOSTS=<your-ip> node server.js.

Drop media into the window (or ./media/), drag clips onto the timeline, edit,
export.

Driving it with an AI agent

Everything an agent needs is in CLAUDE.md - the complete
schema, semantics and recipes. Point any capable model at that file and it can
operate the editor end to end.

📖 Browsable docs: for a conversational, auto-generated tour of the
codebase - architecture, the project.json schema, the MCP surface - see
FableCut on DeepWiki. Ask it
questions about the repo in natural language.

Three equivalent control surfaces:

  1. MCP (best for Claude Code / Claude Desktop) - register the bundled
    zero-dependency MCP server once:

    claude mcp add -s user fablecut -- node "<path-to>/fablecut/mcp-server.js"
    

    Tools: fablecut_status (auto-starts the editor), fablecut_docs,
    fablecut_get_project, fablecut_set_project, fablecut_patch_project,
    fablecut_import_media, fablecut_analyze_reference.

    FableCut is also published on the official MCP registry as
    io.github.ronak-create/fablecut

    • each release ships an MCPB bundle (fablecut.mcpb) that MCPB-capable
      clients can install directly.

    The surface is token-efficient by design: agents patch the timeline with
    small ops (fablecut_patch_project) instead of round-tripping the whole
    document, read a compact one-line-per-clip summary
    (fablecut_get_project {compact:true}), and fetch only the manual sections
    they need (fablecut_docs {section:"props"}).

  2. The file - read project.json, modify, bump revision, write. The UI
    live-reloads.

  3. REST - GET/PUT /api/project, POST /api/upload, GET /api/library,
    SSE at /api/events. See CLAUDE.md for the full list.

Example: ask Claude Code "cut these six clips to the beat markers, add a
teal-orange grade, put a word-pop caption on top and a whoosh on every cut"
-
and watch the timeline rebuild itself.

Or hand it a reference: "here's a reel I like - analyze it and remake it with
my clips, same music"
. The agent calls fablecut_analyze_reference, gets the
blueprint (cuts, beats, BPM, energy, drop, extracted music), and rebuilds the
structure shot-for-shot with your footage.

Conflict-safe concurrent editing: the UI, the MCP tools, and direct
project.json writes all agree on a revision counter. If you edit a clip in
the UI while an agent is mid-task, the agent's next write is rejected (409 from
the REST API / a conflict error from fablecut_set_project) instead of
silently overwriting your change. The UI similarly detects when an agent write
supersedes a not-yet-saved local tweak and tells you with a toast instead of
dropping it silently.

Project layout

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
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)

Authoring animated SVG overlays

SVGs animate with plain CSS @keyframes. One convention: never hardcode
animation-delay - set --d: 0.4s instead, and the compositor drives time by
pausing all animations and rebasing their delays. Full rules + a skeleton in
CLAUDE.md; working
examples in library/svg/.

Notes

  • The repo ships with 20 Google Fonts (library/fonts/, OFL - see
    LICENSES.md there) and a set of self-authored SVG overlays and animated
    elements (library/elements/, library/svg/, MIT like the rest of the repo).
  • library/sfx/ is yours to fill (gitignored): sound-effect sites typically
    don't allow redistributing their files in a public repo, so FableCut doesn't -
    library/sfx/README.md lists good free sources.
  • Export runs in the browser because the compositor is the browser; agents
    ask you to click Export (or render directly with ffmpeg from media/).

Community

Questions, ideas, showing off an edit, or want to help shape what's next? Join
the FableCut Discord. Bugs and feature
requests are still best filed as GitHub issues.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.