Every page used to be a fresh dice-roll: gold map one roll, brown the next; full moon here, crescent there. Fixing a page for one customer fixed nothing for the next one.
Your idea flips it: draw each story's 13 pages perfectly ONCE (the "master book"), then for every customer just tell the model "same picture, different child". The scene is frozen — only the child changes. A page bug fixed in the master is fixed for every customer, forever.
Three very different children injected into Leo's finished pages. Scene fidelity scored 98–100 in every single test; aspect ratio now pinned square (the drift you saw is fixed).


Scene 99 · identity 98 · first try, no retry needed. Same on p02 (99/97) and the wide sailing page p04 (100/98).


Scene 98 · identity 98. Treasure chamber p10: 99/96. Toddlers work.


The model's known weakness showed up exactly where predicted: it lightened Amira's skin and made her younger on 2 of her 3 pages. The auto-judge caught both — no human looked at anything — and a stricter retry prompt ("skin tone must EXACTLY match, do NOT de-age") fixed both within 1–2 retries. Her cave page passed first try (95).




The injection can swap the master's clothes for the customer child's real outfit in the same call — the "recognition lever" survives the new architecture (decision for you below).
I then built the real thing: "Captain Kaja and the Star Treasure" — all 13 pages injected from Leo's masters by the new production tool (inject_book.py), every page auto-judged, failing pages auto-retried. No human touched it.
How the run went: 9 pages passed first try. p01, p03, p05 drifted (the model sometimes returns the master unchanged or keeps Leo's hair) — the judge caught every one and retries fixed them. p11 (sleeping child, eyes closed) resisted 3 generic retries, so it was auto-flagged; one escalation prompt that names the concrete difference ("the child has red curls — WRONG — paint long light-brown hair, glasses folded on the nightstand") fixed it first try, and that escalation rule is now built into the tool. Net human QC for this book: zero pages.













| Approach | Cost / book | Page consistency | Human QC |
|---|---|---|---|
| Old: regenerate all pages per order | £0.53 | dice-roll | ~15 min every book |
| Opus 4.8: best-of-4 on every page | ~£1.77 | good | still per-book |
| Yours: master once + inject (+ judge gate) | £0.65 measured | frozen scene | flagged pages only |
Your cost instinct was right with one nice surprise: premium masters aren't needed. The cheap model already produced 100/100 masters when we let best-of-N pick the winner — so the one-time master cost is pennies (~£0.40–£1.60 per story incl. re-rolls), not premium-model money. Premium stays opt-in for a stubborn page, nothing else.
The injection copies the master so faithfully that it copies its mistakes — which is exactly what you want, because a master bug fixed once is fixed for every future customer. The current Leo masters have a small punch-list before they're production-ready:
Each is a one-time fix with the best-of-N tool, ~£0.10–£0.30 per page, then never again.
You asked what I can do that Opus 4.8 can't, without waiting for you to lock the master pages. Answer: the Polish text — it lives in the story recipe, not in the images, so it waits on nothing. Full rhyming PL translation of Captain {name} and the Star Treasure is done, in BOTH gender variants (Polish past tense forces it: "śmiał się" / "śmiała się"; girls get "Śpij dobrze, Kapitanko"). The renderer picks the right variant from the child's pronoun automatically — new v2.7 scheme text_pl_m/f, old stories untouched.
„Próba DWA: Jaskinia Ciemnych Szeptów przed tobą. Przejdź przez nią sama. Przejdź przez nią z odwagą." W środku cienie syczały coraz śmielej... Kaja szepnęła: „Boję się — ale idę dalej." Bo właśnie tak wygląda odwaga prawdziwa: iść naprzód, choć strach za rękaw porywa.
Both demo books' HTML rebuilt bilingual for £0 (text-only — no images touched). Treat my Polish as a solid draft: your read-through decides. The other 10 stories get translated after you've read the English versions, so your edits don't orphan the translations.
gem.py (aspect-ratio support, additive), inject_hero.py v2 (AR pin + outfit swap + strict retry), inject_validate.py (the test matrix, rerunnable), inject_book.py (the production tool with the auto-QC gate). Snapshot taken first (versions/v2.5b…), all changes additive, VERSIONS.md updated. Evidence: orders/_inject_validation_2026-07-16/ + orders/demo_star_pirates_kaja_injected/. Today's total AI spend: 33 images ≈ £1.02.Private report — unlisted URL, not linked anywhere. Full-size images on the Synology share.