Projects
Keep many projects in one FableCut: a dashboard to open, create from a canvas or template, duplicate, rename, take notes on, tag, archive and delete them, and fablecut_projects for agents.
One FableCut keeps any number of projects. ./project.json is always the open project: the editor, every MCP tool, the REST API and scripts read and edit that file as before. The others wait in projects/, and opening one swaps it in:
| path | holds |
|---|---|
projects/index.json | {active} - the open project's id |
projects/<id>/meta.json | {id, created, opened, archived, notes, tags, template?} |
projects/<id>/project.json | the document (while that project is open, ./project.json is the live copy) |
projects/<id>/thumb.jpg | the editor's last picture of it |
library/project-templates/<id>.json | a saved project template {name, created, project} |
media/, exports/, analysis/ and library/ are shared by every project, so a duplicate or a project made from a template copies no footage. The first time projects are used, the existing ./project.json becomes the first project, unchanged. Ids look like p_3f9a01c2de.
Opening a project saves the open one into its folder, then copies the chosen one to ./project.json with a revision above both. A save based on the project that was open before (an editor tab, an agent's fablecut_set_project, a baseRevision patch) is therefore refused as a CONFLICT instead of landing in the wrong project. Editor tabs reload, clear their undo history and close an open composition. GET /api/project names the open project in the X-FableCut-Project header, and the editor sends it back on every save, so an edit made for one project can never be written into another.
In the editor: Projects in the top bar (Ctrl/Cmd+O, or a click on the project name) opens the dashboard: cards with a picture, size, frame rate and length; search by name, notes or #tag; sort by last opened, last modified, created or name. Pick one to rename it, write notes, tag it, Open (or double-click / Enter on its card), Duplicate, Save as template or Archive it. Archived lists archived projects, where Unarchive brings one back and Delete… (click twice) removes it; only archived projects can be deleted, and the open one can be neither archived nor deleted. + New project starts one from a canvas (Landscape 16:9 1080p, Vertical 9:16, Square 1:1, Portrait 4:5, 4K UHD, Landscape 720p) or a saved template, with its own frame rate. Import… adds a project file from elsewhere (an old backup, another machine); its media must be in media/, and Relink finds files that moved.
Agents use fablecut_projects (or GET /api/projects, POST /api/projects):
{}or{action:"list", archived?:"only"|"all"}lists them: id, name, size, length, clips, tags, notes, and which is(OPEN).{action:"open", id}switches the editor to that project; re-read it withfablecut_get_project {compact:true}before editing.{action:"new", name, template?, fps?, width?, height?, notes?, tags?, open?}-templateislandscape-1080(default),vertical-1080,square-1080,portrait-1350,uhd-4k,landscape-720or a saved template's id; it opens unlessopen:false.{action:"duplicate", id, name?, open?}·{action:"update", id, name?, notes?, tags?}·{action:"archive" | "unarchive" | "delete", id}.fablecut_statusalso counts the open project's versions; see Versions for them.{action:"templates"}·{action:"save_template", id, name}(the project's canvas, tracks, clips and media references) ·{action:"delete_template", template}.- Opening, archiving or deleting changes what the user sees: do it only when they asked.
fablecut_statussays how many projects there are.
Recipes: one edit, three versions - duplicate the project per client cut, put the brief in notes; house canvas - build an empty project with your tracks, intro and outro, save_template, then new from it for every episode; park finished work - archive delivered projects to keep the list short without deleting anything.