Video Generation
Turn a brief into a video.
Workflow
Step 1: Read the brief and the media
Look at everything the user supplied. Run image_analysis on each image and video_analysis on
each video. Write down what each one shows — who is in it, where it is, how it is lit, how it is
framed — so the prompt matches it instead of describing something different. Send a product URL or
photo to analyzing-products. Skip an image you already know: you made it this turn, or you have
already analyzed it.
Then read the brief: how long the video runs, what happens in it, where it will be posted, and
whether anyone speaks.
Where the video has a product, write one description of it and reuse it unchanged in every
storyboard — rephrasing it between calls reads as a different product.
- Material and finish, surface by surface.
- Size — its width and height, and how it sits against a hand.
- Two to five visual anchors — features you can verify in the product image and nothing else:
exact colours, the shape of a closure or handle, the gauge of a chain or strap, a surface finish, a
distinguishing mark.
- What may be done with each part — which parts are fixed to it, and the whole of what the moving
ones allow. Nothing later does anything to the product that isn't on this list.
Don't transcribe what the label says. Spelling out the printing invites the model to redraw it,
and redrawn text comes back warped.
Step 2: Pick the model and load its parameters
seedance-2.0-fast is the default — the general-purpose workhorse; a weak result is usually the
prompt's fault, not the model's.
The storyboard route always runs on seedance-2.0-fast unless the user named a model. The table below
decides a single clip.
Reach past the default only on a clear signal:
| Reach for another model when the brief… |
Model |
| Needs one unbroken shot longer than 15 seconds, or more than nine reference images |
seedance-2.5 |
| Needs spoken dialogue with lip-sync, the tightest prompt-following, or top cinematic quality |
veo-3.1-fast |
| Is editing an existing clip — restyle it, add or replace an element, fix on-screen text — or hinges on legible on-screen text |
gemini-omni |
| Must hold one person or character consistent across references or several shots |
kling-3.0-pro |
| Has an edgy or sensitive subject Seedance would refuse, or wants the fastest, cheapest draft |
grok-imagine-video |
| Is a high-volume or cost-sensitive batch where top quality isn't essential |
wan-2.7 |
When more than one fits, work down this list and stop at the first that applies:
- The user named a model — use it.
- The video takes the storyboard route —
seedance-2.0-fast.
- Seedance refused the brief (
nsfw / ip) or keeps failing — use the fallback from the table.
- The brief matches a row above — use that model.
- Otherwise use
seedance-2.0-fast. If two models tie, use the newer one.
Then call list_video_models for the chosen model and read its accepted modes, aspect ratios, durations, resolutions, and media — each validates its own subset, and you need these before writing the prompt.
Step 3: Route
Take one of four paths:
- The video is a UGC video — a creator or customer, as themselves, sharing their own take on a product: a review, unboxing, try-on, tutorial, testimonial or influencer endorsement → Trigger the
generating-ugc-videos skill workflow, whether or not the brief says UGC.
- The video is a product ad or commercial — a produced advertisement in the brand's voice: a product-hero showcase with no one on screen, or a story or lifestyle commercial where a presenter or actor plays a role in the brand's spot → Trigger the
generating-ad-videos skill workflow.
- One clip covers it — the video runs no longer than the model's longest clip, and holds one continuous shot → Read and follow the steps in
references/direct-route.md.
- It needs more than one clip — the video runs longer than the model's longest clip, or the brief needs a cut between shots → Read and follow the steps in
references/storyboard-route.md.
list_video_models gives the model's longest clip. Storyboard sheets are what keep a person, a place
and a product looking the same from clip to clip, and what fixes the frame on both sides of a cut, so
anything with more than one clip takes the storyboard route.
A supplied image is used one of two ways. Ask which, if the brief doesn't say:
- As the start frame, the video begins on that exact image.
- As a reference, it shows what a subject or a style looks like and the video is a new scene.
A start frame works for one clip only, and that clip can carry nothing else —
start_frame_image cannot be combined with any reference_* input. Where a person, a product or a
style has to match an image that isn't the start frame, pass that image as a reference and drop the
start frame.
Edge cases
- Safety / NSFW rejection → name a workable stand-in for whatever tripped the filter (cover the
wardrobe, change the setting) and resubmit. If the subject itself is the block, switch to
grok-imagine-video (see Step 2). A second rejection: tell the user which element is blocked
instead of retrying blind.
- Still generating (
status: "pending") or the call times out → the clip is still rendering on
the server, not a failure — do not resubmit (that starts a second billed job). If you got a
pending handle, call job_status with it to rejoin; if the call timed out with no handle, wait and
tell the user it's still processing rather than firing a fresh generation.
- Generic failure (an explicit error result, not a timeout) → read the error. If it names a
parameter or a limit, correct that and resubmit. Otherwise resubmit once; if it fails again, either
switch to a fallback model (Step 2) and write to its guide, or give the user the error text
rather than guessing.
- Reference or frame rejected on count / mode → the error states the model's limit or supported
modes; adjust to it, or check
list_video_models.
- Unsure which model fits a named request → call
list_video_models and pick by strengths.
- The user wants a standalone audio file, not clip audio — a voiceover to drop on a timeline, or
a music track or sound effect they need to place themselves. Clip audio can't give them that; it is
baked into the picture. Send speech to
generating-audio, and say plainly that separate music and
effects tracks aren't generated here.
error: "no_provider_configured" → relay the tool's hint (the user must set their key).
Reference
Each route is a complete workflow. Read the one Step 3 picked, and follow it to the end.
references/direct-route.md — one clip: the six modes and what each one passes, the beats, the
prompt and the call.
references/storyboard-route.md — more than one clip: the video planned as beats, built through
storyboards and joined into one file.
1---2name: generating-videos3description: ALWAYS read this skill before generating or animating any video, or calling video_generate — text-to-video, image-to-video, a start→end transition, or a reference / motion / audio-guided clip. Generates a video from a brief — one clip, or several clips joined into a single file at any length. Use when the user wants to make or generate a video, animate a photo, bring an image to life, produce b-roll, film a described scene, or move from one held frame to another. This skill should also be used when the video takes its motion or style from an existing video, or has to run to an existing audio track.4license: Apache-2.05---67# Video Generation89Turn a brief into a video.1011## Workflow1213### Step 1: Read the brief and the media1415**Look at everything the user supplied.** Run `image_analysis` on each image and `video_analysis` on16each video. Write down what each one shows — who is in it, where it is, how it is lit, how it is17framed — so the prompt matches it instead of describing something different. Send a product URL or18photo to `analyzing-products`. Skip an image you already know: you made it this turn, or you have19already analyzed it.2021**Then read the brief**: how long the video runs, what happens in it, where it will be posted, and22whether anyone speaks.2324**Where the video has a product, write one description of it** and reuse it unchanged in every25storyboard — rephrasing it between calls reads as a different product.2627- **Material and finish**, surface by surface.28- **Size** — its width and height, and how it sits against a hand.29- **Two to five visual anchors** — features you can verify in the product image and nothing else:30 exact colours, the shape of a closure or handle, the gauge of a chain or strap, a surface finish, a31 distinguishing mark.32- **What may be done with each part** — which parts are fixed to it, and the whole of what the moving33 ones allow. Nothing later does anything to the product that isn't on this list.3435**Don't transcribe what the label says.** Spelling out the printing invites the model to redraw it,36and redrawn text comes back warped.3738### Step 2: Pick the model and load its parameters3940**`seedance-2.0-fast` is the default** — the general-purpose workhorse; a weak result is usually the41prompt's fault, not the model's.4243**The storyboard route always runs on `seedance-2.0-fast` unless the user named a model.** The table below44decides a single clip.4546Reach past the default only on a clear signal:4748| Reach for another model when the brief… | Model |49| --- | --- |50| Needs one unbroken shot longer than 15 seconds, or more than nine reference images | `seedance-2.5` |51| Needs spoken dialogue with lip-sync, the tightest prompt-following, or top cinematic quality | `veo-3.1-fast` |52| Is editing an existing clip — restyle it, add or replace an element, fix on-screen text — or hinges on legible on-screen text | `gemini-omni` |53| Must hold one person or character consistent across references or several shots | `kling-3.0-pro` |54| Has an edgy or sensitive subject Seedance would refuse, or wants the fastest, cheapest draft | `grok-imagine-video` |55| Is a high-volume or cost-sensitive batch where top quality isn't essential | `wan-2.7` |5657When more than one fits, work down this list and stop at the first that applies:58591. The user named a model — use it.602. The video takes the storyboard route — `seedance-2.0-fast`.613. Seedance refused the brief (`nsfw` / `ip`) or keeps failing — use the fallback from the table.624. The brief matches a row above — use that model.635. Otherwise use `seedance-2.0-fast`. If two models tie, use the newer one.646566Then **call `list_video_models` for the chosen model** and read its accepted modes, aspect ratios, durations, resolutions, and media — each validates its own subset, and you need these before writing the prompt.6768### Step 3: Route6970Take one of four paths:7172- **The video is a UGC video** — a creator or customer, as themselves, sharing their own take on a product: a review, unboxing, try-on, tutorial, testimonial or influencer endorsement → Trigger the `generating-ugc-videos` skill workflow, whether or not the brief says UGC.73- **The video is a product ad or commercial** — a produced advertisement in the brand's voice: a product-hero showcase with no one on screen, or a story or lifestyle commercial where a presenter or actor plays a role in the brand's spot → Trigger the `generating-ad-videos` skill workflow.74- **One clip covers it** — the video runs no longer than the model's longest clip, and holds one continuous shot → Read and follow the steps in `references/direct-route.md`.75- **It needs more than one clip** — the video runs longer than the model's longest clip, or the brief needs a cut between shots → Read and follow the steps in `references/storyboard-route.md`.7677`list_video_models` gives the model's longest clip. Storyboard sheets are what keep a person, a place78and a product looking the same from clip to clip, and what fixes the frame on both sides of a cut, so79anything with more than one clip takes the storyboard route.8081A supplied image is used one of two ways. Ask which, if the brief doesn't say:8283- As the **start frame**, the video begins on that exact image.84- As a **reference**, it shows what a subject or a style looks like and the video is a new scene.8586**A start frame works for one clip only, and that clip can carry nothing else** —87`start_frame_image` cannot be combined with any `reference_*` input. Where a person, a product or a88style has to match an image that isn't the start frame, pass that image as a reference and drop the89start frame.9091## Edge cases9293- **Safety / NSFW rejection** → name a workable stand-in for whatever tripped the filter (cover the94 wardrobe, change the setting) and resubmit. If the subject itself is the block, switch to95 `grok-imagine-video` (see **Step 2**). A second rejection: tell the user which element is blocked96 instead of retrying blind.97- **Still generating (`status: "pending"`) or the call times out** → the clip is still rendering on98 the server, **not** a failure — do **not** resubmit (that starts a second billed job). If you got a99 pending handle, call `job_status` with it to rejoin; if the call timed out with no handle, wait and100 tell the user it's still processing rather than firing a fresh generation.101- **Generic failure** (an explicit error result, not a timeout) → read the error. If it names a102 parameter or a limit, correct that and resubmit. Otherwise resubmit once; if it fails again, either103 switch to a fallback model (**Step 2**) and write to its guide, or give the user the error text104 rather than guessing.105- **Reference or frame rejected on count / mode** → the error states the model's limit or supported106 modes; adjust to it, or check `list_video_models`.107- **Unsure which model fits a named request** → call `list_video_models` and pick by `strengths`.108- **The user wants a standalone audio file, not clip audio** — a voiceover to drop on a timeline, or109 a music track or sound effect they need to place themselves. Clip audio can't give them that; it is110 baked into the picture. Send speech to `generating-audio`, and say plainly that separate music and111 effects tracks aren't generated here.112- **`error: "no_provider_configured"`** → relay the tool's `hint` (the user must set their key).113114## Reference115116Each route is a complete workflow. Read the one Step 3 picked, and follow it to the end.117118- `references/direct-route.md` — one clip: the six modes and what each one passes, the beats, the119 prompt and the call.120- `references/storyboard-route.md` — more than one clip: the video planned as beats, built through121 storyboards and joined into one file.