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 to gpt-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_score the system retries with feedback baked in.
  • Cache. An exact-prompt repeat for the same character returns the cached result instantly. Pass no_cache: true to 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.