image-creator
Turn a Canon Spec + a scene into a maximally-detailed, reproducible
generation prompt that renders a character to spec — then hand the result to
image-analyser to verify. The loop partner.
Schema + rubric + loop: canon-spec.md.
When to use
- "Generate / render / create this character", "render Veikko in scene X to
spec", "make the image match the canon".
- Inside the fidelity loop, fed by
image-analyser's correction directives.
NOT for: scene blocking / motion (→ video-director, motion-choreographer,
which take a verified still from here), non-character art (→ canvas-design).
Input
- Character id / Canon Spec (
agents/reference/ai-video/<project>/characters/<id>.json).
- Scene brief (setting + pose). Optional: prior
image-analyser diff (loop mode).
Procedure
- Governance gate FIRST (per
media-governance-routing): if the character
is a real-person likeness, consult agents/settings/policies/media/likeness.md
public-figures.md + disclosure.md before emitting anything. Fictional
characters (odins-beard trio) are exempt; the routing decision is in-session.
- Provider gate (per
provider-lifecycle-discipline): read the resolved
provider's tier; if non-stable (experimental/deprecated/community), surface
the tier and ask before running. Never default to a non-stable provider
silently. Name the provider + tier in the run summary.
- Assemble the prompt from the spec — anchors first. Order matters: the
hard-to-render
identity_anchors go at the TOP (the canon's lesson —
heterochromia + hair-split get forgotten if buried). Then physique, face
(+ marks), per-location tattoos (incl. exact text), outfit, jewelry.
- Asymmetry block — for split / heterochromatic characters, an explicit
left/right section ("LEFT half black / RIGHT half blond", "blue LEFT eye /
green RIGHT eye") with concrete comparison refs for engines that drop it.
- Negative block + engine settings — reuse the canon's proven structure
(negatives that kill "single hair colour", "both eyes same colour", etc.;
per-engine
--ar/--style/CFG/steps). Do not reinvent; the character book's
prompt format is the template.
- Generate through the existing provider/adapter layer
(
scripts/ai-video/adapters/, the /video|image surface). Do not add a
new provider path where one exists.
- Verify — hand the output to
image-analyser; in loop mode, fold its
correction directives into the next prompt (see the loop in canon-spec.md).
Anchors-first — why
The fidelity-loss evidence (img_2.png): Veikko's split hair + heterochromia
were missed because they are hard for the engine and were not front-loaded. The
analyser-derived fixes go to the TOP of the next prompt, with negatives, and the
loop re-verifies — that is how the smallest mole comes back.
Output format
- Generation prompt — anchors block · positive · asymmetry (if any) · negative · engine settings.
- Provider + tier line (the audit entry).
- Verify call — the
image-analyser invocation on the result + the loop stop-state.
Example (anchors-first vs buried)
- Safe (Veikko): prompt opens with
HAIR: exact vertical centre split, LEFT pitch-black, RIGHT platinum-blond + EYES: heterochromia — LEFT ice-blue, RIGHT forest-green, then the rest.
- Unsafe: physique/outfit first, the split + heterochromia in a trailing sentence → the engine drops them (the observed
img_2.png failure).
Gotchas
- Never claim "canon-perfect" without an
image-analyser pass (per verify-before-complete).
- DALL-E drops heterochromia + split hair — use concrete comparisons; expect multiple generations.
- Keep the spec the single source: regenerate from the Canon Spec, never paraphrase it into a fresh prompt.
Do NOT
- Do NOT claim "canon-perfect" / "matches the canon" without an
image-analyser
pass on the output (per verify-before-complete — no completion without evidence).
- Do NOT bury the
identity_anchors — the hard-to-render features (heterochromia,
hair-split) go at the TOP of the prompt, never in a trailing sentence.
- Do NOT default to a non-stable provider silently — surface the tier and ask
first (per
provider-lifecycle-discipline).
- Do NOT emit a prompt for a real-person likeness before the governance gate
(step 1) clears it.
- Do NOT add a new provider/generation path where the existing adapter layer
(
scripts/ai-video/adapters/) already covers it.
- Do NOT paraphrase the Canon Spec into a fresh prompt — regenerate from the spec
so it stays the single source of truth.
Policies
media-governance-routing + agents/settings/policies/media/ (likeness, style,
public-figures, disclosure) — consulted in step 1 before any prompt is emitted
for a real-person likeness.
Related skills
1---2name: image-creator3description: Use to generate a character image to spec — max-fidelity reproducible prompt from a Canon Spec, anchors-first, provider/governance-gated. Triggers 'generate this character', 'render to spec'.4---56# image-creator78> Turn a **Canon Spec** + a scene into a maximally-detailed, reproducible9> generation prompt that renders a character to spec — then hand the result to10> [`image-analyser`](../image-analyser/SKILL.md) to verify. The loop partner.11> Schema + rubric + loop: [`canon-spec.md`](../image-analyser/canon-spec.md).1213## When to use1415- "Generate / render / create this character", "render Veikko in scene X to16 spec", "make the image match the canon".17- Inside the fidelity loop, fed by `image-analyser`'s correction directives.1819NOT for: scene blocking / motion (→ `video-director`, `motion-choreographer`,20which take a verified still from here), non-character art (→ `canvas-design`).2122## Input2324- Character id / Canon Spec (`agents/reference/ai-video/<project>/characters/<id>.json`).25- Scene brief (setting + pose). Optional: prior `image-analyser` diff (loop mode).2627## Procedure28291. **Governance gate FIRST** (per `media-governance-routing`): if the character30 is a real-person likeness, consult `agents/settings/policies/media/likeness.md`31 + `public-figures.md` + `disclosure.md` before emitting anything. Fictional32 characters (odins-beard trio) are exempt; the routing decision is in-session.332. **Provider gate** (per `provider-lifecycle-discipline`): read the resolved34 provider's tier; if non-stable (experimental/deprecated/community), surface35 the tier and ask before running. Never default to a non-stable provider36 silently. Name the provider + tier in the run summary.373. **Assemble the prompt from the spec — anchors first.** Order matters: the38 hard-to-render `identity_anchors` go at the TOP (the canon's lesson —39 heterochromia + hair-split get forgotten if buried). Then physique, face40 (+ marks), per-location tattoos (incl. exact `text`), outfit, jewelry.414. **Asymmetry block** — for split / heterochromatic characters, an explicit42 left/right section ("LEFT half black / RIGHT half blond", "blue LEFT eye /43 green RIGHT eye") with concrete comparison refs for engines that drop it.445. **Negative block + engine settings** — reuse the canon's proven structure45 (negatives that kill "single hair colour", "both eyes same colour", etc.;46 per-engine `--ar`/`--style`/CFG/steps). Do not reinvent; the character book's47 prompt format is the template.486. **Generate** through the existing provider/adapter layer49 (`scripts/ai-video/adapters/`, the `/video|image` surface). Do **not** add a50 new provider path where one exists.517. **Verify** — hand the output to `image-analyser`; in loop mode, fold its52 correction directives into the next prompt (see the loop in `canon-spec.md`).5354## Anchors-first — why5556The fidelity-loss evidence (`img_2.png`): Veikko's split hair + heterochromia57were missed because they are hard for the engine and were not front-loaded. The58analyser-derived fixes go to the TOP of the next prompt, with negatives, and the59loop re-verifies — that is how the smallest mole comes back.6061## Output format62631. **Generation prompt** — anchors block · positive · asymmetry (if any) · negative · engine settings.642. **Provider + tier line** (the audit entry).653. **Verify call** — the `image-analyser` invocation on the result + the loop stop-state.6667## Example (anchors-first vs buried)6869- Safe (Veikko): prompt opens with `HAIR: exact vertical centre split, LEFT pitch-black, RIGHT platinum-blond` + `EYES: heterochromia — LEFT ice-blue, RIGHT forest-green`, then the rest.70- Unsafe: physique/outfit first, the split + heterochromia in a trailing sentence → the engine drops them (the observed `img_2.png` failure).7172## Gotchas7374- Never claim "canon-perfect" without an `image-analyser` pass (per `verify-before-complete`).75- DALL-E drops heterochromia + split hair — use concrete comparisons; expect multiple generations.76- Keep the spec the single source: regenerate from the Canon Spec, never paraphrase it into a fresh prompt.7778## Do NOT7980- Do NOT claim "canon-perfect" / "matches the canon" without an `image-analyser`81 pass on the output (per `verify-before-complete` — no completion without evidence).82- Do NOT bury the `identity_anchors` — the hard-to-render features (heterochromia,83 hair-split) go at the TOP of the prompt, never in a trailing sentence.84- Do NOT default to a non-stable provider silently — surface the tier and ask85 first (per `provider-lifecycle-discipline`).86- Do NOT emit a prompt for a real-person likeness before the governance gate87 (step 1) clears it.88- Do NOT add a new provider/generation path where the existing adapter layer89 (`scripts/ai-video/adapters/`) already covers it.90- Do NOT paraphrase the Canon Spec into a fresh prompt — regenerate from the spec91 so it stays the single source of truth.9293## Policies9495`media-governance-routing` + `agents/settings/policies/media/` (likeness, style,96public-figures, disclosure) — consulted in step 1 before any prompt is emitted97for a real-person likeness.9899## Related skills100101- [`image-analyser`](../image-analyser/SKILL.md) — the verify/loop partner.102- [`character-consistency`](../character-consistency/SKILL.md) — supplies the locked identity tokens.103- [`video-director`](../video-director/SKILL.md) / [`motion-choreographer`](../motion-choreographer/SKILL.md) — take the verified still into scene + motion.