If you've generated AI video, you've felt the randomness: one prompt returns something gorgeous, the next — barely reworded — returns mush. The usual reaction is to add more adjectives. That rarely helps, because the problem isn't quantity of description. It's structure.
Here's a way to think about a text-to-video prompt as a structured object with seven fields, not a blob of prose. Structured prompts are reproducible and, more importantly, debuggable.
The seven blocks
[shot type] of [subject + action], [setting].
Camera: [movement], [lens].
[lighting] lighting. [mood] atmosphere.
[color grade] color grade.
[format].
Filled in:
Cinematic wide shot of a lighthouse keeper releasing paper
lanterns into a storm, on a battered pier at dusk.
Camera: slow push-in, anamorphic lens.
Neon glow lighting. Dreamlike atmosphere.
Teal and orange color grade.
Vertical 9:16 format.
Each block maps to a real cinematographic decision:
| Block | Controls | Example values |
|---|---|---|
| Shot type | emotional distance | close-up, wide, aerial, POV |
| Subject + action | the content | concrete verbs, not nouns |
| Setting | context & texture | specific > generic |
| Camera movement | sense of direction | push-in, orbit, crane, FPV |
| Lens | intimacy & falloff | 35mm, 85mm, anamorphic, macro |
| Lighting + mood | atmosphere | golden hour, neon, eerie, serene |
| Color grade | the "cinema" read | teal/orange, film grain, noir |
| Format | composition for frame | 16:9, 9:16, 1:1, 21:9 |
Why this is a engineering problem, not an art problem
Freehand prompting has the same failure mode as unstructured code: when it breaks, you can't localize the bug. Slotting each decision into a fixed field means a bad result becomes a diff. Output too flat? The camera.movement field is probably static. Too cold emotionally? Check lighting/mood. This is the same reason we use structured config over magic strings.
It also makes prompts composable. Hold six blocks constant and vary one, and you get a controlled A/B: same shot, anamorphic vs 35mm, and you can actually see what the lens does. That's impossible when every prompt is a fresh paragraph.
The format block matters more than people think
Appending an explicit aspect ratio (Vertical 9:16 format.) isn't cosmetic — it changes how the model composes headroom and subject distance. Building the same prompt for 16:9 and 9:16 without changing that block gives you a mis-framed vertical clip. Automating this append (set format once, apply to every copied prompt) removes a whole class of silent errors.
Try the structure interactively
I put this structure into a free browser tool — the Seedance Prompt Composer demo. You pick each block from a set of options and it assembles the prompt live, then copies it out with the format tag already appended. It's a single offline HTML file, no install, no account. Good way to feel how the blocks interact before wiring the pattern into your own pipeline.
In a follow-up I'll cover how the full version stores 3,000 of these as a searchable, no-backend browser app — the localStorage and single-file architecture behind it.
Top comments (0)