BRUT DOCS getbrut.app ↗

Marcel, the companion

Every studio has that colleague who's seen everything — knows which film your lighting reference is from, which tool does the job cheapest, and what you tried last Tuesday. In Brut, that colleague is Marcel (named after Marcel Breuer — Bauhaus, brutalism, the Brut lineage).

His panel is open when the app starts, showing the conversation view (the Raw events toggle adds every technical event); the Marcel button on the left rail (the pulse icon) hides and shows it. The panel is two things at once:

The studio timeline

A chronological diary of everything that happens in the project — runs, results, planner reasoning, errors, and your conversations. It's saved with the project (a file inside the project folder), so it survives restarts and travels with a NAS share or a folder export. On a shared project, everyone writes to the same diary, and entries are tagged with who was signed in.

A run finishes and Marcel remarks on it in the timeline; the rail badge counts what you haven't read
The **Raw events / Chat only** toggle switches between every technical event and just the conversation. When the panel is closed, anything Marcel says on his own — a remark, a suggestion, a failure diagnosis — **badges the Marcel button** on the rail, so ambient commentary never lands invisibly.

A long diary stays comfortable: the panel opens at the newest message and follows the conversation as it streams; scroll up to read history and it stops following (a ⤓ Latest button brings you back). Only the newest stretch renders by default — ⋯ Show earlier unfolds the rest in place. And the 🔎 search at the top of the panel searches the whole diary — every chat, plan, and failure back to the project's first day, not just what's on screen — with dated results.

The chat

Type at the bottom of the panel and Marcel answers — streamed live, in whatever language you write. Enter sends, Shift+Enter starts a new line, and the box grows with your message. The whole panel resizes too — drag its left edge to make Marcel as wide as you like (double-click the edge to reset). He knows Brut inside out: every model in the catalog with its real price, every node and how its ports wire, and the whole of this documentation. Ask him things like:

He recommends only from the catalog — if a price isn't known, he says so instead of guessing, so "which model for this job?" gets a grounded answer, not a vibe.

The artistic advisor

Marcel is a seasoned artistic director, not just a manual. Ask him for direction and he answers with concrete, citable references — named photographers, films, DPs, architects, eras — never "make it more cinematic."

He carries a style library: a curated set of named looks across photography (Stoller, Shulman, Binet…), archviz conventions (the MIR mood, the clay model, the dusk money shot…), cinema (Deakins nights, Villeneuve scale, Kubrick symmetry…) and current trends — each with a description, ready-to-use prompt language, and which models render it well. Ask "give me three directions for this facade" and he'll cite them by name, with the prompt fragments to try. It's yours to shape: ask Marcel to add or change a look, rewrite one, drop what you disagree with, add the studio's own.

Show him your work. Four ways, all landing on the same message:

Ask "what would you change about the light?" — Marcel actually looks at it. A few practical notes:

Attach a still with 📎, ask about the look, the answer streams in with real references
- Images are downscaled to ≤2048px for the conversation (provider request limits — your originals are untouched, and generation always uses full resolution). - Attachments ride **only the message you send them with**. Later turns re-send text alone, so an image-heavy conversation doesn't re-bill the pixels on every reply. Naming the same node again sends its stills again. - An image-heavy turn costs more than a text turn — the exact number lands in the ledger per call, like everything else. - A message carries up to **50 stills**, and at most 18 MB of them, whatever the brain (that is Brut's own cap, set under every provider's request limit). A bigger set goes over two messages; remember that each message re-sends only its own images. - Marcel looks at stills; videos can't be attached (yet). **Send to chat** shows greyed on a clip for that reason. - He only sees what rides the message: if he says he can't see something, name the node or attach it.

His replies are formatted. Bold, lists, headings and quote blocks render as such in the chat, so a prompt you copy out of a reply comes out as clean text, ready to paste into a node.

Marcel acts — building and running the graph

Marcel doesn't just advise; ask him to do it and he works on your actual canvas:

"Give me a 6-shot dusk study of this render."

He'll place the nodes, wire them, set the prompts and parameters, and offer to run it — you watch each step land on the canvas as he narrates. His toolkit is the same as yours: add, wire, rewire, edit, delete nodes, drop in a saved library composite (yes, the whole Cinema Team) and set its knobs by name, read any node's output, search the project diary, and run nodes.

Ask for a graph and Marcel builds it, wired and tidy, the actions folded into one card; a paid run still asks you first
In the chat, his actions fold into a compact **"🤖 N actions on the canvas"** block between his messages — expand it to see every step, or ignore it and just read the conversation. When he names a node (`multi_shot-21`), that id is visible in the node's own title bar — click it there to copy it. And the layout isn't his problem (or yours): whatever he builds is **auto-arranged into tidy columns** that follow the wiring, placed **where you're working** — beside the nodes it connects to, or centered on your current view when it stands alone, always nudged clear of your own nodes, which are never touched. The same layout is available for any graph via the **⌗ Tidy** button on the rail — the whole graph, or just the nodes you have selected (Ctrl+Z undoes it, like everything).

Three rules keep this comfortable:

He can also save a style: when a look you've been chasing together deserves a name, he'll offer to add it to the style library — only with your go-ahead, and only citing models that exist in the catalog.

How present? The Assist slider

Marcel can also speak unprompted — and how much is entirely your call. The slider at the top of the panel has four levels; each one adds exactly one behavior to the previous, so you always know what you've turned on (and what it can cost):

