Structured Prompts & JSON Prompting
When scenes get complex, prose collapses. Labeled sections and JSON prompts give every element its own unambiguous slot — especially for video.
Prose prompts have a breaking point. Describe two characters, a specific outfit each, a camera move and a lighting change in one long sentence, and attributes start leaking — the red jacket migrates to the wrong person, the fog swallows the whole scene. The fix is structure: give every element a labeled slot so nothing can leak into its neighbor.
Level 1: labeled sections
The gentlest structure is plain-text labels — SUBJECT, WARDROBE, SETTING, LIGHTING, CAMERA, STYLE — each on its own line. Models parse this beautifully because captions, screenplays and photo briefs in their training data use the same convention. It is still English, just English with an org chart.
Two characters, zero attribute leakage
SUBJECT A: a tall woman in her 60s, silver bob, emerald-green wool coat, holding a chess piece. SUBJECT B: a teenage boy, curly black hair, mustard hoodie, leaning forward mid-move. SETTING: a rainy Paris cafe terrace, marble chess table. LIGHTING: overcast soft light, warm lamp glow from inside. CAMERA: 35mm, eye level, both faces in focus. STYLE: candid documentary photography, Kodak Portra 400
Try cramming those twelve attributes into one prose sentence and watch the coat and hoodie swap owners. Labels keep each detail glued to its subject.
Level 2: full JSON prompting
For maximum control — especially in video generation, where you juggle scene, motion, camera and audio at once — write the prompt as a JSON object. Keys act like a film crew call sheet: the model reads *camera.movement* and knows exactly which department the value belongs to. Video models like Veo 3.1 and Sora 2 respond especially well because their prompts routinely describe multiple timed elements.
JSON prompt for a complex still
{ "scene": "night market food stall in Bangkok", "subject": { "who": "elderly chef with rolled sleeves", "action": "tossing noodles in a flaming wok", "expression": "focused, slight grin" }, "foreground": "steam and wok flames", "background": "blurred neon signs, hanging lanterns", "lighting": "orange flame glow as key light, teal neon rim light", "camera": { "lens": "35mm", "aperture": "f/2", "angle": "slightly low" }, "style": "cinematic street photography", "aspect_ratio": "3:2" }Every value is short and concrete — JSON keys do the organizing, values do the describing. Nested objects (subject.expression, camera.lens) keep even micro-details unambiguous.
JSON prompt for video (Veo 3.1)
{ "shot": { "duration_seconds": 8, "camera_movement": "slow dolly-in", "framing": "medium close-up" }, "subject": "a lighthouse keeper lighting an oil lamp", "scene": "stone lantern room, storm raging outside the glass", "action_timeline": [ { "at": "0s", "event": "match strikes, flame catches" }, { "at": "4s", "event": "lamp glow fills the room, he looks out at the storm" } ], "lighting": "single warm lamp against cold blue storm light", "audio": "wind, rain on glass, low creaking", "style": "cinematic, shallow depth of field" }The action_timeline array is the killer feature: prose struggles with WHEN things happen, JSON makes timing explicit. Keep one action per beat.
- Use prose for simple scenes: one subject, one mood, under ~40 words.
- Use labeled sections when 2+ subjects each carry distinct attributes.
- Use JSON for video shots, timed actions, or scenes with 4+ elements that must not blend.
- Reuse your schema — a saved JSON skeleton becomes a fill-in-the-blanks template for an entire series.
Structured prompts are also the natural bridge to automation: a JSON skeleton with variable slots is exactly what you feed a batch pipeline or a workflow. Master the manual version here, and the AI Creator Pro path will scale it for you.
JSON prompting shines brightest in video. Take the lighthouse-keeper prompt above, tweak the timeline, and generate your first structured shot. Generate a Video