Image-gen mockup workflow — multi-shot prompting for consistent Alice
Practical workflow for generating consistent OpenAlice Embed mockups + Alice mascot variations via our atlas.blal.pro/api/v1/marketing/image-gen endpoint. Synthesised from OpenAI's image-gen prompting cookbook + NAO's curated Alice catalog + our brand-voice + landing-structure docs.
Goal: every image we ship — landing hero, pricing block, FAQ illustration, onboarding mascot states, dashboard empty states, error pages — uses the SAME Alice in the SAME anime-editorial Sakura style. No drift. Multi-shot prompting with reference images is the discipline.
⚓ Anchor image first (the «character lock»)
Before generating any mockup, create ONE canonical Alice mascot anchor. This anchor becomes reference_images[] for every subsequent generation.
Anchor brief (the first image-gen call to make)
{
"prompt": "Background: soft sakura-pink and cream pastel gradient field (#FFE4EC into #FDFAF7), subtle paper-grain texture, no patterns.\n\nSubject: Alice, the OpenAlice mascot. Female anime character in light-anime stylisation (editorial-anime style, NOT chibi, NOT SAO, NOT super-deformed). Premium Studio Ghibli register. Approximately 18-20 years old visual age. Standing T-pose, three-quarter view.\n\nKey details:\n- Hair: silvery-white to soft platinum, shoulder-length, slight bangs\n- Eyes: large but proportional, soft warm tone, intelligent expression\n- Skin: porcelain cream, subtle warmth\n- Outfit: casual professional — white short-sleeve t-shirt + dark slim trousers + black canvas sneakers. Unisex business-casual baseline. NO anime accessories (no ears, no tails, no fantasy elements).\n- Expression: gentle attentive smile, warmth without exaggeration\n- Proportions: realistic anime proportions (head 1/7 body), NOT chibi 1/4 proportions\n- Mood: premium, curious, approachable — Studio Ghibli's adult protagonists not anime-school-kid\n\nStyle constraints:\n- Anime-editorial Sakura aesthetic (soft pastels, clean linework, subtle sparkle ✨ accents)\n- Premium SaaS brand mascot quality, NOT mobile-game cartoon\n- Color palette locked: sakura-pink #FFE4EC, cream #FDFAF7, ink #1A1A2E (line work), pale-gold #F4D9A4 (sparkles)\n- Soft shading, no harsh shadows, no gradients\n- Cinematic key-light from upper-left, gentle\n\nWhat must stay locked (carry into ALL future iterations):\n- Same facial features (eyes / nose / mouth / face shape)\n- Same hair (silvery-white shoulder-length, slight bangs)\n- Same outfit baseline (white t-shirt + dark trousers + canvas sneakers)\n- Same body proportions (anime-realistic, NOT chibi)\n- Same expression register (gentle, attentive, premium-curious)\n- Same color palette\n\nWhat varies in future iterations (NOT locked):\n- Pose (waving, thinking, talking, idle, reaction)\n- Background (different scenes)\n- Outfit accents (apron / lab coat / blazer overlay — base stays)\n- Lighting (mood per scene)\n\nNegative constraints:\n- No watermark, no text overlay, no UI elements (we add UI later)\n- No multiple characters in frame, no background characters\n- No anime tropes (no school uniform, no cat ears, no katanas, no twin-tails)\n- No mobile-game cartoon roundness (Duolingo / Catzy aesthetic banned)\n- No chibi, no super-deformed proportions",
"reference_images": [
"/home/blal/alice-images/Alice 1.png",
"/home/blal/alice-images/Alice 2.png",
"/home/blal/alice-images/Alice 3.png",
"/home/blal/alice-images/Alice Collage A.png"
],
"input_fidelity": "high",
"output_path": "moodboards/openalice-embed-brand/00-alice-anchor.png",
"size": "1024x1024",
"quality": "high"
}Why this call FIRST: every subsequent generation references this anchor + the locked invariants. Without anchor, we re-roll character appearance every time = inconsistent brand mascot = exactly what we DON'T want.
🎬 Subsequent generations — multi-shot pattern
For every mockup after anchor, follow this template:
{
"prompt": "[Background: scene-specific description]\n\nSubject: SAME Alice from reference image — same silvery-white shoulder-length hair, same gentle facial features, same anime-realistic proportions, same warmth expression register.\n\n[Scene-specific pose / action / interaction]\n\n[Scene-specific outfit accent if any — base white t-shirt + dark trousers stays]\n\n[Scene-specific UI elements — chat bubble / dashboard chrome / pricing card / etc.]\n\nStyle constraints (LOCKED — match reference):\n- Anime-editorial Sakura aesthetic\n- Color palette: sakura-pink #FFE4EC, cream #FDFAF7, ink #1A1A2E, pale-gold sparkle #F4D9A4\n- Soft shading, gentle key-light\n- Premium SaaS register, NOT mobile-game cartoon\n\nWhat stays locked (carry from reference):\n- Same facial features (do not change face)\n- Same hair (silvery-white shoulder-length)\n- Same body proportions\n- Same color palette\n- Same overall mood register\n\nWhat varies in THIS image:\n- [Specific variations: pose, scene, lighting, outfit accent]\n\nNegative constraints:\n- No watermark, no extra text outside UI elements specified\n- Do not redraw face — preserve from reference\n- No anime tropes, no chibi, no school uniforms",
"reference_images": [
"moodboards/openalice-embed-brand/00-alice-anchor.png",
"/home/blal/alice-images/Alice 1.png"
],
"input_fidelity": "high",
"output_path": "moodboards/openalice-embed-brand/[NN-name].png",
"size": "[per-block]",
"quality": "high"
}Key rule: ALWAYS include anchor in reference_images[]. Restate invariants in prompt. Vary only what should vary.
🗂 Planned mockup library (NAO «по блокам» main page)
Per NAO directive 2026-05-27 (TG msg 312): generate main page block-by-block.
Anchor + 9 main-page blocks = 10 image-gen calls for landing alone. At ~$0.10-0.20 per high-quality call → ~$1-2 total cost. Affordable per our ≤14-call budget for the wave.
Generation order (anchor first, then sequence by page-scroll)
| # | Filename | Purpose | Variants vs anchor |
|---|---|---|---|
| 0 | 00-alice-anchor.png | Canonical mascot anchor | (this is the anchor) |
| 1 | 01-hero-block.png | Landing hero — Alice on right half talking, chat bubble visible | Pose: smiling + half-wave + speaking. Background: subtle Sakura grain. UI: chat bubble visible. Size: 1536×1024. |
| 2 | 02-problem-section.png | Problem section — Alice listening + concerned-thoughtful | Pose: hand on chin, thinking. Background: high-contrast cream + ink panel. UI: minimal. Size: 1536×768. |
| 3 | 03-solution-block.png | Solution section — Alice with 3 feature cards reactive | Pose: gesturing toward 3 floating cards. Background: Sakura pastel return. UI: 3 visible feature cards. Size: 1536×1024. |
| 4 | 04-value-props-strip.png | 5 value props horizontal | Pose: hands open at center. 5 value-prop icons floating around her. Size: 1920×640. |
| 5 | 05-live-demo-block.png | Mid-page live demo full-width | Pose: looking at viewer, mid-conversation. Larger render. Caption visible. Size: 1920×1080. |
| 6 | 06-pricing-block.png | Pricing teaser block | Pose: standing beside 3 pricing cards. Pro highlighted with sparkle. Size: 1536×1024. |
| 7 | 07-social-proof-block.png | Social proof slot | Build-Log subscribe placeholder + Alice with sparkle of joy. Size: 1280×720. |
| 8 | 08-risk-reversal-block.png | Risk reversal section | Pose: hands open, transparency gesture. 5 risk-reversal items visible. Size: 1536×768. |
| 9 | 09-closing-cta-block.png | Closing CTA — Alice inviting | Pose: waving toward CTA buttons. Sparkle around. Size: 1536×768. |
| 10 | 10-footer-portrait.png | Footer Alice portrait + brand mark | Pose: head-and-shoulders portrait. Small. Size: 512×512. |
Total: 10 image-gen calls. Cost framing (corrected NAO TG msg 333): runs through atlas-api on NAO's Codex OAuth subscription = no per-call dollar cost. Constraint = Codex 5-hour quota (~5 % per call → ~20 calls fills one 5h window). 10 calls for main page ≈ half a Codex window. Plus ~10 for other mockups (pricing page / FAQ / dashboard / error pages / social media). Total wave = ~20 calls = 1-2 Codex 5h windows. Coordinate with Tycho's engineering Codex burn (shared quota).
🛡 Failure modes to watch for
GPT-image-2 occasionally drifts even with reference + invariants:
- Face drift: Alice's facial features mutate slightly across iterations. Mitigation: strong reference (NAO's 9 serious refs in array), restate «do not change face» in every prompt, use
input_fidelity: high. - Style drift toward mobile-game-cute: GPT-image trained on mass mobile-app visual data tends to default Cute. Mitigation: «editorial-anime, Studio Ghibli register, NOT chibi, NOT super-deformed» in every prompt.
- Color palette drift: subtle hue shifts. Mitigation: repeat hex codes in every prompt («sakura-pink #FFE4EC, cream #FDFAF7, ink #1A1A2E»).
- Pose unnatural / hands-off: complex hand poses are GPT-image weakness. Mitigation: keep poses simple (half-wave, hand-on-chin, hands at sides); avoid intricate finger gestures, holding-objects.
- Background bleed: scene elements blend with character. Mitigation: «character clearly separated from background, no element overlap on body» explicit constraint.
🔁 Iteration discipline
If a generated image drifts:
- Save anyway to
moodboards/openalice-embed-brand/_drafts/for reference - Edit prompt with stronger invariants on the drifted dimension
- Re-generate with same anchor + tightened prompt
- Max 3 attempts per block — if 3rd attempt still drifts, NAO reviews + manual override (we hire artist for that one block)
Each call costs ~5% Codex 5h quota. Budget: ≤14 calls TOTAL for the wave. If we burn through 14 calls without good results, stop + reassess strategy with NAO before next attempts.
🎨 Style anchors (locked color palette + design tokens)
For prompt consistency, the canonical OpenAlice Embed Sakura design tokens:
palette:
sakura_pink: '#FFE4EC' # primary brand-pastel
cream: '#FDFAF7' # background neutral
ink: '#1A1A2E' # line work + body text
pale_gold: '#F4D9A4' # sparkle accents
warm_gray: '#8A8275' # secondary text
phosphor: '#7CF2C8' # success / CTA accent
typography_intent:
display: 'editorial display serif (Fraunces / DM Serif feel)'
body: 'clean sans (Inter Display / Söhne feel)'
monospace: 'JetBrains Mono / Berkeley Mono feel'
aesthetic_keywords:
- editorial-anime
- studio ghibli register (premium adult anime, NOT school-kid)
- sakura aesthetic (soft pastels, sparkle accents)
- premium SaaS brand mascot
- hairline borders not heavy
- paper-grain texture not gradients
- asymmetric editorial grid not centered cards
forbidden_patterns:
- chibi / super-deformed proportions
- mobile-game cartoon roundness (Duolingo / Catzy / Falou aesthetic)
- school uniforms / cat ears / fantasy accessories
- twin-tails / pink hair / kawaii tropes
- heavy gradients (subtle only)
- centered-card layouts
- stock-photo diverse-young-professionals-laughing🔧 Workflow when generating (operational)
- Verify anchor exists: if not, generate anchor first (1 call, ~$0.20)
- Open this doc + landing-structure.md for block-by-block spec
- Compose prompt per template above with scene-specific variations
- Include 2-4 reference images in
reference_images[](anchor + 1-3 NAO catalog refs) - Generate at `quality: high` + appropriate `size`
- Inspect output — drift check on face / style / palette / pose
- If clean: commit to
moodboards/openalice-embed-brand/[NN-name].png - If drifted: save to
_drafts/, refine prompt invariants, retry (max 3 attempts) - Update this doc with successful prompt patterns for future use
🎯 First action (when NAO greenlights)
Run anchor generation as image-gen call #1. Inspect output. If anchor looks right, proceed to landing block 1. If anchor drifts from NAO's catalog vibe, regenerate anchor with prompt refinements before moving to scene generations.
NAO approval gate: anchor image must be NAO-approved (he eyeballs + says «that's our Alice») before any subsequent generation runs.
🔁 Refinement triggers
- After 5 successful generations: review which prompt invariants drifted / worked. Update template prompt accordingly.
- New SKU launch (OpenAlice Live / Kiosk / Mobile): create per-SKU anchor if visual context differs significantly.
- Anchor regeneration: if NAO requests fundamental character refresh (different hair color / outfit base / age register), regenerate anchor + all downstream images. Versioned as
anchor-v2, etc.