Projects & the ledger
Projects
A project is a first-class container: it owns its outputs, its saved graphs, and its ledger. Everything you make lives inside the active project on disk. Switch projects from the toolbar's project selector; the whole workspace swaps.
Started building in the wrong project? File ▾ → Save project as… takes the current canvas into a brand-new project of its own — name it, pick its folder, and everything moves with it:
- every image and clip the canvas references moves into the new project's
outputs/(same subfolders). A file that another graph in the old project also uses stays there as a copy, so nothing else breaks; - the ledger rows of the carried nodes move too, so 🕘 history and spend show up in the new project, and the files those past takes reference come along;
- if the canvas was a saved graph, its file moves with it and keeps its name;
- the graph is rewritten to the new locations and stays warm: unchanged nodes replay for free on the next Run instead of paying again, and a real edit still runs again, as it should.
The old project is left with a fresh canvas. History that belongs to another saved graph stays in the old project. The log line under the action says how many files and rows moved and how many stayed as shared copies. Wait for a running generation to finish first — the action refuses while something is generating. To find any result on disk, right-click its preview → Reveal in Explorer.
- Create a project (File ▾ → New project…) and choose where it lives: anywhere, including a NAS share.
- NAS-rooted projects store their data in the folder you chose. A second computer can Open project… on the same folder and work in it too: that's how a studio shares live work.
- The default project keeps its files where they always were, so nothing you already made ever moves.
The generation ledger
Every generation (finished, failed or cancelled) is recorded in the project's ledger with its node, model, prompt, files and cost.
Text and planning calls are recorded and priced too (Text → Text, Refine, the Multi-Shot planner, the Director and the cinema crew). Marcel's own calls are counted separately. No spend is invisible.
The ledger powers three things:
- Per-node history & re-pin. Click the 🕘 on any generation node to see everything it ever produced, and pin a past result as the active output. See Never pay twice.
- Spend. The toolbar readout aggregates the ledger into a running total, broken down by provider — and clicking it opens the full ledger: totals for generations and for Marcel's own calls and every row newest-first with its model, status, and estimated cost.
- Budgets. File ▾ → Project budget… sets a spend ceiling for the project. The readout shows
$spent / $budgetand tints as you approach it (amber past 80%, red past 100%), and every paid confirmation dialog adds a budget line near the cap. Budgets are soft by default — they inform, you still hold the OK. Tick hard cap and paid confirmations refuse instead until you raise or clear the budget. Comparisons use the ledger's estimates; leave the amount empty to remove the budget.
Where things live
<project>/
outputs/ your images and clips
graphs/ your saved graphs
ledger/ history and spend
project.json lets another computer open the project
Keys are never here — they live in your OS keychain.
What a filename tells you
Every file Brut writes into outputs/ is named so the folder reads on its own, without opening anything:
<project>_<graph>_<node>_<provider>_<model>_<date>_<job>.<ext>
tournesol_facade-study_t2i-12_openai_GI25F_260923_a3f91c2e.png
tournesol_facade-study_film-3-c02_kling_K30_260923_0c77e4b1.mp4
tournesol_facade-study_sb-2-kf-s3_gemini_NB2_260923_5d10aa07.png
- project and graph are the names you gave them, shortened to a slug (
untitledwhile the canvas is not saved as a graph). - node is the node's id with its kind abbreviated (
t2iText → Image,i2iImage → Image,i2vImage → Video,msMulti-Shot,upUpscale Image,sbStoryboard,filmFilm Shots,dirDirector …) and, for the nodes that make several files, which one:ms-4-s07is Multi-Shot 4's shot 7,film-3-c02is Film Shots 3's clip 2,sb-2-kf-s3the keyframe of card s3 on Storyboard 2 (-endfor a generated end frame),dir-1-proofa proof sheet. - provider is who made it: the provider that actually served the call (a job run through OpenRouter says
openrouter), or the free tool on your machine for its own results (conform,layers,sketch,sequence, andtvaifor Topaz Video AI on your machine). - model is the model's short code, in capitals so it stands out, for model tracking at a glance. A job run through OpenRouter still names the model you picked; the provider segment says who served it. Free tools have no model, so the segment is simply absent.
| Code | Model | Code | Model |
|---|---|---|---|
NBP |
Nano Banana Pro | K30 K30O K30T |
Kling 3.0 · 3.0 Omni · 3.0 Turbo |
NB21 NB2 |
Nano Banana 2.1 · Nano Banana 2 | K26 K25T KO1 |
Kling 2.6 · 2.5 Turbo · o1 |
NB2L |
Nano Banana 2 Lite | K21 K21M K20M K16 K15 K10 |
the older Kling tiers |
NB |
Nano Banana (original) | V31 V31F V31L |
Veo 3.1 · Fast · Lite |
GI2 |
GPT Image 2 | OMNI |
Gemini Omni Flash |
GI25F |
GPT Image 2.5 Flare | SD25 SD20 |
Seedance 2.5 · 2.0 |
GI25SB |
GPT Image 2.5 Sunburst | SD20F SD20M |
Seedance 2.0 Fast · Mini |
SR5P SR5F SR5L |
Seedream 5.0 Pro · Flash · Lite | MGC MGP2 |
Magnific Creative · Precision V2 |
TS2 THF2 TCGI TLR2 |
Gigapixel Standard 2 · High Fidelity 2 · Art & CGI · Low Resolution 2 | TVP4 TVR TVG |
Topaz video Proteus 4 · Rhea · Gaia CG (cloud and local alike) |
TRD TSMX TRC3 |
Topaz Redefine · Standard MAX · Recover 3 | FX3 FXO |
FLUX 3 Image · FLUX Outpaint |
- date is the day it was written,
yymmdd. - job is the first eight characters of the ledger's job id: the traceability key. It is what makes every name unique (two graphs called the same thing collide on nothing), and it is how a file finds its row: right-click any picture → Find in ledger shows the run that made it — model, node, graph, prompt, parameters, cost, date — and opens the node's 🕘 history on that row when the node is on the canvas. It works for files with the older random names too, as long as a ledger row lists them.
Files you bring in (outputs/inputs/) keep your own filename: tournesol_facade-study_facade-photo_in_260923_ab12cd34.jpg (paste for a clipboard image; the same picture dropped twice on the same day is kept once). Exports keep their readable stems in outputs/exports/.
Files made before this convention keep their old names for good: renaming them would break the graphs that use them.
Path length. A full name is 55 to 75 characters. Windows caps a whole path at 260 characters unless long paths are enabled, so a project rooted very deep on a server has less room for the name than for the folders. Brut never fails on that: when the full path would not fit, the name drops the project and graph segments, then the node, and keeps the traceable tail (date_job), which is shorter than the old random names ever were. A shallow project root on the server stays the comfortable choice.
Your own pattern. File ▾ → Output file names… sets a per-project pattern from the tokens {project} {graph} {node} {provider} {model} {model_id} {date} {time} {job} ({model} is the short code above, {model_id} the full model id; {job} is required; the default is {project}_{graph}_{node}_{provider}_{model}_{date}_{job}). The dialog shows what a file would be called; an invalid pattern is refused with the reason. It is set on each computer: on a shared NAS project each machine names its own files.