BRUT DOCS getbrut.app ↗

Never pay twice

The cache is a feature with a euro sign on it. Every node remembers exactly what it was given; unchanged inputs mean the cached output is reused and nothing is billed. This is what makes iterating on a graph affordable.

How it works

When a node runs, Brut checks whether anything that affects the result changed since its last successful run: the prompt, the model, the parameters, the input images, the mask. If nothing did and the node still holds that output, the node is skipped: status cached, cost $0.

Change any input and that node, and only that node, re-pays. A revision round that touches three shots costs you three shots, not the whole graph.

Change one prompt in a four-node graph and Run: only that node bills, the rest answer from cache
Moving a graph is not a change. A project that moves (**Save project as…**, a `.brutpack` opened on another machine, a NAS share under a different drive letter) keeps its cache: a move stays free.

Re-run a finished graph and everything shows cached. That's the point: your outputs are already on disk, and replaying them is free.

What counts as an input

Everything that would change the result:

What doesn't count: cosmetic things like node position or size. Moving a node never re-pays.

Pins — freezing a result

Sometimes you want a specific past result to stay, even as you tinker upstream. Click the 🕘 history button on a generation node to open its ledger history — every result that node ever produced — and 📌 pin one. A pinned node emits that exact output on every run, free, until you unpin. Pins beat both the cache and a fresh generation. Hover a row's thumbnail for a quick preview; click it for the lightbox, where ←/→ walks the node's whole history at screen size.

Pin any past result from the node's history; it stays the output, free, until you unpin
Multi-Shot tiles pin individually, so you can lock the three keepers from a contact sheet and keep re-rolling the rest.

Re-roll — a fresh take on purpose

The cache answers ▶ for free, which is right until you want another take of the same prompt. Generation nodes (Text → Image, Image → Image, Compose, Inpaint, Annotate & Correct, Image → Video) carry a ↻ re-roll button in their title bar: it forces one fresh generation with the inputs unchanged (this node bills again; everything upstream still replays from cache). The take it replaces is not lost: it stays in the node's 🕘 history, pinnable like any past result. A pinned node can't be re-rolled (the pin would win): unpin first, the button says so.

Local operations are always free

Some nodes never touch a provider at all and run entirely on your machine: Conform with its crop and pad methods (its extend method paints the missing part with a paid model), Sequence (video assembly), Layers, Compare, Preview, and the Sketchpad's drawing and flattening. They cost nothing and aren't metered.

Seeing the spend

The toolbar shows a running spend estimate; hover it for a per-provider breakdown. Every generation, finished, failed or cancelled, is recorded in the project's ledger, with full context (node, model, cost) — so you can always answer "what did this cost, and who received the money?"