buildoak/fieldwork-skills/video-gen

Claude Code and agent skill by buildoak/fieldwork-skills

Trust tier 3
  • community
Source check pending

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-gen

SKILL.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

bash
export FAL_KEY="your-fal-ai-key"
  • 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:

  1. 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)
  2. Custom secret manager: Use your team's preferred secret manager (1Password CLI, AWS Secrets Manager, etc.)
  3. 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

text
Need video?
├── Quick one-off clip? ─────────── Light Mode (generate.py)
│ Single prompt, single output, no state
│
└── Multi-scene story/production? ── Project Mode
├── New project? ─────────────── project_init.py → G0
├── Existing project? ────────── project_state.py --status
└── Resume at gate? ──────────── Check state, pick up where left off

Quick Reference

Light Mode
bash
# Generate with default model (ltx-2.3)
python ./scripts/generate.py \
--prompt "A red fox running through snow" \
--output ./output/
# Generate with specific model and settings
python ./scripts/generate.py \
--prompt "Tokyo skyline at sunset with dramatic clouds" \
--model kling-v3 \
--mode t2v \
--duration 10 \
--resolution 1080p \
--aspect 16:9
# Image-to-video generation
python ./scripts/generate.py \
--prompt "The character starts walking forward" \
--mode i2v \
--image ./path/to/keyframe.png \
--model veo-3
# Quick preview (uses LTX fast, cheapest)
python ./scripts/preview.py \
--prompt "Test scene" \
--mode t2v
Project Mode
bash
# Initialize new project
python ./scripts/project_init.py \
--name noir-detective \
--scenes 5 \
--output-dir ./projects \
--style "cinematic, moody, film noir" \
--tier standard \
--logline "A detective investigates in a cyberpunk city"
# Check project status
python ./scripts/project_state.py --project ./projects/noir-detective
# Generate keyframe for scene
python ./scripts/keyframe.py \
--project ./projects/noir-detective \
--scene 1 \
--style-keywords "cinematic, moody"
# Generate video clip for scene
python ./scripts/clip.py \
--project ./projects/noir-detective \
--scene 1 \
--model kling-v3 \
--duration 8
# Assemble final video
python ./scripts/assemble.py \
--clips-dir ./projects/noir-detective/scenes \
--output ./projects/noir-detective/output/final.mp4

Light Mode

Model Selection
text
What do you need?
├── Fast drafts + budget? ──────────── ltx-2.3 (fast) $0.04/s
├── Cinematic quality? ─────────────── kling-v3 $0.168/s
├── Dialogue/lip sync? ─────────────── veo-3 $0.20-0.40/s
├── Long clips (>10s)? ─────────────── sora-2 (up to 25s)
├── Budget with audio? ─────────────── wan $0.05-0.10/s
├── Anime/stylized? ────────────────── hailuo $0.045-0.08/s
└── Physics accuracy? ──────────────── cosmos $0.20/video
Use CaseModelCost/5sWhy
Fast draftsltx-2.3$0.20Open source, 4K capable, fastest iteration
Cinematickling-v3$0.84Multi-shot narratives, character consistency
Dialogue/lip syncveo-3$2.00Best-in-class audio sync, natural performances
Long clipssora-2$2.50Up to 25s duration, complex scenes
Budget with audiowan$0.50Cheapest audio option, social media
Anime/stylizedhailuo$0.40Anime support, micro-expressions
Physicscosmos$0.20RL-trained on physics, simulation-accurate
Script Reference: generate.py
FlagDefaultDescription
--modelltx-2.3Model alias: ltx-2.3, kling-v3, veo-3, sora-2, wan, hailuo, cosmos, pixverse, grok
--modet2vt2v (text-to-video) or i2v (image-to-video)
--promptrequiredVideo description
--imagenoneSource image path or URL (required for i2v)
--duration8Duration in seconds
--resolution1080p720p, 1080p, 1440p, 4k
--aspect16:916:9, 9:16, 1:1
--fps24Frames per second
--seednoneReproducibility seed
--output./output/Output directory or file path
--no-previewfalseSkip macOS QuickLook preview
--no-audiofalseDisable audio generation
--qualitystandardfast, standard, pro
--dry-runfalseCost estimate only, no API call
--timeout300Queue timeout in seconds
--negative-promptnoneWhat to exclude from generation
--jsonfalseOutput JSON only (suppress stderr logs)
Script Reference: preview.py
bash
# Preview existing video file
python ./scripts/preview.py /path/to/video.mp4
# Generate and preview (uses LTX fast, $0.04/s)
python ./scripts/preview.py \
--prompt "Quick test scene" \
--mode t2v \
[--image path] \
[--output path]
Output JSON Contract
json
{
"success": true,
"file": "/abs/path/to/20260308-143052-t2v-red-fox-snow.mp4",
"model": "ltx-2.3",
"mode": "t2v",
"duration_sec": 8,
"resolution": "1080p",
"cost_usd": 0.32,
"seed": 42,
"fal_request_id": "abc123"
}
Duration Constraints
ModelValid DurationsNotes
LTX-2.32, 4, 6, 8, 10sFixed increments only
Kling V3/2.65, 10sTwo options only
Veo 3.15-8sAny value in range
Sora 25-20s (std), 5-25s (pro)Any value in range
Hailuo4-6sAny value in range
Wan3-5sAny value in range
Cosmos5-9sAny value in range
Cost Quick Reference
ModelVideo OnlyWith Audio4K Available
ltx-2.3 (fast)$0.04/s$0.04/sYes ($0.16/s)
ltx-2.3 (std)$0.06/s$0.06/sYes ($0.24/s)
wan$0.05/s$0.10/sNo
hailuo$0.045/sN/ANo
kling-v3$0.168/s$0.336/sNo
veo-3 (fast)$0.10/s$0.15/sNo
veo-3 (std)$0.20/s$0.40/sNo
sora-2 (720p)$0.30/sincludedNo
sora-2 (1080p)$0.50/sincludedNo

