About scenario-veo
A Scenario skill for generating and extending videos with Google’s Veo models. It guides users through choosing model modes and composing prompts for shots with optional audio.
Key features
- 01Veo text-to-video and image-to-video
- 02Reference-image guidance
- 03Video continuation
- 04Audio and shot prompt guidance
Use cases
- 01Create a clip from a text prompt
- 02Guide character or style consistency with references
- 03Bridge two still images in a transition
- 04Continue an existing video clip
MCP support
The skill describes using Scenario tools such as search, model_schema_get, model_run, jobs_wait, and asset_display to generate and review video.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-veoAfter installing, type/scenario-veoin Claude Code to confirm it loaded.
Details
From the project READMEScenario Veo Video
Overview
Veo, Google's video family on Scenario, ships four members at authoring time: Veo 3.1 (full quality,
reference images with a style switch), Veo 3.1 Fast (same modes, quicker, no switch), Veo 3.1 Lite
(frame anchors only, cheapest), and Veo 3.1 Extend Video (continues a clip). Discover them with
search and treat model_schema_get as the contract: members agree on parameter names and disagree
on which inputs exist at all.
Connection and the core loop: see the scenario skill in this repo; model-agnostic video work: the
scenario-video skill. If a sibling skill named here is missing from your available skills, ask the
user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from
tool schemas and flag the gap.
Quick reference
Mode follows from the inputs (names from the live schema):
| Mode | Inputs | Behavior |
|---|---|---|
| Text | prompt | aspectRatio 16:9 or 9:16 |
| First frame | image (+ prompt) | opens on that frame; a mismatched image may be cropped |
| Transition | image + lastFrameImage | bridges the stills; prompt one continuous move |
| Reference | referenceImages (1 to 3) | subject or style consistency; duration locked to 8 |
| Extend | video (Extend member) | continues the clip; 16:9 source, short side 720p or 1080p |
image and referenceImages are mutually exclusive. referenceImagesType exists on full Veo 3.1
alone and reads the whole array one way: ASSET (default) carries subjects, objects, and scenes;
STYLE carries palette, lighting, and texture. Fast takes references without the switch; Lite takes
none. Shared across the three generators at authoring time: negativePrompt, resolution (720p,
1080p), duration (4, 6, or 8 seconds), and seed. generateAudio is required on every member
and moves the price. The Extend member takes only prompt, video, generateAudio, and seed: no
duration, resolution, or ratio controls. At authoring time price spanned roughly five times between
Lite and full 3.1 for one image-to-video job, and one extension cost more than a fresh full
generation, so aim for the shot in one 8 second pass and dry_run the same payload on two members
before a batch.
The soundstage is in the prompt
With generateAudio: true, Veo renders synchronized dialogue, effects, and ambience, and it takes
audio direction literally. Put spoken lines in quotation marks, prefix effects with SFX: and room
tone with Ambient noise:. A prompt with no audio direction still gets a soundtrack, just not the
one you meant. When a clip needs silence for later scoring, set generateAudio: false rather than
prompting for quiet.
Prompt one continuous shot
Write present-tense prose ordered as cinematography, subject, action, context, style: camera and
shot scale first, one primary arc, roughly 90 to 250 words. For several beats in one clip, timestamp
lines work ([00:00-00:02] Medium shot...), spans fitting inside the chosen duration.
Worked example: a dialogue shot from character references
searchwithtarget="models",query="veo",public=true. Prefer the newest non-deprecated hits, e.g.model_veo3-1andmodel_veo3-1-fast(live hits at authoring time: re-discover each session).model_schema_geton the chosen id: confirm which reference inputs exist before writing the payload.upload_assettwo character stills (see thescenarioskill) to get asset ids.model_runwith thatmodel_id,dry_run=true, andparameters={"prompt": "Medium shot, the knight lowers her visor and says, \"Hold the line.\" Torchlight flickers on wet stone. Ambient noise: distant thunder. SFX: metal visor clank.", "referenceImages": ["asset_a", "asset_b"], "referenceImagesType": "ASSET", "duration": 8, "resolution": "1080p", "aspectRatio": "16:9", "generateAudio": true}. Estimate the same job on the Fast id (dropreferenceImagesType, absent there) and compare.- Repeat
model_runwithwait=false, thenjobs_waitwith the returned job id, re-called withpending_job_idson timeout, never a secondmodel_run. asset_displaythe output and review with sound. To iterate on wording alone, hold an explicitseedfixed across reruns.
Common mistakes
- Combining
imagewithreferenceImages: mutually exclusive; pick the opening state or consistency. - Any duration but 8 with
referenceImages: reference mode supports only 8 seconds. - Sending
referenceImagesto Lite orreferenceImagesTypeto Fast: the schema decides which inputs exist. - Omitting
generateAudio: it is required on every member; pass it explicitly. - Extending a 9:16 clip: Extend takes 16:9 sources with a 720p or 1080p short side only.
- Writing the prompt as a list of negatives: describe the wanted scene, reserve
negativePromptfor what to discourage.