BRUT DOCS getbrut.app ↗

Never pay twice

The cache is a feature with a euro sign on it. Every node hashes its inputs; 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 computes a stable hash of everything that affects its output — the prompt, the model, the parameters, the input images, the mask. If that hash matches the last successful run and the node still holds that output, the node is skipped: status cached, cost $0.

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

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.

Multi-Shot tiles pin individually, so you can lock the three keepers from a contact sheet and keep re-rolling the rest.

Local operations are always free

Some nodes never touch a provider at all — Conform (aspect-ratio crop/pad, local PIL) and Sequence (video assembly, local ffmpeg) run entirely on your machine. 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 terminal generation is appended to the project's ledger, with full context (node, model, cost) — so you can always answer "what did this cost, and who received the money?"