name: video-generation description: Generate AI video with Veo or Sora. Triggers on text-to-video, image-to-video, video extension, style-consistent generation. Not for video analysis, research, or FFmpeg editing.
Video Generation
Generate AI video using Veo (MCP tools) or Sora (direct API script). This skill covers provider selection, generation modes, defaults, and the draft-to-final workflow.
For full tool references, model IDs, camera reliability data, and negative prompt blocks, see references/provider-details.md.
Provider Selection
Choose before writing prompts.
| Need | Provider | Why |
|---|---|---|
| Native audio, 4K output, style/asset references, video extension | Veo | Veo 3.1 has the richer media-control surface |
| 1080p production, text-heavy scenes, clean draft/final model split | Sora | sora-2 drafts + sora-2-pro finals is the most reliable loop |
| High-value hero shot, uncertain which provider wins | Both | Generate with both, pick winner from review evidence |
Decision rules:
- Veo when: native audio matters, you need 4K, you have style-anchor images for cross-clip consistency, or you need to extend an existing clip.
- Sora when: 1080p is sufficient, the scene has on-screen text, or the draft-to-pro upgrade path saves iteration time.
- Both when: the shot is expensive to reshoot and the extra cost of a bakeoff is justified.
Generation Modes
Text-to-Video
Prompt describes the scene. Both providers support this.
- Veo:
mcp__veo__generate_video-- supportsnumber_of_videos(1-4) for multi-take - Sora:
sora_direct.py create-and-poll-- single generation per call
Image-to-Video (I2V)
Animate a static image. Source image quality is critical.
- Veo:
mcp__veo__animate_image-- absolute path to source image required - Sora:
sora_direct.py create-and-poll --input-reference-- auto-resizes/crops source to match output size
Video Extension
Continue an existing clip with new content.
- Veo:
mcp__veo__extend_video_clip-- Veo 3.1 only, continues from last second - Sora:
sora_direct.py extend --id <video_id>-- extends by prompt
Styled Generation (Veo only)
Generate video with 1-3 reference images for visual consistency.
mcp__veo__generate_video_with_style-- Veo 3.1 only- Reference types:
"asset"(preserves composition) or"style"(preserves palette/grain/lighting)
Default Settings
Veo Defaults
| Parameter | Draft | Final |
|---|---|---|
| Model | veo-3.1-fast-generate-preview |
veo-3.1-generate-preview |
| Resolution | 720p |
1080p |
| Duration | 6s |
8s |
| Aspect ratio | 16:9 |
16:9 |
| Negative prompt | Always include default block (see references) | Always include default block |
Sora Defaults
| Parameter | Draft | Final |
|---|---|---|
| Model | sora-2 |
sora-2-pro |
| Resolution | 1280x720 |
1920x1080 (or 1080x1920 portrait) |
| Duration | 4s |
4s (or 8s for extended scenes) |
| Draft count | 2 | 1 |
Draft-to-Final Workflow
Generate cheap drafts first, review, then produce the final with the quality model. This saves 60-70% on failed iterations.
Veo Path
- Generate 2-3 variants with
veo-3.1-fast-generate-previewat 720p - Review candidates (silence test at 1x, slow-motion scan at 0.5x)
- Regenerate winner prompt with
veo-3.1-generate-previewat 1080p
Sora Path (Preferred -- Automated)
- Drafts:
sora_direct.py production --stage drafts-- generates 2 clips withsora-2at 720p - Review:
sora_direct.py review-drafts-- Gemini scores each draft on 5 dimensions (prompt fidelity, temporal stability, surface realism, lighting coherence, text preservation) - Finalize:
sora_direct.py finalize-from-review-- selects winner, launchessora-2-profinal at 1080p
All three steps require --run-dir with an absolute path. Relative paths break the review subprocess.
Camera Movement Reliability
Camera choice directly affects generation success rate. Summary:
| Movement | Success Rate | Recommendation |
|---|---|---|
| Static | 94-97% | Default for hero shots, UI demos |
| Zoom | 81-87% | Good for reveals and emphasis |
| Pan | 73-85% | Acceptable for environment shots |
| Tilt | 67-81% | Use descriptive phrasing, not "tilt" |
| Tracking | 58-68% | B-roll only, generate 3 variants |
| Crane | 44-52% | Expect retakes |
| Combined | ~29% | Never -- split into separate shots |
For movements below 70%, always generate 3 variants. Full percentages and prompt phrasing in references/provider-details.md.
Key Constraints
Veo
- Always pass the negative prompt block (see references)
- All paths must be absolute
extend_video_clipandgenerate_video_with_stylerequire Veo 3.1- Videos stay on Google servers for 2 days -- download promptly
- Named physical light sources required in every prompt (never "well-lit")
Sora
OPENAI_API_KEYmust be set--run-dirmust be absolute for production workflows- No real people, public figures, copyrighted characters
- Only non-human character uploads
- 720p drafts auto-map to compatible sizes when final target is 1080p
- I2V auto-resizes source images to match
--size
Cost Reference
| Provider | Model | Resolution | Duration | Cost |
|---|---|---|---|---|
| Veo | 3.1 Standard | 1080p | 8s | ~$3.20 |
| Veo | 3.1 Fast | 720p | 8s | ~$1.20 |
| Sora | sora-2 | 720p | 4s | ~$0.85 |
| Sora | sora-2-pro | 1080p | 4s | ~$3.50 |
| Sora | sora-2-pro | 1080p | 8s | ~$5.60 |
Typical scene (draft + final): $4-6 total.
Prompt Structure
Follow this template for both providers:
[Camera+Lens]: [Subject with physical detail] [Action with force verbs],
in [Setting with atmosphere], lit by [Named physical light source].
Style: [Texture micro-details, film grain]. Audio: [Ambient/SFX].
Rules:
- Named physical light source -- always specify concrete light ("cool fluorescent overhead strips", not "well-lit")
- Avoid dynamic physics -- no falling objects, fluids, collisions
- Force-based verbs -- "grips handle and pulls" not "opens"
- Micro-imperfections -- append "slightly grainy film-like quality, fine surface texture"
- Exact descriptors -- copy-paste character/scene descriptions across shots, never paraphrase
Configuration
- Veo MCP server:
veoin~/.claude/.mcp.json - Veo auth:
GOOGLE_API_KEYorGEMINI_API_KEY - Veo output:
~/Videos/veo-generated/ - Sora script:
/Users/fausto_home/.claude/skills/sora/scripts/sora_direct.py - Sora auth:
OPENAI_API_KEY - Run with:
uv run --with requests python <script> <command> [args]
Related Skills
- video-production — multi-shot orchestration, chaining patterns, QA workflow
- image-generation — hero image generation for style anchors
- ffmpeg-production — post-processing, encoding, platform export