BRUT DOCS getbrut.app ↗

The cinema crew

A team of AI agents that plan a film from your stills. Each is a planning node that reads your images and passes a plan document (JSON on a text wire) down the chain. Every agent runs on the LLM you choose — Gemini, GPT or Claude — on your own key; on models with a reasoning dial (GPT-5.6, details; Claude Sonnet 5 / Opus 4.8, details) a Reasoning select appears — deeper thinking for harder treatments, billed as output tokens. For the end-to-end story, see the Cinema Sessions walkthrough.

The chain is: stills → Scenarist → Artistic Director → DoP → Script Supervisor → Storyboard, then on to Film Shots.

Scenarist

Writes the treatment — the story and beat structure — from your stills. You pick a brief (or custom, where your notes are the brief). Its contract enforces one shot = one still, so grounding stays honest.

It may also invent shots — compositions no still contains (detail close-ups, reveals, human presence, pull-back endings; the Cinematic Reel (flourish) brief leans into this). An invented shot names the stills that anchor it and carries a written keyframe prompt; Brut generates that missing frame from your stills on the Storyboard before any video runs, so the identity never drifts. Still reuse is disciplined by contract — a still may directly ground at most two shots, never back to back — and the "Invent every shot" switch goes all the way: stills become references only, every start frame generated.

Artistic Director

Sets the look: a style bible and per-shot art direction — palette, lighting, mood. Choose a style (or custom). It builds on the Scenarist's treatment. On invented shots it also styles the keyframe prompt (palette, light, lens character) — composing the frame is exactly its job.

DoP (Director of Photography)

Turns the treatment into an executable shot plan — the camera language, motion, and which still grounds each shot, as a concrete list of clips with durations. This is the plan Film Shots executes.

Script Supervisor

The continuity pass: harmonizes speed, light and palette across all the clips so the sequence feels like one film, not a pile of clips. Grounding is code-locked so it can't drift off the stills.

Storyboard — the edit bay

Not an agent but the crew's review surface. The Storyboard turns the plan into an editable board of shot cards: per-clip start/end frame swaps with thumbnails, editable and lockable prompts, add/reorder/remove shots, dynamic position badges. It emits concrete image paths, so Film Shots downstream only needs the plan wire.

Invented shots arrive frameless with a 🎨 Generate keyframe button: an image-to-image render on the shot's anchor stills (identity clause appended, conformed to the film's aspect — cents, priced on the board next to the image-model picker). Keyframes cache on their prompt + anchors, re-rolls, 📌 pins, 🕘 opens the card's history — every keyframe it ever generated, from the project ledger, any past take re-pinnable as the start frame for free — a wired image overrides, and the start selector can still ground the shot on a real still instead. An invented shot with no keyframe blocks that clip in Film Shots — it is never silently sent as text-to-video.

The board also owns the film's aspect ratio: a dropdown (defaulting to the DoP's format) that conforms every keyframe and travels in the emitted plan. Changing it re-crops the kept raw renders for free — no regeneration.

▶ on the board batch-renders every pending keyframe behind one itemized confirmation (count, per-frame price, total); the per-card 🎨 stays for one-offs. A prompts on/off switch declutters the cards, and the whole pre-wired chain ships as the Cinema Crew library template (File ▾ → Browse library…).

End frames, on demand. Each card's end selector is none · a still · 🎨 generate. Pick 🎨 and the card grows a second frame block to the right — same image box, own in-socket and out-plug, own tools — for a generated end frame that continues the start frame: rendered image-to-image from that start frame alone (never from the reference stills), continuity + identity clauses appended, conformed to the film's aspect. The crew writes its prompt: an end-frame writer embedded in the Storyboard (borrowing the LLM and reasoning dial of the crew node on the plan wire) sees the start frame image and the clip's shot plan and drafts the frozen final frame of that one move; ✎ / 🎨 open a review — start frame beside the editable draft, ✎ re-drafts, Generate renders — so nothing renders from a prompt you haven't read. ↻ re-rolls, 📌 pins (surviving prompt edits and a re-rolled start; otherwise a new start orphans its end), 🕘 = the end frame's history. ▶ on the board reviews every armed card in one modal after the start keyframes. An armed end frame still pending blocks its clip downstream; a video model without an end-frame input runs the clip from the start alone and the Film Shots table says so on that row.

Every frame block is also a source: the plug on its image edge carries that frame — the start frame (keyframe, wired image or grounded still) or the end frame — and a pending frame delivers nothing; the plug at the card's bottom-right carries the clip's final prompt (overrides and wired prompts applied) for reuse or refinement anywhere. Card images can be dragged straight onto the canvas to detach into a ready-filled Image In.

📖 Review — read it like a document, direct it like a director

The raw JSON on the node face is for the wire, not for you. Every crew node has a 📖 Review button that opens the document as a document: the title as a headline, the analysis as prose, the style bible as labeled sections, every shot a numbered card with its prompt, camera, duration and grounding badges.

Two verbs live in that modal, with two costs:

They compose: fix wording directly, comment the conceptual asks, revise — the revision starts from your edited text.

How the plan flows

Agent output is editable text. Hand-edit a plan and your changes flow downstream while inputs are unchanged; change an input or roll again (🎲) and the agent regenerates over your edits — deliberately. The planner sees your stills (downscaled for the model's request cap; generation always gets full resolution) and returns strict JSON, whose analysis is surfaced in the Activity panel.

Grounding is code, not prose. One clip animates one keyframe — a still of yours, or a frame generated from your stills; the DoP's still-index references are reconciled in code, invented shots are blocked until their keyframe exists, and an anti-shake stability clause is appended to every clip — so the plan you approve is the film you get.

Next

Video — shoot the plan, review the clips, cut the sequence.