| name | generate-prompts |
| model | sonnet |
| description | Generate per-scene Gemini image prompts with brand styling |
| disable-model-invocation | false |
| argument-hint | <book-slug> |
Generate Image Prompts
Create per-scene AI image prompts in Gemini format for a Bookie book video. Combines the storyboard's visual concepts with actual voice timing and brand styling into self-contained prompts ready to paste into Gemini.
Context
- When to use: After
make voice produces actual timing. Before make scenes.
- Input:
storyboard.md + chunks-display.md + section-timing.json + style-guide.md
- Output:
image-prompts.md (per-scene Gemini prompts with timing)
Pipeline Position
make voice → section-timing.json (actual timing)
↓
/generate-prompts → image-prompts.md ← YOU ARE HERE
↓
make scenes → generated images
Steps
-
Validate: Check that $ARGUMENTS is provided. If missing, ask Hai for the book slug. Set SLUG=$ARGUMENTS. Check that projects/ai-book-video/books/$SLUG/ exists.
-
Read input files:
- Read
projects/ai-book-video/books/$SLUG/storyboard.md — visual concepts per scene
- Read
projects/ai-book-video/books/$SLUG/chunks-display.md — narration text per scene
- Read
projects/ai-book-video/books/$SLUG/output/section-timing.json — actual scene timing from voice
- Read
projects/ai-book-video/brand/style-guide.md — brand colors and style rules
If section-timing.json is missing, warn: "Voice not generated yet. Run make voice BOOK=$SLUG first, or proceed without timing?" If proceeding without timing, omit timestamp fields.
-
Build style prefix: From style-guide.md, construct the Gemini style instruction that prefixes every prompt. Include:
- Art direction (textured editorial illustration — risograph-inspired grain, subtle paper texture, visible brushwork, soft shadows, layered depth. Minimal, metaphor-driven.)
- Brand colors (green #368C06 for growth/positive, orange #C86108 for tension/emphasis)
- Background color (#FAFDF5)
- Constraints: "no text, no watermark, no realistic faces"
The style guide is the single source of truth for colors — read it fresh each time.
-
Detect mode: If image-prompts.md exists → ask whether to overwrite or revise specific scenes. If missing → new draft.
-
Generate prompts: For each scene:
- Pull visual concept from storyboard.md
- Pull narration excerpt from chunks-display.md (key line for context)
- Pull timestamp from section-timing.json (startMs → endMs, converted to M:SS)
- Write a Gemini prompt: style prefix + visual description in natural language
- Suggest layer type:
Flat (static image) or Ken Burns (slow pan/zoom)
-
Present to Hai: Show prompts for review. He may want to:
- Change metaphors for specific scenes
- Adjust composition
- Merge or split scenes visually
- Change layer types
-
Write output: Write to projects/ai-book-video/books/$SLUG/image-prompts.md
Output Format
# Image Prompts: [Book Title] — [Angle]
> Generated by /generate-prompts on [date]
> Scenes: [N] | Source timing: section-timing.json
## Style Prefix
> Prepend this to every Gemini prompt:
[Style instruction block — textured editorial, brand colors, constraints]
---
## Prompts
### Scene 01 — HOOK (0:00 - 0:12)
- **Duration**: 12.5s
- **Script**: "[Key narration line from this scene]"
- **Visual concept**: [From storyboard]
- **Prompt**: "[Complete self-contained Gemini prompt including style prefix]"
- **Layers**: Ken Burns (slow zoom out)
- **Status**: [ ] Generated [ ] Approved
### Scene 02 — CONTEXT (0:12 - 0:22)
- **Duration**: 9.8s
- **Script**: "[Key line]"
- **Visual concept**: [From storyboard]
- **Prompt**: "[Complete prompt]"
- **Layers**: Flat
- **Status**: [ ] Generated [ ] Approved
...
## Summary
| Scene | Label | Duration | Layers | Status |
|-------|-------|----------|--------|--------|
| 01 | HOOK | 12.5s | Ken Burns | [ ] |
| 02 | CONTEXT | 9.8s | Flat | [ ] |
...
Prompt Writing Guidelines
Every prompt is self-contained — paste it into Gemini without any other context. This means each prompt includes the style instructions, not just a reference to them.
Focus on metaphor, not literal depiction. Instead of "a person reading a book," try "an open book floating in space, its pages transforming into glowing pathways." Textured editorial illustration — NOT flat vector, NOT stock photography. Every image should feel like a premium magazine print: grain, depth, visible texture.
Visual principles:
- No text in images — the subtitle handles text
- No realistic faces — use simple character silhouettes or abstract figures
- Brand green (#368C06) for positive/growth elements
- Brand orange (#C86108) for tension/emphasis/warning
- Light background (#FAFDF5) as base
- Consistent style across all scenes — same textured editorial quality, same grain level
Gemini-specific:
- Natural language descriptions (not tags or keywords)
- Include "no text, no watermark" inline in the prompt
- Describe composition: foreground/background, lighting, perspective
- Mention color palette explicitly for key elements
Layer suggestions (feeds into generate-scenes.sh for per-scene visual override):
Ken Burns (slow zoom in): Zoom into details — intimacy, focus, revelation
Ken Burns (slow zoom out): Zoom out to reveal — context, scale, perspective shift
Ken Burns (slow pan left to right): Horizontal motion — progression, journey, transition
Ken Burns (slow pan right to left): Reverse motion — looking back, contrast
Flat: Static image — diagrams, comparisons, focused concepts, data
Important
- Timestamps come from section-timing.json (actual voice timing), not estimates
- The style guide is the single source of truth for brand colors — read it, don't hardcode
- All non-prompt text in Vietnamese
- Image prompts themselves can be in English (Gemini handles EN better for image generation)