Project Mode

Gate Pipeline (G0-G5)
GateStageWhatScriptsJSON Output
G0Project SetupInitialize project structure, manifest, stateproject_init.pyproject_dir, manifest, state paths
G1Shot PromptsStory decomposition into scene promptsdecompose.pyLLM prompt for story breakdown
G2Reference ImagesGenerate keyframe images per scenekeyframe.pykeyframe image paths, costs
G3Sequence ReviewReview and lock shot sequenceproject_state.py --lock-sequencesequence lock confirmation
G4Video GenerationGenerate video clips per sceneclip.pyvideo clip paths, costs
G5AssemblyCombine clips into final videoassemble.pyfinal 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
FlagDefaultDescription
--namerequiredProject name (kebab-case)
--scenesrequiredNumber of scenes (int >= 1)
--output-dirrequiredParent directory for project
--aspect16:916:9, 9:16, 1:1
--stylecinematicStyle keywords (comma-separated)
--tierstandardbudget, standard, premium, ultra
--loglinenoneOne-line story description
--budget50.0Max spend in USD
Script Reference: project_state.py
bash
# Display status table
python ./scripts/project_state.py --project /path/to/project
# Update gate status
python ./scripts/project_state.py \
--project /path \
--scene 1 \
--gate prompt \
--status locked \
--path scenes/01-intro/prompt.md
# Add new scene
python ./scripts/project_state.py \
--project /path \
--add-scene \
--scene-name climax \
--scene-number 6
# Lock sequence (G3)
python ./scripts/project_state.py --project /path --lock-sequence
# Invalidate downstream gates
python ./scripts/project_state.py \
--project /path \
--scene 1 \
--invalidate prompt
Script Reference: decompose.py
FlagDefaultDescription
--idearequiredStory concept description
--stylerequiredVisual style keywords
--aspect-ratio16:9Video aspect ratio
--duration30Total target duration (seconds)
--tierstandardGeneration tier
--outputnoneSave LLM prompt to file
Script Reference: keyframe.py
FlagDefaultDescription
--projectrequiredProject directory path
--scenerequiredScene number
--style-keywordsnoneOverride style keywords
--modelfrom tierImage generation model
--no-state-updatefalseDon't update state.json
Script Reference: clip.py
FlagDefaultDescription
--projectrequiredProject directory path
--scenerequiredScene number
--modelfrom tierVideo generation model
--duration6Clip duration in seconds
--qualitystandardfast, standard, pro
--bridgefalseUse temporal bridging
--seednoneReproducibility seed
--no-state-updatefalseDon'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

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/buildoak/fieldwork-skills/video-gen/badge)](https://verified-skill.com/skills/buildoak/fieldwork-skills/video-gen)

Something wrong with this skill or its page? Tell us.