Brief → storyboard panels with narrative arc, visual direction, and motion notes. The design checkpoint before any HTML is generated.
Transform a creative brief into a reviewable storyboard — the design checkpoint that determines whether the final video will be excellent or mediocre. Every panel must answer: what should the audience feel?
This is not code generation. A storyboard is a design document. It specifies intent, composition, typography, color, and motion in enough detail that a designer (or /prototype) can produce beautiful HTML from it — but it does NOT produce that HTML itself.
/storyboard <brief.json | "prompt"> [options]
--personality cinematic-dark|editorial|neutral-light|montage
--style prestige|energy|dramatic|minimal|intimate|corporate|kinetic|fade
--brand <brand_id> (loads from catalog/brands/)
--duration <seconds> (total target duration, default: 30)
--output <path> (default: storyboards/)
"Design is not just what it looks like and feels like. Design is how it works." — Steve Jobs
A storyboard that specifies "fade in some cards" produces garbage. A storyboard that says "Three insight cards stack vertically, 560px max width, 14px gap, 15px/600 titles with trend icons in semantic green/slate, on 3.5% white surfaces with 6% borders at 14px radius" produces something worth rendering.
Be specific or be bad. There is no middle ground.
"Less, but better." — Dieter Rams
Every panel must earn its place. If removing a panel doesn't weaken the narrative, remove it. If a transition doesn't serve the story, make it a hard cut. If a camera move doesn't reveal something new, keep it static. Restraint is the hardest skill.
Read the brief completely. Before writing a single panel, answer:
Before panels, establish:
{
"direction": {
"narrative": "Open quiet, build through product demonstration, resolve with brand confidence",
"tone": "Confident but not aggressive. Let the product speak.",
"energy_arc": "quiet → build → peak → resolve → quiet"
}
}
The narrative must have shape. If every panel has the same energy, the video is a slideshow. Professional videos have:
Load the brand from catalog/brands/ or define inline. Be specific:
{
"brand": {
"ref": "fintech-demo",
"palette_note": "Dark navy backgrounds, warm off-white text, indigo accents",
"typography_note": "Inter. Light weight (300) for display. Never bold for taglines.",
"surface_note": "Subtle card surfaces with 4% white opacity. 6% borders."
}
}
Each panel needs:
| Field | Why it matters |
|---|---|
intent | If you can't say why this panel exists, delete it |
description | Plain language — a human reads this for review |
visual_direction | Specific typography, colors, composition. NOT "make it look nice" |
motion_notes | How things enter, hold, and exit |
BAD (will produce ugly output):
"visual_direction": "Show some cards with data"
GOOD (will produce Mercury-quality output):
"visual_direction": {
"composition": "Cards centered, 560px max width, 14px gap. Vertically centered as a group.",
"typography": "Card titles: 15px weight 600. Detail: 13px weight 400, 55% opacity. Trend icons: ↗/↘",
"color": "Card bg: 3.5% white. Border: 6% white. Green (#34d399) for up, slate (#94a3b8) for down.",
"surfaces": "14px border radius. 18-24px padding.",
"reference": "Mercury insight cards — equal visual weight, stacked simply"
}
The difference between these two is the difference between a good video and a bad one. Be specific.
Before saving, verify:
intent that answers "what should the audience feel?"visual_direction with specific sizes, weights, and colorsWrite to storyboards/:
storyboards/
└── {date}-{name}/
├── storyboard.json # The full storyboard
└── meta.json # Metadata (brief ref, brand, etc.)
Output a summary table:
# Storyboard: [title]
| # | Act | Duration | Energy | Intent | Transition |
|---|-----|----------|--------|--------|------------|
| 1 | open | 3.0s | low | Set the tone | — |
| 2 | build | 5.0s | high | Show AI insights | crossfade |
| ...
Total: 30s | Panels: 9 | Arc: quiet→build→peak→resolve→quiet
The storyboard is approved when: a human reads the panel descriptions and visual_direction fields and says "yes, that's the video I want." Only then does production begin.
These are the visual categories. Each maps to a /prototype generation approach:
| Content Type | What it contains | Design complexity |
|---|---|---|
typography | Centered text on dark/light field | Low — but restraint is hard |
insight_cards | Vertical card stack with trends | Medium — spacing and hierarchy |
prompt_input | Chat/search input with typed text | Medium — interaction simulation |
chart_panel | Elevated panel with chart + controls | High — dense UI component |
dashboard | Full app UI with nav + content + charts | Very high — requires product design |
logo_lockup | Brand mark + wordmark + legal | Low — but precision matters |
device_mockup | Product UI in a device frame | Medium — frame + content |
split_panel | Two-column comparison or feature | Medium — balance and alignment |
stat_callout | Large number with context | Low-medium — typography hierarchy |