Providers overview
Brut is bring-your-own-key. You add a key for each provider you want to use; the engine calls that provider directly, on your key, at their price. Brut never holds a key that bills anyone but you, and never marks up a token.
Adding keys
⚙ Settings on the left rail (or the setup wizard) shows every provider as a card — its role, and one status line — grouped by what it does (generation, aggregators, upscalers). Click a card to paste a key (validated on save); the switch on the card turns a provider off without deleting anything. Keys live in your OS keychain — never in a graph, never sent anywhere but the provider. You can also set them via environment variables before launching the engine.
The one rule that trips everyone up
Image and video models need a billing-enabled key. Free tiers usually have zero generation quota, so your very first call returns a 429 — that's billing not enabled, not throttling. Turn on billing in the provider's console and it clears.
The providers at a glance
| Provider | Does | Key |
|---|---|---|
| Google Gemini | Images (Nano Banana) + text/planning | AI Studio API key |
| OpenAI | Images (GPT Image 2) + text/planning | platform.openai.com key |
| Kling | Video (image→video) via API packs | ak:sk or api-key-kling-… |
| Kling (subscription) | Same models, billed to your kling.ai plan (~3× cheaper) | CLI login, no key |
| Google Veo | Video (image/text→video) | rides your Gemini key |
| Anthropic | Text/planning only (Claude) | Anthropic API key |
| Seedance | Video with native audio | BytePlus ModelArk key |
| Magnific | Image upscaling (creative + precision) | Magnific API key |
| Topaz Labs | Image + video upscaling (Gigapixel, Proteus/Rhea/Gaia) | Topaz API key |
| Topaz Video AI (local) | Video upscaling on your own GPU — free | no key; the desktop app's license |
| fal.ai | Route only — serves Nano Banana / Kling 3.0 / Seedance / Veo when you hold no native key | fal.ai dashboard key |
| Higgsfield (subscription) | Route only — serves Nano Banana 2 / Seedance 2.0 on your higgsfield.ai plan credits | CLI login, no key |
| Replicate | Route only — Nano Banana Pro/2, GPT Image 2, Kling Omni, Veo 3.1 (+end frames), Seedance (+t2v) | replicate.com token |
| OpenRouter | The near-total route — all text (planning + Marcel), the image family with native knobs, and the video set (Kling/Veo/Seedance) with per-job billed cost | openrouter.ai key |
Model routes — native first, aggregator fallback
Some models can also run through an aggregator — a third-party service (like an aggregator subscription or a multi-model API) that resells the same model under its own billing. Brut treats those as routes, with three hard rules:
- Your direct key always wins. If you hold the native provider's key, the generation goes straight to the provider, exactly as before. Routes only activate for a model when you have no native key but do hold the aggregator's credential.
- Routing is always visible. A routed model shows a ⇄ runs via … chip on the node, the run confirm says who bills, and the ledger records it. Nothing routes silently.
- The catalog stays curated. An aggregator credential never adds models to Brut — the model list is exactly the one Brut ships, whatever route serves it. Estimates for routed runs come from the route's own measured price, or are absent; aggregators typically charge a margin over the direct API, and the node says so.
Availability is resolved once at engine start and re-resolved the moment you add or remove a key — adding an aggregator credential mid-session lights up the routed models immediately. Four route providers ship today: OpenRouter (one key for text + images with Brut's native menus + the whole video set — billed cost recorded per job), fal.ai (API key — Nano Banana family, GPT Image 2, Kling 3.0, Seedance 2.0, Veo 3.1), Higgsfield (subscription plan credits, browser sign-in — Nano Banana 2, Seedance 2.0) and Replicate (API token — Nano Banana Pro/2, GPT Image 2, Kling Omni, Veo 3.1 incl. end frames, Seedance incl. text→video). When several credentials exist, that same order decides.
Text models route too: with an OpenRouter key (or, text-only, a fal.ai key) the planning models — Refine, the Multi-Shot planner, the cinema crew, Text→Text — run at pass-through token rates when no native text key exists. Marcel routes through OpenRouter too — chat, ambient narration and acting, with Anthropic prompt caching passing through (verified live), so one OpenRouter key is a complete text seat.
Deciding between direct keys and an aggregator? The full pros/cons and a feature-by-feature capability matrix live on Keys vs aggregators.
Text vs generation
Gemini, OpenAI and Anthropic double as planning models — they power the Refine node and the cinema crew, where you pick which LLM writes your treatment or shot plan. Text models never enter the paid generation queue; they're cheap and separate.
Provider errors (4xx/429) are surfaced verbatim on the node — Brut never masks them, so what the provider says is what you see.