FableCut is a free, open source photo & video editors project written in JavaScript and released under MIT. It has 694 GitHub stars, 73 forks and 9 open issues, and was last pushed 3 days ago. On this registry it ranks #48 of 50 tracked projects in Photo & Video Editors, with 5 head-to-head comparisons available.

What is FableCut?

FableCut is a zero-dependency, MIT-licensed browser video editor that runs as a Premiere-style non-linear editor in the browser and exposes its entire timeline as a single JSON document that AI agents can edit over MCP or REST.

What it is

FableCut is a non-linear video editor written in JavaScript that runs entirely in the browser and is released under the MIT licence. Its topics describe the project precisely: ai-agent, canvas, claude, ffmpeg, javascript, llm, mcp, nle, reels, video-editing, video-editor and zero-dependency. The design choice at the centre of the project is that the project file is the interface: project.json describes media, clips, tracks, effects, keyframes and transitions, so any process that can write JSON can edit video. The open browser UI watches that file and hot-reloads within roughly 150 ms through server-sent events.

The concrete problem it solves is that most "AI video" tools hide the edit behind an API, leaving no timeline a human can see or touch. FableCut inverts that arrangement: instead of an opaque editing endpoint, the timeline is a document that a person and an agent can both work on at the same time, with every agent-side change appearing live in the browser. It therefore replaces both the API-only video automation pipeline and the conventional hand-driven editing session with one shared, inspectable artifact.

Key capabilities

  • Runs with zero npm dependencies by way of a single command, node server.js.
  • Keeps the whole edit in one JSON document, project.json, covering media, clips, tracks, effects, keyframes and transitions.
  • Hot-reloads the open browser UI in about 150 ms over server-sent events, so an agent's edits appear while they happen.
  • Exposes the editor over MCP and REST, and is listed in the official MCP registry as io.github.ronak-create/fablecut, which makes it drivable from Claude Code, Claude Desktop or anything else that speaks those protocols.
  • Provides a Premiere-style track model with video and audio tracks (default 3 + 4, up to 16 of each), new lanes added with +V / +A in the track header, lanes removed with right-click then Remove track, plus drag, trim, split, snap and undo/redo.
  • Supports direct manipulation on the monitor, where clicking a clip or title moves it, corner handles resize it and the top handle rotates it with Shift-snap, alongside in/out transitions added with Alt+t and beat or cue markers tapped with Shift+m.
  • Offers timeline multi-select through rubber-band marquee, Ctrl/Cmd/Shift+click, Ctrl+A and Esc, with group dragging, Delete, S to split every selected clip at the playhead, and per-track solo (S) and mute toggles.

Who uses it and how

  • Agent builders who wire Claude Code, Claude Desktop or any MCP/REST client into a video pipeline and let the agent perform the cut while the browser timeline updates live.
  • Editors who want a visible human-in-the-loop session, since the README states that a human and an agent can work on the same timeline at the same time.
  • Pipeline authors who generate or mutate project.json from outside the editor, because any process that can write JSON can edit video.
  • Short-form and social creators, reflected in the reels topic and the non-linear editing (nle) framing.
  • Developers arriving through the community channels the README badges, including the Hacker News front page, DEV's Top 7 of the week, Awesome MCP Servers, Glama's browser-automation MCP ranking and the project's Discord server.

Getting started

FableCut has no npm dependencies and starts with one command, node server.js, with the project homepage at fablecut.space. Localized READMEs live under docs/i18n/ for Simplified Chinese, Japanese, Spanish and Brazilian Portuguese.

How it compares

No list of paid products that FableCut replaces is present in the facts provided, and no comparable tool is named there either, so as far as this registry is concerned the project stands alone. The only positioning the README supplies is general: it calls itself Premiere-style and contrasts itself with the class of AI video tools that hide the edit behind an API, arguing that FableCut instead makes the project file the interface.

When to use it — and when not to

A self-hoster runs a Node.js process with node server.js and opens a browser, and the facts mention no database, object storage or SMTP service to operate, so the operational footprint is small. It suits people who are comfortable treating JSON as an editing surface and who want agents in the loop, and it is a poor fit for anyone who needs a native desktop NLE or who will not let another process write the project file. The project is also small — JavaScript, MIT-licensed, 694 stars, 73 forks, 9 open issues, published from an individual maintainer's MCP namespace — so adopters should weigh community size and maintenance depth alongside the feature list.

project readme (upstream, from github) — read inline

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 Glama — #18 Best Browser Automation MCP Servers Ask DeepWiki Discord

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

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.

