Features
Scene generation
The bread and butter of SteadyShot. Describe a scene and a locked character renders into it with consistent identity, outfit, and art style.
From the UI
- Open any locked character at /characters → scroll to Generate Scene.
- Type a scene prompt — “Luna reading by a campfire under the northern lights”.
- Optionally override the art style. By default it inherits the character’s
style_notes. - Hit Generate. ~30s later the scene lands in the grid below.
From the API
bash
curl -X POST https://steadyshot.ai/api/generate \
-H "Authorization: Bearer ss_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"character_id": "<character-uuid>",
"prompt": "Luna reading by a campfire under the northern lights",
"art_style": "studio ghibli"
}'
# Response
{
"image_id": "...",
"image_url": "https://...",
"consistency_score": 92,
"character_score": 94,
"attempts": 1,
"passed": true,
"reasoning": "...",
"issues": [],
"cached": false
}Chaining for cross-scene coherence
Multi-scene flows (storybooks, comics) benefit from threading the prior scene as the anchor. Pass previous_image_id on subsequent calls — outfit, lighting register, and stylistic flourishes carry over from the previous render rather than just the canonical reference sheet.
bash
# Page 1
RES1=$(curl -X POST https://steadyshot.ai/api/generate \
-H "Authorization: Bearer ss_live_xxx" \
-H "Content-Type: application/json" \
-d '{"character_id":"...","prompt":"Luna enters the forest"}')
IMG1=$(echo "$RES1" | jq -r '.image_id')
# Page 2 — chain to page 1
curl -X POST https://steadyshot.ai/api/generate \
-H "Authorization: Bearer ss_live_xxx" \
-H "Content-Type: application/json" \
-d "{\"character_id\":\"...\",\"previous_image_id\":\"$IMG1\",\"prompt\":\"Luna finds a glowing mushroom\"}"Multi-character scenes
Use POST /api/generate-multi for scenes featuring 2–4 characters together. Costs 2 credits. The endpoint verifies all characters appear and runs per-character consistency scoring.
bash
curl -X POST https://steadyshot.ai/api/generate-multi \
-H "Authorization: Bearer ss_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"character_ids": ["<luna-id>","<milo-id>"],
"prompt": "Luna and Milo playing chess in a garden"
}'Behind the scenes
- Model fallback. Default is
gpt-image-2; if it errors we fall back togpt-image-1. Same call shape. - Reference selection. Up to 4 reference images are chosen per call. Front is pinned; emotion / angle keywords in the prompt pull in matching references.
- QA scoring. Claude Sonnet vision scores the result on character + scene rubrics. If the combined score falls below
min_scorethe system retries with feedback baked in. - Cache. An exact-prompt repeat for the same character returns the cached result instantly. Pass
no_cache: trueto force a re-render.
Want a specific stylistic register that’s NOT the character’s default? Pass
art_style per generation — it overrides character.style_notes for that one render only.