Campaigns
Hand braaand a brief and it produces a whole batch of on-brand creatives, ready to review.
A campaign is the fast way to go from an idea to a stack of finished creatives. You describe what you need; braaand picks suitable templates, writes copy that fits the message, renders every variant, and scores them. You review the results on a board, keep the ones you like, and ship.
Every campaign is a workflow — a durable node pipeline that keeps working even if you close the tab. This page is the quick path; when you want to see or change how the creatives get made, open the run on its canvas (workflow builder) — every run is a pipeline you can inspect, tweak and re-run.
Starting a campaign
Three ways in, all the same engine underneath:
- Just ask. In the command palette, say what you want: "give me three creatives about saving the forest" or "here's our spring campaign, I need ten creatives." braaand picks a recipe and launches a run, then hands you a live progress card with two ways to watch it — a calm build screen, or the node editor showing the pipeline work in real time. Runs keep going after you navigate away, and you get a notification when they're done. A small ask uses the plain
Batchrecipe (no scoring — you're the judge); a bigger one usesReviewed campaign; "five variations of this one" usesVariations of this, seeded from the creative you're pointing at. - The Workflow Engine. Workflow Engine → New workflow opens a blank canvas at once; the arrow beside it lists the recipes — a built-in shape or a graph you saved, loaded as a draft. On any canvas, ⌘K is the quick brief: describe the campaign and the agent sets the pipeline up in front of you.
- From your own tools. An external system (or a coding agent like Claude Code) can hand braaand a brief over the API or MCP and get back a link — see For builders below.
You don't have to pick templates by hand — braaand matches the brief to the templates that fit, including how much copy each layout holds, so a punchy one-liner and a detailed list each land on the right kind of template. But you can: pin exact templates on the Templates node and matching is skipped — the run builds on your picks, in the order you pinned them.
A campaign launched from a plain brief gets the default pipeline: find templates, build the creatives on them, score, then route the batch by score — 75 and up lands in an "Approved" section on the board, the rest in "Needs review" — so the results arrive pre-sorted instead of loose. Want different routing, per-template treatments, extra editing passes, or your own board sections? That's all wiring — see the node reference.
Reviewing the results
The run's creatives land on a board: pre-sorted sections, keep/discard on every card, a chat that iterates on the batch (or on exactly the cards you select), and a public share link for sign-off that needs no braaand account. See Boards.
Where it all lands
Every run files itself into a collection, named from the run unless you name one at launch. The collection gathers the whole campaign in one place — the run, its board, every creative, and what it cost. Rename an auto-named collection to make it a proper campaign, and launch follow-up runs into the same collection to keep building on it.
Variety from few templates
The same template in a different color scheme reads as a fresh creative. So even a brand with only a couple of templates gets a varied batch: braaand recolors across your color schemes (and writes a fresh angle each time) to give you range, not repeats.
Campaign badges
Some campaigns have their own identity mark — an awareness week's stamp, an annual count's sticker. The Campaign Badge Hero template is built around one: a badge centered over a mood photo, with the dates in an accent banner underneath. The badge slot works in two modes:
- Generated per campaign. With AI generation enabled (Brand settings → Imagery), the run generates sticker-style badge artwork from the brief — an illustration of the campaign's subject with a die-cut outline and the campaign words — so any topic gets its own badge without a designer in the loop.
- Real artwork, pinned and locked. When the campaign has designed badge artwork, put it in the slot and lock the element (inspector → Agent Guidance → turn off "Agents may edit content"). A locked slot is untouchable by every automated pass — no brief, no imagery step, no rerun will ever replace it.
One sharp edge to know: the lock lives on the template, and templates are shared across campaigns — so a locked badge rides into every later campaign built on that template, exactly as locked. It happens silently at build time (the review judge will flag the mismatch, but the creative is already made). So either unlock the slot the day the campaign ends, or — cleaner for a brand that runs many campaigns — keep the shared template generative and pin the real artwork on a dedicated campaign copy of the template instead, named after the campaign so the matcher reads what it's for.
The same pin-and-lock move protects any slot whose exact image is the point — a partner logo, a product shot, a person. See image slots for how the flags compose.
For builders
Campaigns are also an integration surface. An orchestrator (your own service, a campaign tool, a coding agent) can delegate the entire creative job to braaand and preview the results in its own product:
- Hand over a brief —
POST /api/brands/{brandId}/factory/workflows(or thestart_workflowMCP tool) with{ "brief": { "raw": "..." }, "count": 10 }— the brief is free text, so how many creatives you want goes incount, not the prose. AddtemplateIdsto pin exact brand templates instead of automatic matching. For control over the pipeline itself (how many creatives, whether to score, how to route), pass a nodegraphinstead, or use thebuild_pipelineMCP tool. Passcollection(a campaign name, created if needed) orcollectionIdto say where the work files; otherwise it auto-files by run title. You get back{ workflowId, boardId, collectionId, boardUrl, shareUrl, manifestUrl }. braaand owns the rest. - Poll the manifest —
GET .../factory/workflows/{workflowId}/manifest(orget_workflow) returns the run's live status;get_boardreturns the board's full content — every creative that's landed on it (from this run or any other), current render URLs (per format), score, and keep/discard state. - Stay in sync — render URLs are content-hashed, and manifests are computed fresh on every read, so any edit (on the board or ordered through your tool) shows up on the next poll. No webhooks needed.
- Hand a human a link —
shareUrlis a public, read-only review page that needs no braaand account, so you can pass it straight to whoever signs off. (boardUrlis the same review surface for someone signed in to the brand, where they can also keep/discard and iterate.) A coding agent can simply produce the batch and pass the link along.
The authed manifest's render URLs are brand-access gated — fetch them server-side with the same token you used to start the run. The shareUrl and its public manifest (/api/share/board/{token}) carry a delivery token that authorizes just that board's renders, so a recipient with the link can view them without an account. Mint or revoke the link any time with POST / DELETE .../boards/{boardId}/share.
For a full accounting of one run — what it built, what it scored, what it cost — pull its shareable log: GET .../factory/workflows/{workflowId}/log (or the get_workflow_log MCP tool). Every id in it resolves back to what it is via GET /api/resolve/{id} (or resolve_id).
Cost
Campaign production draws credits from the plan that pays for the brand — the Team pool for a brand that belongs to a team, the brand owner's plan otherwise — the same pool the in-app agent uses. A brand whose pool is empty (or whose plan doesn't include AI) gets a clear "payment required" response instead of a run.