Agents

Characters

Reusable people for AI generation — the same person, recognizably the same, across every image and video.

AI image and video models have no memory. Ask twice for "our spokesperson Anna" and you get two different people — which is fine for stock moods and fatal for anything built around a real face: a candidate campaign, a founder series, a recurring brand persona.

A character is Braaand's answer: a saved, brand-scoped identity (chr_…) that travels with every generation it's selected in. Identity — facial features, hair, skin tone, build, distinguishing traits — is pinned; everything situational — scene, pose, camera angle, lighting, clothing, environment — stays free to serve the brief.

The flow

Create → Generate the reference pack → Approve → Select in generation.

  1. Create a character from either or both of:

    • a text description ("mid-30s, short dark hair, round glasses, navy blazer…") — for invented brand personas;
    • reference photos of a real person — brand assets. Give the person's name and the library's person-tagged photos (metadata.person, the same people find_person resolves) seed the sources automatically.

    The fastest door is the Assets page: select a person's photos and hit Create character in the selection bar — the name comes from the photo's person tag. Select photos of several tagged people at once and each becomes their own character seeded with their own photos (one character is only ever one person; people who already have a character are skipped).

  2. Generate the reference pack — the canonical views every strong consistency mechanism wants: a neutral close-up portrait, a front view, three-quarter left/right, left/right profiles, and full-body front/back, all with the same identity, the same canonical outfit, and a neutral studio backdrop. The portrait generates first and anchors every other view, so the pack agrees with itself. Generation is durable (it survives closing the tab) and heals: a re-run only re-buys views that failed. Each view is one metered image generation, and every pack image lands as an ordinary brand asset.

    One angle landed off? Re-roll just that view — hover its tile on the character page (or pass views: ["profile-left"] to the reference-pack API / generate_character_pack) and roll again until it's right. One generation per roll, never the whole pack, and the previous image stays on screen until the new one lands. The identity spec — the summary and every trait (face, hair, eyes, skin, build, canonical outfit, distinguishing) — is click-to-edit in place on the character page; edits steer every future generation and the next re-roll.

  3. Select the character wherever generation happens:

    • the AI Produce, Video, Generate image and Generate video pipeline nodes — the "People" chips in the node's config rail (characterIds in the node config for agents);
    • generate_image / edit_image over MCP, and POST /api/images/generate / POST /api/videos/generate over REST — the characterIds field;
    • async image jobs carry characterIds too, re-resolved by the worker at run time.

The characters page lives at /brands/{brandId}/characters; the agent tools are list_characters, get_character, create_character, update_character, generate_character_pack, delete_character.

How consistency actually works

Every generation surface asks one planner the same question: given these characters and this model, what's the strongest conditioning it supports? The answer is model-specific, which is what keeps the system vendor-agnostic:

  • Reference images — what every registered model does today. The character's strongest references (pack views in canonical order, then source photos) attach to the call, budgeted against the model's own ceiling — Nano Banana Pro takes up to 14, Seedance up to 50, others fewer. Slots the call already spends (the brand board, a mask, a video's first-frame render) are reserved first.
  • First-frame conditioning — video: the creative's own render pins the clip's opening frame, and character references ride beside it as identity material.
  • Stored character IDs — the forward seam for vendors that hold a server-side reference (Kling character IDs, Runway references). The planner already prefers a stored ref when a model declares the mechanism; wiring a vendor in is a capability declaration, never a change to the surfaces.
  • Prompt-only — the floor. A character with no imagery yet rides on its written identity description, with a warning saying so.

With several characters selected, the reference budget is dealt round-robin (everyone's strongest reference before anyone's second) and the identity block names each person in order, so a two-person scene stays two specific people.

What to know

  • The description is committed once. For text-only characters, the pack generation first runs a describe pass that commits concrete traits (exact hair color, eyes, build, one canonical outfit) into the spec — so consistency comes from a pinned spec, not from the image model re-inventing details per view.
  • Deleting a character never deletes imagery — pack images are ordinary assets. A pipeline node still selecting a deleted character warns and skips it at run time; the run never fails on a stale selection.
  • Provenance is recorded: every generation that used characters stamps characterIds into the saved asset's metadata, so "who is in this image" stays answerable.
  • Cost: the pack is ~8 metered image generations plus one small describe call. Generations with characters cost the same as without (references ride the existing call).