FableCut editor

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

  • Video + audio tracks (default 3+4; add more with +V / +A in the track header; right-click an empty header → Remove track), 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).
  • Video + audio tracks (default 3+4), drag/trim/split/snap, undo/redo
    • +V / +A in the track header add a video or audio lane (up to 16 each)
    • Right-click an empty track header → Remove track (disabled if the lane has clips, or if it would leave you with zero video/audio tracks)
    • Track header S solos that lane (mutes all others); click again to restore the previous mute state. Using the mute toggle while soloed exits solo.
    • Dropping a video with more audio channels than A-tracks adds the missing lanes automatically (up to 16) and toasts how many were added; each channel becomes a linked stem on its own A-track
  • 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
  • Import from URL — + URL downloads an HTTPS video/audio/image into ./media/ (same-origin after import). Remote SVG is refused. Agents use fablecut_import_media with an https:// path. The URL is not kept as media.src — that would taint the canvas and break export.
  • 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) + project FPS select (24 / 25 / 30 / 50 / 60; non-preset rates show as Custom) + safe-area guides
  • Export frame / reframing — composition canvas can be larger than the delivery crop (exportFrame in project.json). Preview dims the overscan; drag the Export frame handle to reframe (e.g. 16:9 canvas → 9:16 export). Fast export crops to the frame; WebCodecs and Realtime export are disabled while a frame is set
  • 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). The Program Monitor shows playhead as current / sequence duration; when markers are set, IN, marked duration, and OUT stack on the right. Export has a Range dropdown (Entire timeline / IN–OUT; defaults to IN–OUT when markers exist) so you can keep markers for split/trim and still export the full sequence. 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 or slider restores that effect/prop to its default and clears every keyframe on the channel (scale → 1, opacity → 1, paired fields like Crop L/R reset together; transition labels clear the in/out transition). Shift+click a label is playhead-local: if you are parked on a keyframe it removes that keyframe only; otherwise it sets the value at the playhead to the default (auto-keys if the channel is already animated).
  • 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). Inspector fields show the interpolated value at the playhead; changing one updates the keyframe you’re on, or inserts one if that channel is already keyed. Dragging a clip in the program monitor (move / scale / rotate) writes the same way. The ◆ button adds a keyframe at the playhead, or removes the one you’re parked on; ✕ clears the whole channel. When the playhead is outside the selected clip, keyframed fields and ◆ buttons are disabled (they show the nearest edge value) — keyframe edits only apply where the playhead actually is; unanimated properties stay editable anywhere
  • 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 JPEG frames via an encoding profile from encoding-profiles.json (keeps rendering if you switch tabs). Encode and upload run ahead of the compositor so a fast timeline is not stalled by toBlob. The Export dialog has a profile selector; pin a project default with encodeProfile in project.json
  • WebCodecs export: the browser HW-encodes Annex-B H.264; the server stream-copies and muxes audio. Faster uploads; bitrate/VBR-CBR in the Export dialog. Unavailable while an export frame is set (use Fast)
  • Realtime MediaRecorder fallback when ffmpeg or WebCodecs isn't available
  • Export Range dropdown: Entire timeline or IN–OUT (defaults to IN–OUT when markers are set). Effective IN/OUT export bounds are clamped to projDur().

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= node server.js.

Drop media into the window (or ./media/), paste an HTTPS URL via + URL, drag clips onto the timeline, edit, export.

To keep your work outside the checkout, set FABLECUT_DATA_DIR — it moves project.json, media/, exports/, analysis/ and library/ to a directory you choose. Leave it unset and everything stays in the repo, exactly as before.

Or install it as a Claude Code plugin

/plugin marketplace add ronak-create/FableCut
/plugin install fablecut@fablecut

That registers the MCP server for you and adds two skills — edit-video and remake-reel. Your timeline and footage live in the plugin's own data directory, so an update never touches them. Node 18+ and (optionally) ffmpeg still need to be on your machine.

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 "/fablecut/mcp-server.js"
    

    OpenCode can use the same stdio server from its project or global opencode.json configuration:

    {
      "$schema": "https://opencode.ai/config.json",
      "mcp": {
        "fablecut": {
          "type": "local",
          "command": ["node", "/absolute/path/to/FableCut/mcp-server.js"],
          "enabled": true
        }
      }
    }
    

    For another MCP client, register a local stdio server with this equivalent command. The exact key names vary by client, but the command and arguments do not:

    {
      "name": "fablecut",
      "transport": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/FableCut/mcp-server.js"]
    }
    

    The server is intentionally client-neutral. It speaks MCP over stdio and does not require Claude-specific environment variables. Keep the path absolute, and use Node 18 or newer.

    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_encode_profiles.

    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, POST /api/import-url, GET /api/library, GET /api/export/profiles, 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
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)

Architecture Overview

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

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

Sponsors

Fluxion AI provides reliable, cost-efficient access to GPT, Claude, and other leading AI models through one unified API. Save up to 70% compared with official API pricing — and get $3 in API credits when you sign up through this link.

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.

License

MIT

Frequently asked questions

Is FableCut free to use?

FableCut is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does FableCut do?

Zero-dependency browser video editor that AI agents can drive — JSON timeline, MCP + REST, live-reloading UI

What is FableCut written in?

FableCut is primarily written in JavaScript. Its source is publicly available at https://github.com/ronak-create/FableCut, and it has 694 GitHub stars.