Core concepts
Characters
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.
How identity stays consistent
SteadyShot uses a layered approach to keep the same character recognizable across scenes:
- 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).
- 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”.
- 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.
- Optional scene chaining. Pass
previous_image_idto thread the prior scene as the highest-priority anchor — cuts cross-scene drift in multi-page flows like storybooks. - 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
# 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)
Mira
A young red fox with bright amber eyes, a soft cream-colored belly, and a sky-blue scarf. Friendly, curious, slightly shy.
watercolor children's book illustration, soft edges, warm palette
- 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)
Beanie
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.
modern flat illustration, clean vector lines, soft shading
- 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)
Kai
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.
cinematic photoreal, soft natural light, shallow depth of field
- 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.