Command line
Drive braaand from your terminal, or wire it into scripts.
If you work in a terminal, the braaand command does everything the AI connector does. It's handy for scripting, and for setups like Claude Code.
Set it up
npm install -g braaand
braaand auth loginEveryday commands
braaand whoami
braaand brands list
braaand brands info my-brand
braaand system-templates list
braaand system-templates instantiate hero-statement --brand my-brand
braaand templates list my-brand
braaand templates create my-brand "Campaign Quote" --from ./template.json
braaand render my-brand <creativeId> --all-formats
braaand render batch my-brand <creativeId> <creativeId>Add --json to most read commands for output you can pipe into other tools.
The synced brand folder
braaand sync mirrors every brand into one canonical local folder — assets, build-ready dist/ token artifacts, guidelines, and agent instructions. That folder is what coding agents build from; see The synced brand folder.
braaand sync # everything → ~/Documents/Braaand (default)
braaand sync status --json # root + per-brand version/staleness (agent discovery)
braaand sync set-root ~/Sites/Braaand
braaand path my-brand # print a brand folder's pathTemplate work
System templates are the shared catalog. Use them as starting points: instantiate one into a brand, then tune the resulting brand template. If a client needs a layout that does not exist in the catalog, create a brand template from JSON.
braaand system-templates instantiate hero-statement --brand my-brand --name "Hero Statement"
braaand templates create my-brand "Checklist Note" --from ./template.json
braaand templates update-element my-brand <templateId> headline --patch '{"formatOverrides":{"9x16":{"styles":{"fontSize":72}}}}'Brand templates can include the full document surface: formats, elements, guides, clusters, groups, brandFit, styles, concept typeStyles, and roleColors.
Lists of subjects
A Set is a list of subjects — candidates, municipalities, audience segments — that a pipeline's For each node turns into one creative apiece.
braaand sets create my-brand --name "Candidates 2026" --csv ./candidates.csv
cat kommuner.csv | braaand sets create my-brand --name "Kommuner" --csv -
braaand sets list my-brand
braaand sets update my-brand <setId> --csv ./corrected.csv # replaces every row
braaand sets find-person my-brand "Frida Karlsson"--csv takes a file path, - for stdin, or the text itself. find-person searches your Sets and every photo carrying person details, and refuses to guess between two people who share a name — it returns the candidates instead, with the detail that tells them apart.
If your subjects are people you already have photos of, you may not need a Set at all: point the For each node straight at a collection or tag of images and it reads one subject per photo.
Converting images
images convert compresses, converts, and resizes local images, and can add them straight to a brand's asset library. It walks folders recursively, so you can point it at a whole directory. The conversion runs server-side, so nothing is charged as AI usage.
# Convert a folder of photos to WebP and add them to a brand's library
braaand images convert ./photos --brand my-brand --to webp --optimize --type photo --tags product
# Or write the converted files to a local folder instead
braaand images convert ./photos --out ./web --to avif --quality 55Because it runs as a subprocess, this is the right tool when a coding agent (like Claude Code) needs to "convert these and add them to brand X": the image bytes stream through the command, never through the conversation.
Flags: --to webp|avif|jpeg|png, --quality 1-100, --max <px> (longest edge), --optimize (web-friendly defaults), plus --type and --tags for the library.
Generating images (AI)
images generate creates a new image from a text prompt. Unlike images convert, this uses credits (billed to the brand's pool — roughly 2, 18, or 71 credits at low, medium, or high quality) and takes 15-60 seconds.
# Generate and save into a brand's asset library
braaand images generate "misty pine forest at dawn, soft golden light" --brand my-brand --aspect 16:9 --quality medium
# Or download it locally instead
braaand images generate "abstract blue gradient texture" --out ./generated --aspect 1:1 --quality lowSaved images land tagged generated / ai / agent and are analyzed so focal-point alignment works in templates. Write rich prompts (subject, composition, lighting, mood) — not stock-search keywords.
Launching campaigns
workflows start hands braaand a brief: it matches templates, writes on-brand copy, then renders and scores a batch on a durable run that ends in a share-ready review board. Add --templates to pin exact brand templates instead of letting braaand match — matching is skipped and the run builds on your picks in order.
braaand workflows start my-brand --brief "spring campaign for our new espresso line" --count 8 --wait
braaand workflows start my-brand --brief "May 30 tasting event" --templates <id>,<id>
braaand workflows status my-brand <workflowId> --watch
braaand workflows log my-brand <workflowId>Runs use the brand's plan credits and keep going after you close the terminal.
Running pipelines
A pipeline recipe is a node graph — score, route, board sections, variation fan-outs — with slots you fill in at run time. Three ship with every brand, no setup:
| Recipe | Slots | What it does |
|---|---|---|
batch |
brief, count |
N creatives from a brief, delivered to a board. No scoring. |
reviewed-campaign |
brief, count, goal?, tone?, audience? |
The default campaign: scored and pre-sorted into Approved / Needs review. |
variations-of-this |
creativeId, count |
N fresh takes on ONE creative you already have. |
You can also save your own from the pipeline canvas in the web editor (or braaand pipelines create from a graph JSON) and launch it anywhere. A canvas save automatically makes the brief a required slot (and the creative count an optional one), so --bindings '{"brief":"…"}' is all a re-run needs; pin templates on the Templates node before saving and the graph becomes a fixed-layout recipe — same templates, fresh brief every run. A saved recipe named the same as a starter shadows it, which is how you customize one.
braaand pipelines list my-brand
braaand pipelines run my-brand batch --bindings '{"brief":"three posts about the reef","count":3}'
braaand pipelines run my-brand variations-of-this --bindings '{"creativeId":"crv_…","count":5}'
braaand pipelines run my-brand <ptl_id> --bindings '{"topic":"winter sale"}' --mode run--mode run (the default) launches a durable run and spends credits; --mode draft sets it up on the canvas for a human to press Run. This is the same durable engine the web editor and MCP use — a batch launched here survives you closing the terminal.
Deleting safely
Destructive commands ask you to confirm:
braaand brands delete my-brand --yes --confirm-brand-id my-brand
braaand templates delete my-brand <templateId> # checks where it's used first