Core concepts

Characters

A character is the unit of identity in SteadyShot. It bundles together a name, a rich text descriptor, an optional source image, and (after lock) a reference sheet. Every scene you generate anchors against the character so the same person shows up consistently across renders.

What a character is made of

  • Name — display label. Used as a placeholder hint in prompts (so naming your penguin “Rasputin” doesn’t confuse the QA model into looking for a historical figure).
  • Description — your seed text. A 1–2 sentence sketch is fine; SteadyShot auto-expands this into the rich descriptor with Claude.
  • Extracted descriptor — the rich, prompt-ready identity (face, hair, body, clothing, distinctive features). This is what actually gets baked into every scene prompt. You can edit it directly or refine it with the AI co-pilot.
  • Style notes — art register (e.g. “Pixar 3D”, “watercolor”). Stays constant across scenes unless overridden.
  • Source image (optional) — the original photo or illustration. If present, it’s used as the visual anchor for the first reference and (in PuLID mode) as the face embedding for every scene.
  • Reference sheet — generated views of the character (front, side, back, expressions). Multiple references give the image model more angles to triangulate identity from.

Draft vs locked

Every character starts as a draft. Drafts are fully editable: name, descriptor, references — all mutable. The tradeoff is that drafts can’t do anything else:

  • Scene generation is blocked.
  • Library publishing is blocked.
  • Marketplace listing is blocked.
  • External API calls (MCP, Figma, Photoshop, REST) 409 with a “lock first” error.

Locking freezes the character. From then on every generation anchors against the exact same descriptor + references, so consistency stays high across scenes. You can unlock if you need to edit — but you’ll start a new revision and previously generated scenes will reflect the pre-edit version.

Revision history is kept automatically. Every save (manual or AI refinement) becomes a numbered revision, viewable on the character detail page.

How identity stays consistent

SteadyShot uses a layered approach to keep the same character recognizable across scenes:

  1. Reference images as anchors. Up to 4 are passed to the image model per generation. The front view is always pinned; others are chosen based on keywords in the prompt (e.g. a prompt with “smiling” pulls in the “happy” reference).
  2. Rich descriptor in the prompt. The extracted descriptor (not just your seed text) is appended to every scene prompt with explicit instructions like “match colors and clothing exactly”.
  3. Per-call cache. The character’s identity descriptor + references are warm-cached server-side, so a fast sequence of scenes doesn’t pay the cold-start cost.
  4. Optional scene chaining. Pass previous_image_id to thread the prior scene as the highest-priority anchor — cuts cross-scene drift in multi-page flows like storybooks.
  5. Vision-based QA. Every generated scene is scored against the canonical references with Claude vision; if it drifts too far the system retries with feedback baked into the prompt.

Imported characters

Two ways to add a character without creating it from scratch:

  • Free community library — browse /library and import any published character into your account. Zero credits.
  • Paid marketplace — buy a creator’s character for credits. See Marketplace.

Both paths produce a fully-owned clone in your library (descriptor + reference sheet). The original creator retains resale rights — you can use the imported character for generations but can’t re-list it.

Doing it via the API

bash
# Create
curl -X POST https://steadyshot.ai/api/characters \
  -H "Authorization: Bearer ss_live_xxx" \
  -F name="Luna" \
  -F description="A round orange tabby with green eyes" \
  -F style_notes="watercolor"
# → { "id": "...", "lock_status": "draft", ... }

# AI auto-fill the descriptor
curl -X POST https://steadyshot.ai/api/characters/{id}/auto-fill-descriptor \
  -H "Authorization: Bearer ss_live_xxx"

# Generate reference sheet (one POST per label)
curl -X POST https://steadyshot.ai/api/characters/{id}/references \
  -H "Authorization: Bearer ss_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"label":"front","has_source":true}'

# Lock
curl -X POST https://steadyshot.ai/api/characters/{id}/lock \
  -H "Authorization: Bearer ss_live_xxx"

Full schema at REST API.

Examples

Three concrete recipes you can copy as a starting point. Each one has a different intent — children’s storybook, brand mascot, and photo-real OC — and uses a different descriptor + art style profile.

Children's bedtime story; consistent across many pages

Mira the fox (storybook protagonist)

Name

Mira

Description

A young red fox with bright amber eyes, a soft cream-colored belly, and a sky-blue scarf. Friendly, curious, slightly shy.

Art style

watercolor children's book illustration, soft edges, warm palette

Tips
  • Generate a 5-pose reference sheet (front + 4 emotions) — the QA model uses the matching emotion ref when the prompt has emotion keywords.
  • Persist art_style on every render so 4 weeks from now you still get watercolor, not photoreal.
  • Chain pages via previous_image_id for cross-page outfit/lighting coherence.

Stylized mascot for a coffee brand; pair with brand kit

Beanie (brand mascot)

Name

Beanie

Description

A small stylized coffee bean character with thin arms and legs, a warm smile, and a barista's apron in cream and espresso colors. Cute but not childish — vibe of a premium specialty brand mascot, not a kids' cartoon.

Art style

modern flat illustration, clean vector lines, soft shading

Tips
  • Pair with a brand kit at generation time so logo + palette + product images stay locked in.
  • Lock both the character AND the brand kit before scaling — drafts drift between renders.
  • Use the storybook endpoint with N campaign prompts to fan out a full asset set in one call (hero, social, banner).

Photoreal original character for comics or storytelling

Kai (photo-real OC)

Name

Kai

Description

A 28-year-old with shoulder-length black hair tied back, sharp cheekbones, hazel eyes with a faint scar across the left eyebrow. Wears a worn leather jacket over a dark gray hoodie, dark jeans, and combat boots. Lean build, deliberate movements.

Art style

cinematic photoreal, soft natural light, shallow depth of field

Tips
  • Upload a real or AI-generated source image if you want strict facial consistency — without one the model picks a face that's only roughly consistent.
  • Photoreal styles benefit from PuLID face-locking (auto-enabled when source_image_url is set).
  • Use the Vary feature for expression/pose changes — it preserves face identity better than re-generating from scratch.
Browse the community library for more starting points. Import any character for free and tweak from there — descriptors, references, and art style are all editable after import.