buildoak/fieldwork-skills/video-gen
Claude Code and agent skill by buildoak/fieldwork-skills
- community
Checking that the SKILL.md file is still in the repository.
Video generation via fal.ai -- from quick one-off clips to multi-scene productions with keyframes, state tracking, and assembly. 10+ models including Kling 3.0, Veo 3.1, Sora 2, LTX-2.3. Two modes: light (fire-and-forget) and project (structured pipeline with gates).
Install
npx vskill@latest install buildoak/fieldwork-skills/video-genSKILL.md
video-gen
Video generation and multi-scene production via fal.ai. Two modes: light (fire-and-forget) and project (interactive pipeline with gates).
Scripts: ./scripts/generate.py, ./scripts/preview.py, ./scripts/project_init.py, ./scripts/project_state.py, ./scripts/decompose.py, ./scripts/keyframe.py, ./scripts/clip.py, ./scripts/assemble.py, ./scripts/character_sheet.py Output dir: ./output/
Setup
- Claude Code: copy this skill folder into
.claude/skills/video-gen/ - Codex CLI: append this SKILL.md content to your project's root
AGENTS.md
For the full installation walkthrough (prerequisites, API keys, verification, troubleshooting), see references/installation-guide.md.
Credential management
Three tiers for managing the FAL_KEY environment variable:
- Vault skill (recommended): If you have a vault or secret-management skill, store the key there and export it before running scripts. Example:
export FAL_KEY=$(vault get FAL_KEY) - Custom secret manager: Use your team's preferred secret manager (1Password CLI, AWS Secrets Manager, etc.)
- Plain export:
export FAL_KEY='your-fal-ai-key'in your shell profile
For project mode (keyframes + character sheets): also need image-gen peer skill.
Staying Updated
This skill ships with an UPDATES.md changelog and UPDATE-GUIDE.md for your AI agent.
After installing, tell your agent: "Check UPDATES.md in the video-gen skill for any new features or changes."
When updating, tell your agent: "Read UPDATE-GUIDE.md and apply the latest changes from UPDATES.md."
Follow UPDATE-GUIDE.md so customized local files are diffed before any overwrite.
Decision Tree
Quick Reference
Light Mode
Project Mode
Light Mode
Model Selection
| Use Case | Model | Cost/5s | Why | |
|---|---|---|---|---|
| Fast drafts | ltx-2.3 | $0.20 | Open source, 4K capable, fastest iteration | |
| Cinematic | kling-v3 | $0.84 | Multi-shot narratives, character consistency | |
| Dialogue/lip sync | veo-3 | $2.00 | Best-in-class audio sync, natural performances | |
| Long clips | sora-2 | $2.50 | Up to 25s duration, complex scenes | |
| Budget with audio | wan | $0.50 | Cheapest audio option, social media | |
| Anime/stylized | hailuo | $0.40 | Anime support, micro-expressions | |
| Physics | cosmos | $0.20 | RL-trained on physics, simulation-accurate |
Script Reference: generate.py
| Flag | Default | Description | |
|---|---|---|---|
--model | ltx-2.3 | Model alias: ltx-2.3, kling-v3, veo-3, sora-2, wan, hailuo, cosmos, pixverse, grok | |
--mode | t2v | t2v (text-to-video) or i2v (image-to-video) | |
--prompt | required | Video description | |
--image | none | Source image path or URL (required for i2v) | |
--duration | 8 | Duration in seconds | |
--resolution | 1080p | 720p, 1080p, 1440p, 4k | |
--aspect | 16:9 | 16:9, 9:16, 1:1 | |
--fps | 24 | Frames per second | |
--seed | none | Reproducibility seed | |
--output | ./output/ | Output directory or file path | |
--no-preview | false | Skip macOS QuickLook preview | |
--no-audio | false | Disable audio generation | |
--quality | standard | fast, standard, pro | |
--dry-run | false | Cost estimate only, no API call | |
--timeout | 300 | Queue timeout in seconds | |
--negative-prompt | none | What to exclude from generation | |
--json | false | Output JSON only (suppress stderr logs) |
Script Reference: preview.py
Output JSON Contract
Duration Constraints
| Model | Valid Durations | Notes | |
|---|---|---|---|
| LTX-2.3 | 2, 4, 6, 8, 10s | Fixed increments only | |
| Kling V3/2.6 | 5, 10s | Two options only | |
| Veo 3.1 | 5-8s | Any value in range | |
| Sora 2 | 5-20s (std), 5-25s (pro) | Any value in range | |
| Hailuo | 4-6s | Any value in range | |
| Wan | 3-5s | Any value in range | |
| Cosmos | 5-9s | Any value in range |
Cost Quick Reference
| Model | Video Only | With Audio | 4K Available | |
|---|---|---|---|---|
ltx-2.3 (fast) | $0.04/s | $0.04/s | Yes ($0.16/s) | |
ltx-2.3 (std) | $0.06/s | $0.06/s | Yes ($0.24/s) | |
wan | $0.05/s | $0.10/s | No | |
hailuo | $0.045/s | N/A | No | |
kling-v3 | $0.168/s | $0.336/s | No | |
veo-3 (fast) | $0.10/s | $0.15/s | No | |
veo-3 (std) | $0.20/s | $0.40/s | No | |
sora-2 (720p) | $0.30/s | included | No | |
sora-2 (1080p) | $0.50/s | included | No |
Project Mode
Gate Pipeline (G0-G5)
| Gate | Stage | What | Scripts | JSON Output | |
|---|---|---|---|---|---|
| G0 | Project Setup | Initialize project structure, manifest, state | project_init.py | project_dir, manifest, state paths | |
| G1 | Shot Prompts | Story decomposition into scene prompts | decompose.py | LLM prompt for story breakdown | |
| G2 | Reference Images | Generate keyframe images per scene | keyframe.py | keyframe image paths, costs | |
| G3 | Sequence Review | Review and lock shot sequence | project_state.py --lock-sequence | sequence lock confirmation | |
| G4 | Video Generation | Generate video clips per scene | clip.py | video clip paths, costs | |
| G5 | Assembly | Combine clips into final video | assemble.py | final video path, metadata |
Detailed Gate Instructions
G0 - Project Setup: Use project_init.py to create project folder with scenes/, characters/, audio/, output/ subdirectories, manifest.md template, and state.json tracking file. Define style, tier, budget, aspect ratio.
G1 - Shot Prompts: Use decompose.py to generate LLM prompt for story decomposition. Coordinator runs this against LLM to get scene-by-scene breakdown. Update state.json with scene prompts.
G2 - Reference Images: Run keyframe.py for each scene to generate keyframe images. These anchor the visual style and serve as I2V inputs. Requires image-gen peer skill.
G3 - Sequence Review: Use project_state.py --lock-sequence to freeze the shot sequence. No more scene additions/deletions after this gate. Review keyframes before locking.
G4 - Video Generation: Run clip.py for each scene to generate video clips using keyframes as I2V input. Outputs shot_NN.mp4 files in scenes/NN-name/ directories.
G5 - Assembly: Use assemble.py to discover clips and combine them with ffmpeg. Supports crossfades, audio overlay, and story.json metadata for timing.
Script Reference: project_init.py
| Flag | Default | Description | |
|---|---|---|---|
--name | required | Project name (kebab-case) | |
--scenes | required | Number of scenes (int >= 1) | |
--output-dir | required | Parent directory for project | |
--aspect | 16:9 | 16:9, 9:16, 1:1 | |
--style | cinematic | Style keywords (comma-separated) | |
--tier | standard | budget, standard, premium, ultra | |
--logline | none | One-line story description | |
--budget | 50.0 | Max spend in USD |
Script Reference: project_state.py
Script Reference: decompose.py
| Flag | Default | Description | |
|---|---|---|---|
--idea | required | Story concept description | |
--style | required | Visual style keywords | |
--aspect-ratio | 16:9 | Video aspect ratio | |
--duration | 30 | Total target duration (seconds) | |
--tier | standard | Generation tier | |
--output | none | Save LLM prompt to file |
Script Reference: keyframe.py
| Flag | Default | Description | |
|---|---|---|---|
--project | required | Project directory path | |
--scene | required | Scene number | |
--style-keywords | none | Override style keywords | |
--model | from tier | Image generation model | |
--no-state-update | false | Don't update state.json |
Script Reference: clip.py
| Flag | Default | Description | |
|---|---|---|---|
--project | required | Project directory path | |
--scene | required | Scene number | |
--model | from tier | Video generation model | |
--duration | 6 | Clip duration in seconds | |
--quality | standard | fast, standard, pro | |
--bridge | false | Use temporal bridging | |
--seed | none | Reproducibility seed | |
--no-state-update | false | Don't update state.json |
Script Reference: assemble.py
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/video-gen/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/buildoak/fieldwork-skills/video-gen)