FableCut: a zero-dependency browser video editor with a JSON timeline that AI agents can drive
Zero-dependency browser video editor that AI agents can drive — JSON timeline, MCP + REST, live-reloading UI
At a glance
- What is it?
- FableCut runs a Premiere-style non-linear editor in the browser and exposes the whole project as project.json, so an MCP or REST client can cut the video while the UI hot-reloads. It installs with one node server.js and no npm dependencies, but the README leaves export and rollback behaviour thin.
- Who is it for?
- Adopt FableCut if you want a timeline a script or an MCP agent can write to directly, and you accept that the README documents the editing model better than it documents export and recovery. Do not adopt it if you need a hosted service, a documented rollback path, or an editor whose behaviour is fully specified outside the source.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem FableCut solves: the project file is the interface
Most tools that let an AI edit video put the edit behind an API and keep the timeline private. FableCut inverts that. According to the README, the project file is the interface: project.json describes media, clips, tracks, effects, keyframes and transitions. Any process that can write JSON can therefore change the edit, and the open browser UI hot-reloads within roughly 150 ms over server-sent events. The README also states that a human and an agent can work on the same timeline at the same time.
That makes the target user fairly narrow. It is for engineers who want to script a cut, not for someone who wants a finished editor with a support contract. If your workflow is "an agent produces a rough cut and a person fixes it," the shared JSON document is the whole point. If your workflow is "I open an app and drag clips," the JSON layer is overhead you will never touch.
How the JSON timeline, SSE reload and MCP server fit together
The architecture visible in the repository is a small Node process plus a browser client. server.js is the entry point named in package.json, and the top-level layout includes app.js, index.html, style.css, mcp-server.js, import-url.js, paths.js, ruler-worker.js and meter-worklet.js. The engine requirement in package.json is node >=18, and the package declares no dependencies at all, which is why the README can say "Zero npm dependencies. One node server.js."
The data flow the README describes is: something writes project.json, the server notices, and the browser UI reloads over server-sent events. The README puts that reload at about 150 ms. Agents reach the same document through fablecut_import_media and the other tools registered by mcp-server.js; the repository carries both .mcp.json and server.json, and the README links to the official MCP registry entry io.github.ronak-create/fablecut. A REST surface is claimed in the package description and the README, though the README excerpt does not enumerate its endpoints, so treat the REST routes as something to read out of server.js rather than something documented for you.
One detail is worth calling out because it shows the design is not naive about the browser. Import from URL downloads an HTTPS video, audio or image into ./media/, and the README explains that the remote URL is deliberately not kept as media.src because that would taint the canvas and break export. Remote SVG is refused. That is a real constraint of canvas-based rendering, handled explicitly.
Installing FableCut and making a first edit from the command line
The README gives one install path: run the server with Node 18 or newer. There is no npm install step to run, because the package declares no dependencies.
node server.jsAfter that the editor is served from the same process and you open it in a browser. The README's own framing is "Zero npm dependencies. One node server.js. That's it." If you prefer the package script, package.json defines start as node server.js, so npm start is equivalent.
npm startThe project's own file layout is where you put media. Import from URL downloads into ./media/, and the repository contains a media/ directory for that purpose, alongside exports/ and library/. To check the code before trusting it, the package defines a test script that runs the Node test runner.
npm testThat maps to node --test, and the repository has a test/ directory. Running it tells you what the maintainers consider covered; it does not tell you that export works on your machine.
For an agent-driven first edit, the README points at fablecut_import_media with an https:// path as the way to pull media in. The repository ships .mcp.json and server.json, which is where an MCP client reads the server definition. The README does not print a full worked example of an agent session, so the honest first step is to read mcp-server.js and the skill and plugin folders (.claude-plugin/, skills/, AGENTS.md, CLAUDE.md) to see the exact tool names and arguments in this version.
Where FableCut gets awkward: export, rollback and scope
The sharpest limitation is visible in the feature list itself. Export frame and reframing lets the composition canvas be larger than the delivery crop, set by exportFrame in project.json. The README states plainly that Fast export crops to the frame, and that WebCodecs and Realtime export are disabled while a frame is set. So choosing a reframe quietly removes two export paths. That is a design decision with a cost, and it is the kind of thing you want to know before you build a pipeline around it.
Rollback is not documented. The README describes undo and redo in the editor, and it describes a JSON document that any process can write, but it does not document versioning, backups or a recovery path for project.json. An agent that writes a bad timeline has the same access as you do. If your media is only referenced from that file, a bad write is a real risk with no documented safety net.
The REST surface is the other soft spot. The package description promises a REST API, but the README excerpt does not list routes, methods or payloads. You would be reading server.js to find them. That is normal for a young project and abnormal for a project you are about to put in production.
Finally, scope. This is a browser editor with a Node process beside it. It is not a render farm, and nothing in the README suggests a queue, workers or multi-machine encoding. Long timelines and heavy codecs are bounded by the browser tab.
FableCut compared with driving FFmpeg directly
The obvious alternative for scripted editing is FFmpeg itself, and the difference is not quality, it is the shape of the interface. FFmpeg takes a filter graph and produces a file. There is no persistent document, no live preview, and no shared state a person can open while the job runs. FableCut keeps a project.json that both a person and a program can edit, and it renders that state in a browser that updates as the file changes.
That difference cuts both ways. If your task is "transcode these files with this filter chain," FFmpeg is the smaller, better-specified tool and FableCut adds a UI you do not need. If your task is "let an agent assemble a cut and let me watch and correct it," FFmpeg gives you no place to watch. The README's framing, that most AI video tools hide the edit behind an API while FableCut makes the project file the interface, is really a claim about reviewability rather than about rendering power.
The repository also lists ffmpeg as a topic and ships encoding-profiles.json and encode-profiles.js, which suggests FFmpeg is part of the export story rather than a competitor to it. The README excerpt does not spell out that pipeline, so verify it in the code before assuming a specific encoder is invoked.
Maintenance, licence and what an upgrade costs you
The repository is not archived. The last push was on 2026-09-10, which is recent, and the release history shows v1.5.0 and v1.6.0 both dated 2026-07-13 and v1.7.0 on 2026-08-24, with v1.7.0 adding linked audio tracks, monitor zoom and project folders. That is a steady cadence across the last few months, and the version in package.json is 1.7.0, matching the latest release.
Upgrade cost is shaped by the JSON contract. If you write project.json yourself, a release that changes the schema is a breaking change for your scripts, and the README does not describe a schema version field or a migration path. The safest posture is to pin the version you deploy and diff project.json output between versions before upgrading. The CHANGELOG.md at the repository root is the place that would tell you what moved.
The licence is MIT, and the LICENSE file is at the repository root. MIT is permissive, so redistribution and modification are broadly allowed, but the README does not state which licence applies to the bundled fonts, icons or example media. The icons/ and examples/ directories exist, and examples/auto-captions/ is an example project rather than a licence statement. If you ship FableCut inside a product, check those assets separately. This is not legal advice.
Editorial conclusion
Adopt FableCut if you want a timeline a script or an MCP agent can write to directly, and you accept that the README documents the editing model better than it documents export and recovery. Do not adopt it if you need a hosted service, a documented rollback path, or an editor whose behaviour is fully specified outside the source. Before committing, open the repository, run node server.js against a copy of your own media, confirm which export path the current version actually offers, and read server.json and .mcp.json to see exactly which tools the MCP server registers.
Frequently asked questions
How do I install FableCut?
Run node server.js with Node 18 or newer, since package.json sets engines to node >=18 and declares no dependencies. The package also defines npm start as the same command, and npm test runs node --test against the test/ directory.
Can an AI agent edit a FableCut project?
Yes. The README states that the project file is the interface and that an agent can cut your video while you watch the timeline update live, with the UI hot-reloading over server-sent events in about 150 ms. Agents reach the timeline through the MCP server in mcp-server.js, whose definition files are .mcp.json and server.json.
Does FableCut need FFmpeg installed?
The README does not say. ffmpeg appears as a repository topic and the project ships encoding-profiles.json and encode-profiles.js, but the README excerpt does not document an FFmpeg dependency or an install step for it. Check those files before assuming either way.
What is FableCut used for?
It is a Premiere-style non-linear video editor that runs entirely in the browser, and it exposes the whole timeline as one JSON document so a person, a script or an MCP/REST agent can edit it. The README describes it as a browser video editor that AI agents can drive, with zero npm dependencies and one node server.js entry point.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ronak-create-fablecut)