Google · text-to-video

    VEO 3.1 Prompting Guide

    What this model actually wants — from its schema, not from vibes.

    VEO 3.1 is Google's text-to-video model on Versely. This page is its structured prompting reference: the 4 parameters its schema actually exposes, the t2v technique that applies to it, copy-ready templates, and real prompts from production workflows that shipped on it.

    Everything here is grounded in the same sources Versely's agent reads — the model's input schema, the veo family rule its prompt enhancer applies, and prompts quoted verbatim from shipped workflows. Where a line is general craft advice rather than a documented fact about VEO 3.1, the page says so.

    What VEO 3.1 wants

    The exact input surface, from the same schema the Versely agent fetches with get_model_input_schema before every generation.

    Variant via kie

    ParameterWhat it doesValues
    promptreqText prompt (detailed and specific)string
    imageUrlsImage array (1-3 depending on generationType)array (min 1, max 3)
    aspect_ratioNote `Auto` is capitalized16:9 · 9:16 · Autodefault: 16:9
    resolution1080p/4K require separate async fetch endpoints720p · 1080p · 4kdefault: 720p
    • Duration is fixed at up to 8s (extendable via /veo/extend)
    • 1080p must be fetched async via GET /api/v1/veo/get-1080p-video?taskId=...&index=0 (~1-3min)
    • 4K via POST /api/v1/veo/get-4k-video (~5-10min, costs ~2× Fast generation)
    • For First/Last Frame mode: set generationType=FIRST_AND_LAST_FRAMES_2_VIDEO and imageUrls=[first,last] (exactly 2)

    Variant via fal

    ParameterWhat it doesValues
    promptreqText prompt (max 20000 chars per docs)string (max 20000)
    aspect_ratioAspect ratio (docs: 16:9 or 9:16 only — no 1:1)16:9 · 9:16default: 16:9
    duration4s/6s/8s — STRING with `s` suffix4s · 6s · 8sdefault: 8s
    resolution720p / 1080p / 4k720p · 1080p · 4kdefault: 720p
    negative_promptExclusionsstring
    generate_audioToggle audiobooleandefault: true
    • Verified against fal.ai/models/fal-ai/veo3.1 — aspect_ratio enum is 16:9/9:16 only (no 1:1); SynthID watermark cannot be disabled

    The rule Versely's enhancer applies

    Versely's prompt enhancer carries a per-family rule for veo models, applied automatically whenever it rewrites a prompt for VEO 3.1. Verbatim:

    VEO video models respond to cinematic descriptions. Include camera angles, movement types (dolly, crane, steadicam), lighting setup, and temporal flow (slow motion, time-lapse). Be specific about scene transitions.

    Technique that applies here

    Text-to-video: scene narrative, camera movement, temporal flow; negative prompts where supported

    • VEO, Kling, and Sora all carry a MODEL_TIPS rule the prompt enhancer applies automatically, and all three converge on naming the camera: VEO's tip says to 'include camera angles, movement types (dolly, crane, steadicam), lighting setup, and temporal flow' and to 'be specific about scene transitions'; Kling's tip asks for 'camera movement (pan, zoom, tracking shot), subject action, and environment details... motion direction and pacing'; Sora's tip wants 'clear scene narratives, camera movements, and temporal progression.' None of these schemas expose a camera-movement parameter — the enhancer is rewriting your prose toward this language, so writing the move by name yourself ('slow dolly-in,' 'tracking shot following the subject') works with the family instead of getting rewritten.
    • Duration is a hard enum or cap per model, not a suggestion. VEO 3.1 is fixed at up to 8s per generation (extendable afterward via a separate call), and its fal variant's duration enum is literally '4s' / '6s' / '8s'. Sora 2's kie variant has no duration field at all — length is chosen via n_frames ('10' or '15'). Kling and Seedance's various tiers run roughly 3-15s windows depending on the exact model. Write one continuous beat sized to the window you're generating into, not a three-act script the model will compress or truncate.
    • Aspect ratio, resolution and style are dropdown enums on most of these schemas — set the parameter, don't restate it in prose ('in glorious widescreen' does nothing on its own). VEO's is 16:9 / 9:16 / Auto, Kling's is 16:9 / 9:16 / 1:1, Seedance 1.5 Pro's is seven values including 21:9 and auto. Sora 2's kie aspect_ratio enum is the sharpest exception: it's literally the words 'portrait' / 'landscape', not a ratio string, so writing or setting '16:9' does nothing there.
    • General technique, not model-specific: where a model exposes a real negative_prompt field (Kling, Pixverse, LTX, Wan, VEO's fal variant), put exclusions there instead of writing 'no X' into the scene description — it's a separate parameter, read independently of the prompt. And where a generate_audio-style boolean exists, decide sound as that parameter, not as a prose request — defaults vary even within one family (Kling's O3 tier defaults generate_audio to false while its V2.6/V3 tiers default it to true).

    Copy-ready templates

    Replace the bracketed slots; each template says when it's the right shape.

    Template 1
    [SUBJECT] [ACTION] in [SETTING]. Camera: [CAMERA MOVEMENT — e.g. slow dolly-in / handheld tracking shot / static locked-off]. Lighting: [LIGHT DESCRIPTION]. Transition: [HOW THE SHOT RESOLVES].

    Use when: VEO, Kling, or Sora-family t2v models — their applied MODEL_TIPS reward named camera movement and explicit transitions.

    Template 2
    [SUBJECT] [ONE CONTINUOUS ACTION] over the full clip. No scene cuts, no wardrobe or setting changes.

    Use when: any model with a short fixed-duration enum (VEO's 4s/6s/8s, Kling/Seedance's few-second windows) — sizing the action to the real duration avoids the back half of a multi-beat prompt getting compressed or dropped.

    Template 3
    [MAIN PROMPT TEXT]. Negative prompt: [ELEMENTS TO EXCLUDE — e.g. text, watermark, blurry, extra limbs, distorted hands].

    Use when: models whose schema exposes a separate negative_prompt field (Kling, Pixverse, LTX, Wan, VEO's fal variant) — exclusions belong in that field, not folded into the scene description.

    Real prompts that shipped on VEO 3.1

    Quoted verbatim from Versely's production workflow library — each one generated a scene in a shipped workflow.

    VEO 3.1 — "Hero Pasture — Intro"
    The PRIMO PROTEIN pouch character smiles warmly at the camera, gives a small natural wave on the first sentence, subtle confident half-flex on "actually works." Tiny upbeat sway. Mouth perfectly lip-synced. No overacting. Speaks in one smooth continuous flow with zero pauses, zero breath gaps, zero sighs, zero hesitations: "Hi, I'm Primo. I'm the protein powder that actually works." Voice: warm friendly American male, late 20s, casual energetic with smile in voice. Completely human, not AI. Ambient: dead silent. No music, no song, no tune, no melody, no ambient sound, no birds, no wind. Only his voice. Background: grass sways gently, cows graze slowly in visual silence. Static medium shot, slight low angle. Warm golden sunlight. Pixar-style 3D, cinematic.

    Shipped in Primo Protein vs Other Brand (scene: Hero Pasture — Intro).

    VEO 3.1 — "undefined"
    Bananino whispers to the group, looking around cautiously. The camera slowly zooms in on the huddle. Dialogue: Bananino: 'The Giant returns in 30 seconds. Operation: Sugar-Rush is a go!'

    Shipped in The Sweet Switch: Fruit Heist (scene: ).

    VEO 3.1 — "The Empty Box"
    3D Pixar animated cartoon style — keep soft Pixar animation look the entire time, NOT photorealistic. The young woman stands quietly at the wooden kitchen counter in Pixar 3D animated style. Her right hand rests gently on the open empty Lunchwell lunchbox lid. Her left hand rests flat on the counter beside the box. She looks down at the empty lunchbox with a soft worried animated cartoon expression. Her chest rises gently in a small breath. She blinks slowly once with soft animated eyes. Subtle background motion: soft warm morning sunlight gently flickers through the kitchen window from the left, the small green basil plant leaves sway barely in the calm air. The bowls of fresh ingredients on the counter stay still. Camera: holds steady with a very subtle slow push-in toward the empty lunchbox. Mood: quiet, gentle, emotional anchor moment. Slow steady pacing. Style: maintain soft Pixar-style 3D animation aesthetic throughout, warm cartoon look, smooth animated character motion. Ambient: dead silent. No music, no song, no tune, no melody, no ambient sound, no kitchen sounds, no voice. Vertical 9:16 aspect ratio.

    Shipped in Lunchwell — Hospital Visit Story (scene: The Empty Box).

    How the Versely agent does this automatically

    You can use this page by hand, or let the agent apply the same knowledge. Four real mechanisms — no more, no less:

    • get_model_input_schema — before generating, the agent looks up VEO 3.1's exact input fields, required fields, allowed values, defaults, and min/max bounds. The parameter table above is that same surface.
    • The prompt enhancer's family rules — 12 per-family rewrite rules, including the veo rule quoted on this page, shape how a rough prompt gets rewritten.
    • The per-provider speech guide — for TTS scripts, the agent follows a provider-specific tag scheme — not relevant to this model, but it's why voiceover scripts come out marked up correctly.
    • expand_movie_scene — in movie flows, brief scene ideas are rewritten into detailed cinematic descriptions before generation.

    Mistakes that waste generations

    • Writing a multi-beat script (three different actions or cuts) into one generation call on a model capped well under 15s — VEO tops out at 8s per call, Sora 2's kie variant only offers 10 or 15 frames — and the model compresses everything into a blur or drops the later beats rather than pacing through your scenes.
    • Describing aspect ratio or resolution in prose ('shot in glorious 4K widescreen') instead of setting the actual aspect_ratio/resolution enum — the text has no effect on frame shape or output resolution, only the parameter does, and on Sora 2 the valid values are the words 'portrait'/'landscape', not a ratio string at all.
    • Using one family's register on another: a dense Kling-style shot list ('slow pan, then a hard cut to a tracking shot') fights a Wan model's 'straightforward... style keywords' tip, and a plain narrative sentence undersells VEO or Sora's named-camera-movement tip.

    The long-form guide

    This page is the structured reference. For the essay treatment — worked examples, failure modes, and narrative — read VEO 3.1 Prompting: The Complete Guide.

    Frequently asked questions

    Does VEO 3.1 support negative prompts?+

    Yes — the schema exposes negative_prompt. Put exclusions there instead of writing "no text, no watermark" into the main prompt.

    Which aspect ratios does VEO 3.1 support?+

    The aspect_ratio parameter is an enum: 16:9, 9:16, Auto. Set the parameter — describing the frame shape in prose does nothing on its own.

    How long can a VEO 3.1 generation be?+

    Duration is a hard enum: 4s, 6s, 8s. Write one continuous beat sized to the window you pick, not a script the model will compress.

    How does the Versely agent know VEO 3.1's parameters?+

    Before generating, the agent calls its get_model_input_schema tool, which looks up the exact input fields, required fields, allowed values, defaults, and min/max bounds for the model; separately, the prompt enhancer applies the veo family rule quoted on this page to the prompt text itself. Nothing on this page is guessed — it is the same schema surface those tools read.

    Related prompting guides

    Generate with VEO 3.1

    VEO 3.1 is live in Versely — paste a template above, or just describe what you want and let the agent map it onto the schema for you.