Level What Marcel does
Off Nothing. The timeline stays a passive journal; Marcel never calls a model on his own — not even the quiet taste passes.
Reactive Answers when spoken to, and diagnoses failures: when a run errors, one short remark names the likely cause and the fix to try first. He knows Brut's classic traps on sight — Gemini quietly refusing a picture (usually because of an input image), an error on your first call that means billing isn't switched on, replies cut short.
Narrator + run commentary (a sentence or two when a run that actually generated something finishes — free replays stay silent, and re-running an already-generated graph is exactly that) and a recap when you open a project: where things stood, what finished or failed while you were away, what's still running. If nothing happened since the last recap, he doesn't spend the call at all.
Partner + unsolicited 💡 suggestions — an artistic direction, a model swap (always with real catalog prices), a next step — appearing as small cards in the timeline.
Off, Reactive, Narrator, Partner: each level adds exactly one behavior
Off, Reactive, Narrator, Partner: each level adds exactly one behavior
The setting is per-account, so your level doesn't change a colleague's. Ambient remarks run on the cheap **narrator lane**, so a remark costs **a fraction of a cent** on Haiku or Gemini Flash. Every one of them is a ledgered call you can verify, like everything else. And when there's genuinely nothing worth saying, Marcel says nothing — silence is a designed outcome, not a failure.

Memory — Marcel learns your taste

Marcel keeps two plain-text memory documents, both stored on your disk and both yours to read and edit (the 🧠 Memory button in the panel):

He builds the profile as you work. In quiet moments — when you switch projects — Marcel runs a cheap pass over your recent prompts, re-rolls, and rejections and proposes a note or two: "Noticed you keep re-rolling golden-hour skies → prefers cool, overcast light." Each proposal appears in the timeline as a card you rule on — Keep (folds it into your profile, and you can Edit the wording first) or Discard. Nothing is locked in without your say-so; until you rule, it's treated as a working hypothesis.

Inference cards: Keep, Discard or Edit what Marcel thinks he learned
Inference cards: Keep, Discard or Edit what Marcel thinks he learned
**The taste interview.** The first time Marcel can run (once you've added a text key), he offers a short, entirely optional interview — what you make, references you love, pet peeves, preferred vibe. You don't have to describe your taste from a blank page: two rows of **chips** (*drawn to* golden-hour warmth, clinical minimalism, brutalist mass… / *allergic to* sterile renders, HDR crunch, plastic skin…) write editable sentences straight into your answers, so you react instead of invent — and every word stays yours to rewrite before anything is sent.

Then, instead of filing your answers raw, Marcel can distill them: one call on his brain lane reads what you wrote and proposes back a structured profile in his own words — palette, light, mood, composition, references, hard NOs — "here's what I think you like — correct me." The proposal appears in an editable box; fix anything that's off, then Accept to make it your taste profile (or Redo for another read, or go back and answer more). Prefer no model call at all? Save without distilling files your raw answers exactly as before. The distillation is ledgered like every Marcel call — a few cents on a flagship model.

The interview is never one-shot: relaunch it any time from Marcel's memory (🧠 → Redo the taste interview) or ⚙ Settings → Marcel. Re-running pre-selects the chips that match your current profile, and nothing is overwritten until you accept the new proposal — the rest of your profile (learned notes, hand edits) stays untouched.

Bring your own brain

Marcel runs on your own text-model key, like everything else in Brut — there is no Brut server in the conversation. Add a Gemini, OpenAI or Anthropic key and chat works; without one, the panel remains a fully working journal and the composer shows a quiet add a key link.

One OpenRouter key also works. If you hold no native text key but have an OpenRouter key, Marcel's lanes route through it — chat, ambient narration, acting, everything — visibly (the composer shows ⇄ runs via OpenRouter), at pass-through token rates, so long conversations stay as cheap as on a direct key. A native key added later takes over automatically.

Two model lanes, both pickable in ⚙ Settings → Marcel:

Both lanes carry a Reasoning dial and a Thinking switch under their pickers, for full control over speed and cost on each lane. Reasoning sets how hard the model thinks before answering: deeper costs more. It works on the GPT-5.6 and GPT-6 models and on Claude Sonnet 5.5 / Sonnet 5 / Opus 4.8 / Opus 5 / Opus 5.5; on a model without it the row shows not supported rather than hiding. On a direct OpenAI key the brain lane's Reasoning is fixed at none, so that Marcel can act on the canvas (the row says so; the narrator lane keeps its dial). GPT-6 Astra and GPT-6.1 Sol can advise but can't act on a direct OpenAI key for now; through OpenRouter they can. The Thinking switch is for Claude: off is faster and cheaper when you don't need deep deliberation (on Sonnet 5.5, off means no thinking before acting). Opus 5.5 has no switch (its thinking is always on), so its cheap setting is a low Reasoning. Details on the OpenAI and Anthropic pages. Every call's ledger row records the settings it ran with.

Settings, Marcel tab: brain, narrator and prompt cache, each with its model and dials
Settings, Marcel tab: brain, narrator and prompt cache, each with its model and dials
## What it costs

Every Marcel call is ledgered like a generation: provider, model, exact token counts reported by the provider, and a dollar estimate from the catalog's per-token prices. Click the spend readout in the toolbar to open the full ledger — per-lane totals up top, then every call newest-first, Marcel's rows tagged with what kind of turn they were.

Real numbers from a measured full-day session (your ledger will show yours):

When Marcel acts, one reply may take several model rounds (think → act → look at the result → continue). Each round is its own ledger row, so an acting turn costs a few text calls rather than one — still cents; the generations he triggers are the real spend, and those sit behind the confirm.

Privacy

The conversation goes from your machine straight to your chosen text provider on your key, and the diary, your taste profile, and project notes never leave your disk — see Privacy. Your taste profile is per-account and private; it is never included in an export or synced anywhere. When exporting, a checkbox controls whether the journal travels: on by default for folder exports (backups), off by default for .brutpack handoffs. Project notes travel with the project either way.