{"id":"8cbac9db-24e7-49fa-8d56-3bb2afbd2ddc","shortId":"xaXfeK","kind":"skill","title":"video-gen","tagline":"Video generation via fal.ai -- from quick one-off clips to multi-scene\nproductions with keyframes, state tracking, and assembly. 10+ models\nincluding Kling 3.0, Veo 3.1, Sora 2, LTX-2.3. Two modes: light\n(fire-and-forget) and project (structured pipeline with gates).","description":"# video-gen\n\nVideo generation and multi-scene production via fal.ai. Two modes: light (fire-and-forget) and project (interactive pipeline with gates).\n\n**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`\n**Output dir:** `./output/`\n\n## Setup\n\n```bash\nexport FAL_KEY=\"your-fal-ai-key\"\n```\n\n- **Claude Code:** copy this skill folder into `.claude/skills/video-gen/`\n- **Codex CLI:** append this SKILL.md content to your project's root `AGENTS.md`\n\nFor the full installation walkthrough (prerequisites, API keys, verification, troubleshooting), see [references/installation-guide.md](references/installation-guide.md).\n\n### Credential management\n\nThree tiers for managing the `FAL_KEY` environment variable:\n\n1. **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)`\n2. **Custom secret manager:** Use your team's preferred secret manager (1Password CLI, AWS Secrets Manager, etc.)\n3. **Plain export:** `export FAL_KEY='your-fal-ai-key'` in your shell profile\n\nFor project mode (keyframes + character sheets): also need `image-gen` peer skill.\n\n## Staying Updated\n\nThis skill ships with an `UPDATES.md` changelog and `UPDATE-GUIDE.md` for your AI agent.\n\nAfter installing, tell your agent: \"Check `UPDATES.md` in the video-gen skill for any new features or changes.\"\n\nWhen updating, tell your agent: \"Read `UPDATE-GUIDE.md` and apply the latest changes from `UPDATES.md`.\"\n\nFollow `UPDATE-GUIDE.md` so customized local files are diffed before any overwrite.\n\n---\n\n## Decision Tree\n\n```text\nNeed video?\n├── Quick one-off clip? ─────────── Light Mode (generate.py)\n│   Single prompt, single output, no state\n│\n└── Multi-scene story/production? ── Project Mode\n    ├── New project? ─────────────── project_init.py → G0\n    ├── Existing project? ────────── project_state.py --status\n    └── Resume at gate? ──────────── Check state, pick up where left off\n```\n\n---\n\n## Quick Reference\n\n### Light Mode\n\n```bash\n# Generate with default model (ltx-2.3)\npython ./scripts/generate.py \\\n  --prompt \"A red fox running through snow\" \\\n  --output ./output/\n\n# Generate with specific model and settings\npython ./scripts/generate.py \\\n  --prompt \"Tokyo skyline at sunset with dramatic clouds\" \\\n  --model kling-v3 \\\n  --mode t2v \\\n  --duration 10 \\\n  --resolution 1080p \\\n  --aspect 16:9\n\n# Image-to-video generation\npython ./scripts/generate.py \\\n  --prompt \"The character starts walking forward\" \\\n  --mode i2v \\\n  --image ./path/to/keyframe.png \\\n  --model veo-3\n\n# Quick preview (uses LTX fast, cheapest)\npython ./scripts/preview.py \\\n  --prompt \"Test scene\" \\\n  --mode t2v\n```\n\n### Project Mode\n\n```bash\n# Initialize new project\npython ./scripts/project_init.py \\\n  --name noir-detective \\\n  --scenes 5 \\\n  --output-dir ./projects \\\n  --style \"cinematic, moody, film noir\" \\\n  --tier standard \\\n  --logline \"A detective investigates in a cyberpunk city\"\n\n# Check project status\npython ./scripts/project_state.py --project ./projects/noir-detective\n\n# Generate keyframe for scene\npython ./scripts/keyframe.py \\\n  --project ./projects/noir-detective \\\n  --scene 1 \\\n  --style-keywords \"cinematic, moody\"\n\n# Generate video clip for scene\npython ./scripts/clip.py \\\n  --project ./projects/noir-detective \\\n  --scene 1 \\\n  --model kling-v3 \\\n  --duration 8\n\n# Assemble final video\npython ./scripts/assemble.py \\\n  --clips-dir ./projects/noir-detective/scenes \\\n  --output ./projects/noir-detective/output/final.mp4\n```\n\n---\n\n## Light Mode\n\n### Model Selection\n\n```text\nWhat do you need?\n├── Fast drafts + budget? ──────────── ltx-2.3 (fast) $0.04/s\n├── Cinematic quality? ─────────────── kling-v3 $0.168/s\n├── Dialogue/lip sync? ─────────────── veo-3 $0.20-0.40/s\n├── Long clips (>10s)? ─────────────── sora-2 (up to 25s)\n├── Budget with audio? ─────────────── wan $0.05-0.10/s\n├── Anime/stylized? ────────────────── hailuo $0.045-0.08/s\n└── Physics accuracy? ──────────────── cosmos $0.20/video\n```\n\n| Use Case | Model | Cost/5s | Why |\n|----------|-------|---------|-----|\n| Fast drafts | `ltx-2.3` | $0.20 | Open source, 4K capable, fastest iteration |\n| Cinematic | `kling-v3` | $0.84 | Multi-shot narratives, character consistency |\n| Dialogue/lip sync | `veo-3` | $2.00 | Best-in-class audio sync, natural performances |\n| Long clips | `sora-2` | $2.50 | Up to 25s duration, complex scenes |\n| Budget with audio | `wan` | $0.50 | Cheapest audio option, social media |\n| Anime/stylized | `hailuo` | $0.40 | Anime support, micro-expressions |\n| Physics | `cosmos` | $0.20 | RL-trained on physics, simulation-accurate |\n\n### Script Reference: generate.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--model` | `ltx-2.3` | Model alias: ltx-2.3, kling-v3, veo-3, sora-2, wan, hailuo, cosmos, pixverse, grok |\n| `--mode` | `t2v` | t2v (text-to-video) or i2v (image-to-video) |\n| `--prompt` | required | Video description |\n| `--image` | none | Source image path or URL (required for i2v) |\n| `--duration` | `8` | Duration in seconds |\n| `--resolution` | `1080p` | 720p, 1080p, 1440p, 4k |\n| `--aspect` | `16:9` | 16:9, 9:16, 1:1 |\n| `--fps` | `24` | Frames per second |\n| `--seed` | none | Reproducibility seed |\n| `--output` | `./output/` | Output directory or file path |\n| `--no-preview` | false | Skip macOS QuickLook preview |\n| `--no-audio` | false | Disable audio generation |\n| `--quality` | `standard` | fast, standard, pro |\n| `--dry-run` | false | Cost estimate only, no API call |\n| `--timeout` | `300` | Queue timeout in seconds |\n| `--negative-prompt` | none | What to exclude from generation |\n| `--json` | false | Output JSON only (suppress stderr logs) |\n\n### Script Reference: preview.py\n\n```bash\n# Preview existing video file\npython ./scripts/preview.py /path/to/video.mp4\n\n# Generate and preview (uses LTX fast, $0.04/s)\npython ./scripts/preview.py \\\n  --prompt \"Quick test scene\" \\\n  --mode t2v \\\n  [--image path] \\\n  [--output path]\n```\n\n### Output JSON Contract\n\n```json\n{\n  \"success\": true,\n  \"file\": \"/abs/path/to/20260308-143052-t2v-red-fox-snow.mp4\",\n  \"model\": \"ltx-2.3\",\n  \"mode\": \"t2v\",\n  \"duration_sec\": 8,\n  \"resolution\": \"1080p\",\n  \"cost_usd\": 0.32,\n  \"seed\": 42,\n  \"fal_request_id\": \"abc123\"\n}\n```\n\n### Duration Constraints\n\n| Model | Valid Durations | Notes |\n|-------|----------------|-------|\n| LTX-2.3 | 2, 4, 6, 8, 10s | Fixed increments only |\n| Kling V3/2.6 | 5, 10s | Two options only |\n| Veo 3.1 | 5-8s | Any value in range |\n| Sora 2 | 5-20s (std), 5-25s (pro) | Any value in range |\n| Hailuo | 4-6s | Any value in range |\n| Wan | 3-5s | Any value in range |\n| Cosmos | 5-9s | Any value in range |\n\n### Cost Quick Reference\n\n| Model | Video Only | With Audio | 4K Available |\n|-------|-----------|-----------|-------------|\n| `ltx-2.3` (fast) | $0.04/s | $0.04/s | Yes ($0.16/s) |\n| `ltx-2.3` (std) | $0.06/s | $0.06/s | Yes ($0.24/s) |\n| `wan` | $0.05/s | $0.10/s | No |\n| `hailuo` | $0.045/s | N/A | No |\n| `kling-v3` | $0.168/s | $0.336/s | No |\n| `veo-3` (fast) | $0.10/s | $0.15/s | No |\n| `veo-3` (std) | $0.20/s | $0.40/s | No |\n| `sora-2` (720p) | $0.30/s | included | No |\n| `sora-2` (1080p) | $0.50/s | included | No |\n\n---\n\n## Project Mode\n\n### Gate Pipeline (G0-G5)\n\n| Gate | Stage | What | Scripts | JSON Output |\n|------|-------|------|---------|-------------|\n| **G0** | Project Setup | Initialize project structure, manifest, state | `project_init.py` | project_dir, manifest, state paths |\n| **G1** | Shot Prompts | Story decomposition into scene prompts | `decompose.py` | LLM prompt for story breakdown |\n| **G2** | Reference Images | Generate keyframe images per scene | `keyframe.py` | keyframe image paths, costs |\n| **G3** | Sequence Review | Review and lock shot sequence | `project_state.py --lock-sequence` | sequence lock confirmation |\n| **G4** | Video Generation | Generate video clips per scene | `clip.py` | video clip paths, costs |\n| **G5** | Assembly | Combine clips into final video | `assemble.py` | final video path, metadata |\n\n### Detailed Gate Instructions\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\n**G5 - Assembly**: Use `assemble.py` to discover clips and combine them with `ffmpeg`. Supports crossfades, audio overlay, and story.json metadata for timing.\n\n### Script Reference: project_init.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--name` | required | Project name (kebab-case) |\n| `--scenes` | required | Number of scenes (int >= 1) |\n| `--output-dir` | required | Parent directory for project |\n| `--aspect` | `16:9` | 16:9, 9:16, 1:1 |\n| `--style` | `cinematic` | Style keywords (comma-separated) |\n| `--tier` | `standard` | budget, standard, premium, ultra |\n| `--logline` | none | One-line story description |\n| `--budget` | `50.0` | Max spend in USD |\n\n### Script Reference: project_state.py\n\n```bash\n# Display status table\npython ./scripts/project_state.py --project /path/to/project\n\n# Update gate status\npython ./scripts/project_state.py \\\n  --project /path \\\n  --scene 1 \\\n  --gate prompt \\\n  --status locked \\\n  --path scenes/01-intro/prompt.md\n\n# Add new scene\npython ./scripts/project_state.py \\\n  --project /path \\\n  --add-scene \\\n  --scene-name climax \\\n  --scene-number 6\n\n# Lock sequence (G3)\npython ./scripts/project_state.py --project /path --lock-sequence\n\n# Invalidate downstream gates\npython ./scripts/project_state.py \\\n  --project /path \\\n  --scene 1 \\\n  --invalidate prompt\n```\n\n### Script Reference: decompose.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--idea` | required | Story concept description |\n| `--style` | required | Visual style keywords |\n| `--aspect-ratio` | `16:9` | Video aspect ratio |\n| `--duration` | `30` | Total target duration (seconds) |\n| `--tier` | `standard` | Generation tier |\n| `--output` | none | Save LLM prompt to file |\n\n### Script Reference: keyframe.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--project` | required | Project directory path |\n| `--scene` | required | Scene number |\n| `--style-keywords` | none | Override style keywords |\n| `--model` | from tier | Image generation model |\n| `--no-state-update` | false | Don't update state.json |\n\n### Script Reference: clip.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--project` | required | Project directory path |\n| `--scene` | required | Scene number |\n| `--model` | from tier | Video generation model |\n| `--duration` | `6` | Clip duration in seconds |\n| `--quality` | `standard` | fast, standard, pro |\n| `--bridge` | false | Use temporal bridging |\n| `--seed` | none | Reproducibility seed |\n| `--no-state-update` | false | Don't update state.json |\n\n### Script Reference: assemble.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--clips-dir` | required | Directory containing scene clips |\n| `--output` | required | Output video file path |\n| `--story` | none | story.json for timing metadata |\n| `--audio` | none | Voiceover track path |\n| `--music` | none | Background music path |\n| `--crossfade` | `0.5` | Crossfade duration between clips |\n\n### Script Reference: character_sheet.py\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--character-json` | required | Characters definition file |\n| `--character-id` | required | Character ID from JSON |\n| `--output-dir` | required | Output directory for images |\n| `--views` | `front,profile,three_quarter` | Comma-separated view list |\n| `--tier` | `standard` | Image generation tier |\n\n### File Structure\n\n```\nproject-name/\n├── manifest.md                    # Human-readable project summary\n├── state.json                     # Machine state tracking (G0-G5)\n├── story.json                     # Scene decomposition (G1 output)\n├── characters.json                # Character definitions\n├── scenes/\n│   ├── 01-intro/\n│   │   ├── prompt.md              # Scene description\n│   │   ├── keyframe.png           # Reference image (G2)\n│   │   └── shot_01.mp4           # Generated clip (G4)\n│   ├── 02-conflict/\n│   │   ├── prompt.md\n│   │   ├── keyframe.png\n│   │   └── shot_02.mp4\n│   └── ...\n├── characters/                    # Character reference sheets\n│   ├── detective-front.png\n│   ├── detective-profile.png\n│   └── ...\n├── audio/                         # Voiceover and music\n└── output/                        # Final assembled videos\n    └── final.mp4\n```\n\n### Token Efficiency Rules\n\n1. **Coordinator context management**: Load only current gate's requirements, not full project history\n2. **Scene isolation**: Each scene script operates independently with minimal cross-references\n3. **State checkpoints**: Use `state.json` as single source of truth, not file system scanning\n4. **Selective loading**: Scripts load only required JSON sections, not entire project state\n\n### Going Back / Cascade Rules\n\n- **Upstream change**: Invalidates all downstream gates automatically\n- **Prompt change (G1)**: Invalidates G2 (keyframes), G4 (clips), G5 (assembly)\n- **Keyframe change (G2)**: Invalidates G4 (clips), G5 (assembly)\n- **Sequence lock (G3)**: Prevents scene additions/deletions, allows content changes\n- **Clip regeneration (G4)**: Invalidates G5 (assembly) only\n\n### Style Control (3 Layers)\n\n1. **Project tier**: Maps to default models (budget→ltx-2.3, standard→kling-v3, premium→kling-v3, ultra→veo-3)\n2. **Project style keywords**: Applied to all keyframes and clips automatically\n3. **Per-scene overrides**: `--style-keywords` flag on keyframe.py/clip.py for scene-specific variations\n\n---\n\n## Dependencies\n\n### Required for Light Mode\n- Python 3.10+\n- `requests` library: `pip install requests`\n- fal.ai API key (`FAL_KEY` environment variable)\n\n### Required for Project Mode (additional)\n- `ffmpeg` + `ffprobe` (video assembly): install via system package manager\n- `image-gen` peer skill (keyframes + character sheets)\n\n### Image-gen Peer Resolution\n\nScripts resolve image generation dependency in this order:\n\n1. **Environment override**: `IMAGE_GEN_SCRIPT=/path/to/generate.py` (explicit path)\n2. **Auto-discovery**: `../image-gen/scripts/generate.py` (peer skill in fieldwork layout)\n3. **Actionable error**: \"Image generation requires the image-gen skill. Install it as a peer skill or set IMAGE_GEN_SCRIPT env var.\"\n\n---\n\n## Anti-Patterns\n\n| Anti-pattern | Why it fails | Do this instead |\n|-------------|-------------|-----------------|\n| Using `produce.py` when interactive mode is appropriate | Skips human review gates, produces lower quality | Use project mode (G0-G5 pipeline) for quality work |\n| Skipping style checkpoint on first keyframe | Inconsistent visual style across scenes | Review and approve keyframe style before generating remaining scenes |\n| Generating video before locking prompts and images | Wasted generation costs on changing requirements | Complete G1-G3 (prompts, keyframes, sequence lock) before G4 |\n| Hardcoding model without considering budget | Cost overruns, especially with Sora/Veo | Use `--dry-run` first, choose model based on budget and use case |\n| Generating clips out of order | Breaks temporal bridging between scenes | Generate clips sequentially: scene 1, 2, 3... |\n| Loading full prompts into coordinator context | Token waste, context overflow | Load only current gate requirements, use state.json for coordination |\n| Using `--duration 4` with LTX | API validation error (LTX minimum is 6s) | Use `--duration 6` or higher for LTX model |\n| Forgetting `--image` flag for i2v mode | Generation fails with validation error | Always provide `--image` path/URL for image-to-video |\n| Using Kling for 15s clips | Model constraint violation (max 10s) | Use Sora 2 for clips longer than 10s |\n| Skipping `--lock-sequence` before G4 | Scene changes invalidate expensive video generation | Lock sequence at G3 before generating any videos |\n\n---\n\n## Error Handling\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| FAL_KEY not set | Missing API credential | `export FAL_KEY='your-fal-ai-key'` |\n| Image-gen not found | Missing peer skill dependency | Install image-gen skill or set `IMAGE_GEN_SCRIPT` env var |\n| ffmpeg not found | Missing video assembly dependency | Install ffmpeg: `brew install ffmpeg` (macOS) or `apt install ffmpeg` (Linux) |\n| Duration validation failure | Invalid duration for model | Check duration constraints table, use valid values |\n| HTTP 429: Rate limit | Too many requests | Wait 30s and retry, or switch to different model |\n| HTTP 402: No credits | fal.ai account balance | Top up fal.ai account balance |\n| API timeout | Model overloaded or network issue | Increase `--timeout` or try `--quality fast` variant |\n| No video URL in result | Malformed API response | Check fal.ai status, try different model |\n| Downloaded file is empty | Network interruption during download | Retry generation, check network stability |\n| Model not available | Model endpoint changed or deprecated | Check `references/models.md` for current endpoints |\n| Invalid aspect ratio | Unsupported ratio for model | Use 16:9, 9:16, or 1:1 (universally supported) |\n| Project directory exists | Name collision | Choose different `--name` or remove existing directory |\n| Sequence already locked | Trying to add scenes after G3 | Use `project_state.py --unlock-sequence` or work with existing scenes |\n| Clip discovery failed | Assembly can't find generated clips | Check clip naming pattern `shot_NN.mp4` in `scenes/*/` directories |\n\n---\n\n## Bundled Resources Index\n\n| Path | What | When to Load |\n|------|------|-------------|\n| `./scripts/generate.py` | Core video generation script | Every light mode generation task |\n| `./scripts/preview.py` | Quick preview wrapper (LTX fast) | Quick tests and iteration |\n| `./scripts/project_init.py` | Project structure initialization | Starting new multi-scene project (G0) |\n| `./scripts/project_state.py` | State management and status display | Managing project gates, checking progress |\n| `./scripts/decompose.py` | Story decomposition LLM prompt | Breaking story into scenes (G1) |\n| `./scripts/keyframe.py` | Keyframe image generation | Creating visual references (G2) |\n| `./scripts/clip.py` | Scene video generation | Generating video clips (G4) |\n| `./scripts/assemble.py` | Final video assembly via ffmpeg | Combining clips into final video (G5) |\n| `./scripts/character_sheet.py` | Multi-view character reference sheets | Character consistency across scenes |\n| `./references/models.md` | Complete model catalog with capabilities and pricing | Model selection and optimization |\n| `./references/model-kling.md` | Kling 3.0 detailed reference card | Kling-specific generation parameters |\n| `./references/model-veo.md` | Veo 3.1 detailed reference card | Veo-specific features and audio capabilities |\n| `./references/model-sora.md` | Sora 2 detailed reference card | Sora-specific parameters and remix features |\n| `./references/model-ltx.md` | LTX-2.3 detailed reference card | LTX-specific modes and 4K capabilities |\n| `./references/model-wan.md` | Wan 2.5/2.6 detailed reference card | Wan-specific features and budget optimization |\n| `./references/model-hailuo.md` | Hailuo-02 detailed reference card | Hailuo anime/stylization capabilities |\n| `./references/fal-api.md` | fal.ai queue API reference | API integration and debugging |\n| `./references/pricing.md` | Cost per model per second with scenarios | Budget planning and cost optimization |\n| `./references/prompt-guide.md` | Video prompt engineering best practices | Writing effective video prompts |\n| `./references/camera-vocabulary.md` | Camera movement and angle terminology | Cinematic prompt construction |\n| `./references/style-keywords.md` | Visual style keyword reference | Style consistency across scenes |\n| `./references/story-schema.md` | JSON schema for story.json structure | Story decomposition validation |\n| `./references/scene-schema.md` | JSON schema for scene objects | Scene data structure validation |\n| `./references/shot-schema.md` | JSON schema for shot objects | Shot-level metadata validation |\n| `./references/character-schema.md` | JSON schema for character objects | Character definition validation |\n| `./references/consistency-guide.md` | Visual consistency techniques across scenes | Multi-scene project quality |\n| `./references/cost-reference.md` | Cost estimation for project mode workflows | Project budget planning |\n| `./references/model-selection.md` | Model selection guide for project mode | Choosing optimal models per scene |\n| `./references/prompt-assembly.md` | How prompts are assembled from components | Understanding prompt construction |\n| `./prompts/enhance-animated.md` | LLM prompt template for animation enhancement | Animated content optimization |\n| `./prompts/enhance-cinematic.md` | LLM prompt template for cinematic enhancement | Film-quality content optimization |\n| `./prompts/enhance.md` | General LLM prompt enhancement template | General prompt improvement |\n| `./prompts/decompose.md` | LLM prompt template for story decomposition | Story-to-scenes breakdown |","tags":["video","gen","fieldwork","skills","buildoak","agent-skills","ai-agents","ai-tools","automation","browser-automation","claude-code","claude-skills"],"capabilities":["skill","source-buildoak","skill-video-gen","topic-agent-skills","topic-ai-agents","topic-ai-tools","topic-automation","topic-browser-automation","topic-claude-code","topic-claude-skills","topic-codex"],"categories":["fieldwork-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/buildoak/fieldwork-skills/video-gen","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add buildoak/fieldwork-skills","source_repo":"https://github.com/buildoak/fieldwork-skills","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (22,200 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T19:06:33.908Z","embedding":null,"createdAt":"2026-04-18T23:07:18.860Z","updatedAt":"2026-04-22T19:06:33.908Z","lastSeenAt":"2026-04-22T19:06:33.908Z","tsv":"'-0.08':536 '-0.10':531 '-0.40':516 '-02':2494 '-2':522,586,642,958,965 '-2.3':35,330,500,551,631,635,805,829,903,913,1742,2467 '-20':857 '-25':861 '-3':390,514,573,640,942,950,1753 '-5':878 '-6':870 '-8':848 '-9':886 '/2.6':2481 '/abs/path/to/20260308-143052-t2v-red-fox-snow.mp4':802 '/clip.py':1777 '/image-gen/scripts/generate.py':1850 '/output':86,341,705 '/path':1301,1316,1334,1344 '/path/to/generate.py':1843 '/path/to/keyframe.png':387 '/path/to/project':1294 '/path/to/video.mp4':774 '/projects':421 '/projects/noir-detective':443,451,467 '/projects/noir-detective/output/final.mp4':486 '/projects/noir-detective/scenes':484 '/prompts/decompose.md':2664 '/prompts/enhance-animated.md':2633 '/prompts/enhance-cinematic.md':2643 '/prompts/enhance.md':2655 '/references/camera-vocabulary.md':2533 '/references/character-schema.md':2581 '/references/consistency-guide.md':2590 '/references/cost-reference.md':2601 '/references/fal-api.md':2501 '/references/model-hailuo.md':2492 '/references/model-kling.md':2428 '/references/model-ltx.md':2465 '/references/model-selection.md':2611 '/references/model-sora.md':2452 '/references/model-veo.md':2439 '/references/model-wan.md':2478 '/references/models.md':2416 '/references/pricing.md':2510 '/references/prompt-assembly.md':2623 '/references/prompt-guide.md':2523 '/references/scene-schema.md':2560 '/references/shot-schema.md':2570 '/references/story-schema.md':2551 '/references/style-keywords.md':2542 '/s':503,510,517,532,537,782,906,908,911,916,918,921,924,926,930,937,939,945,947,953,955,961,968 '/scripts/assemble.py':82,480,2393 '/scripts/character_sheet.py':83,2405 '/scripts/clip.py':81,465,2385 '/scripts/decompose.py':79,2367 '/scripts/generate.py':75,332,349,377,2325 '/scripts/keyframe.py':80,449,2377 '/scripts/preview.py':76,398,773,784,2335 '/scripts/project_init.py':77,411,2345 '/scripts/project_state.py':78,441,1292,1299,1314,1332,1342,2356 '/video':542 '0.04':502,781,905,907 '0.045':535,929 '0.05':530,923 '0.06':915,917 '0.10':925,944 '0.15':946 '0.16':910 '0.168':509,936 '0.20':515,541,552,614,952 '0.24':920 '0.30':960 '0.32':815 '0.336':938 '0.40':606,954 '0.5':1514 '0.50':598,967 '0.84':563 '01':1590,1600 '02':1605,1610 '1':141,453,469,693,694,1240,1256,1257,1303,1346,1630,1733,1837,1996,2264,2265 '10':25,365 '1080p':367,681,683,812,966 '10s':520,834,841,2067,2075 '1440p':684 '15s':2061 '16':369,687,689,692,1250,1252,1255,1368,2259,2262 '1password':184 '2':33,173,830,855,1644,1754,1846,1997,2070,2454 '2.00':574 '2.5':2480 '2.50':587 '24':696 '25s':525,590 '3':190,877,1657,1731,1765,1856,1998 '3.0':29,2430 '3.1':31,846,2441 '3.10':1789 '30':1374 '300':742 '30s':2177 '4':831,869,1671,2020 '402':2186 '42':817 '429':2170 '4k':555,685,900,2476 '5':417,840,847,856,860,885 '50.0':1279 '6':832,1327,1449,2032 '6s':2029 '720p':682,959 '8':475,676,810,833 '9':370,688,690,691,1251,1253,1254,1369,2260,2261 'abc123':821 'account':2190,2195 'accur':622 'accuraci':539 'across':1925,2414,2549,2594 'action':1857 'add':1310,1318,2285 'add-scen':1317 'addit':1806 'additions/deletions':1168,1718 'agent':232,237,256 'agents.md':116 'ai':95,199,231,2114 'alia':633 'allow':1719 'alreadi':2281 'also':211 'alway':2049 'anchor':1137 'angl':2537 'anim':607,2638,2640 'anime/stylization':2499 'anime/stylized':533,604 'anti':1881,1884 'anti-pattern':1880,1883 'api':123,739,1796,2023,2106,2197,2217,2504,2506 'append':107 'appli':260,1758 'appropri':1898 'approv':1929 'apt':2151 'aspect':368,686,1093,1249,1366,1371,2252 'aspect-ratio':1365 'assembl':24,476,1054,1201,1624,1704,1712,1727,1810,2142,2302,2396,2627 'assemble.py':1060,1203,1479 'audio':528,579,596,600,721,724,899,1080,1214,1503,1618,2450 'auto':1848 'auto-discoveri':1847 'automat':1694,1764 'avail':901,2240 'aw':186 'back':1685 'background':1510 'balanc':2191,2196 'base':1976 'bash':88,324,406,767,1287 'best':576,2527 'best-in-class':575 'break':1987,2372 'breakdown':1011,1118,2675 'brew':2146 'bridg':1459,1463,1989 'budget':498,526,594,1092,1267,1278,1740,1963,1978,2490,2518,2609 'bundl':2317 'call':740 'camera':2534 'capabl':556,2421,2451,2477,2500 'card':2433,2444,2457,2470,2484,2497 'cascad':1686 'case':544,1233,1981 'catalog':2419 'caus':2099 'chang':251,263,1689,1696,1706,1721,1947,2083,2243 'changelog':226 'charact':209,380,568,1079,1526,1529,1533,1536,1587,1612,1613,1822,2409,2412,2585,2587 'character-id':1532 'character-json':1525 'character_sheet.py':1521 'characters.json':1586 'cheapest':396,599 'check':238,313,437,2162,2219,2235,2246,2308,2365 'checkpoint':1659,1918 'choos':1974,2273,2618 'cinemat':423,457,504,559,1259,2539,2648 'citi':436 'class':578 'claud':97 'claude/skills/video-gen':104 'cli':106,185 'climax':1323 'clip':13,286,461,482,519,584,1045,1050,1056,1187,1206,1450,1484,1490,1518,1603,1702,1710,1722,1763,1983,1993,2062,2072,2299,2307,2309,2391,2400 'clip.py':1048,1180,1429 'clips-dir':481,1483 'cloud':357 'code':98 'codex':105 'collis':2272 'combin':1055,1208,2399 'comma':1263,1554 'comma-separ':1262,1553 'complet':1949,2417 'complex':592 'compon':2629 'concept':1358 'confirm':1039 'conflict':1606 'consid':1962 'consist':569,2413,2548,2592 'constraint':823,2064,2164 'construct':2541,2632 'contain':1488 'content':110,1720,2641,2653 'context':1632,2004,2007 'contract':797 'control':1730 'coordin':1107,1631,2003,2017 'copi':99 'core':2326 'cosmos':540,613,645,884 'cost':735,813,892,1024,1052,1945,1964,2511,2521,2602 'cost/5s':546 'creat':1074,2381 'credenti':130,2107 'credit':2188 'cross':1655 'cross-refer':1654 'crossfad':1213,1513,1515 'current':1636,2011,2249 'custom':174,269 'cyberpunk':435 'data':2567 'debug':2509 'decis':277 'decompose.py':1006,1099,1351 'decomposit':1002,1106,1583,2369,2558,2670 'default':327,627,1225,1353,1394,1431,1481,1523,1738 'defin':1089 'definit':1530,1588,2588 'depend':1783,1833,2124,2143 'deprec':2245 'descript':628,664,1226,1277,1354,1359,1395,1432,1482,1524,1594 'detail':1065,2431,2442,2455,2468,2482,2495 'detect':415,431 'detective-front.png':1616 'detective-profile.png':1617 'dialogue/lip':511,570 'dif':273 'differ':2183,2223,2274 'dir':85,420,483,994,1243,1485,1542 'directori':707,1199,1246,1399,1436,1487,1545,2269,2279,2316 'disabl':723 'discov':1205 'discoveri':1849,2300 'display':1288,2361 'download':2225,2232 'downstream':1339,1692 'draft':497,549 'dramat':356 'dri':732,1971 'dry-run':731,1970 'durat':364,474,591,675,677,808,822,826,1373,1377,1448,1451,1516,2019,2031,2155,2159,2163 'effect':2530 'effici':1628 'empti':2228 'endpoint':2242,2250 'engin':2526 'enhanc':2639,2649,2659 'entir':1681 'env':1878,2135 'environ':139,1800,1838 'error':1858,2025,2048,2096,2098 'especi':1966 'estim':736,2603 'etc':189 'everi':2330 'exampl':165 'exclud':753 'exist':306,769,2270,2278,2297 'expens':2085 'explicit':1844 'export':89,160,166,192,193,2108 'express':611 'fail':1888,2045,2301 'failur':2157 'fal':90,94,137,167,171,194,198,818,1798,2101,2109,2113 'fal.ai':7,60,1795,2189,2194,2220,2502 'fals':714,722,734,757,1422,1460,1472 'fast':395,496,501,548,728,780,904,943,1456,2209,2340 'fastest':557 'featur':249,2448,2464,2488 'ffmpeg':1211,1807,2137,2145,2148,2153,2398 'ffprobe':1808 'fieldwork':1854 'file':271,709,771,801,1088,1196,1389,1495,1531,1563,1668,2226 'film':425,2651 'film-qual':2650 'final':477,1058,1061,1623,2394,2402 'final.mp4':1626 'find':2305 'fire':40,65 'fire-and-forget':39,64 'first':1920,1973 'fix':835,2100 'flag':626,1224,1352,1393,1430,1480,1522,1773,2040 'folder':102,1076 'follow':266 'forget':42,67,2038 'forward':383 'found':2120,2139 'fox':336 'fps':695 'frame':697 'freez':1161 'front':1549 'full':119,1641,2000 'g0':305,976,984,1068,1579,1910,2355 'g0-g5':975,1578,1909 'g1':998,1095,1584,1697,1951,2376 'g1-g3':1950 'g2':1012,1124,1598,1699,1707,2384 'g3':1025,1152,1330,1715,1952,2091,2288 'g4':1040,1176,1604,1701,1709,1724,1958,2081,2392 'g5':977,1053,1200,1580,1703,1711,1726,1911,2404 'gate':48,73,312,973,978,1066,1171,1296,1304,1340,1637,1693,1902,2012,2364 'gen':3,51,215,244,1149,1818,1826,1841,1865,1876,2118,2128,2133 'general':2656,2661 'generat':5,53,325,342,375,444,459,725,755,775,1015,1042,1043,1101,1133,1178,1185,1381,1416,1446,1561,1602,1832,1860,1933,1936,1944,1982,1992,2044,2087,2093,2234,2306,2328,2333,2380,2388,2389,2437 'generate.py':289,625 'get':170,1113 'go':1684 'grok':647 'guid':2614 'hailuo':534,605,644,868,928,2493,2498 'handl':2097 'hardcod':1959 'higher':2034 'histori':1643 'http':2169,2185 'human':1570,1900 'human-read':1569 'i2v':385,656,674,1144,1191,2042 'id':820,1534,1537 'idea':1355 'imag':214,372,386,658,665,668,791,1014,1017,1022,1126,1135,1148,1415,1547,1560,1597,1817,1825,1831,1840,1859,1864,1875,1942,2039,2051,2055,2117,2127,2132,2379 'image-gen':213,1147,1816,1824,1863,2116,2126 'image-to-video':371,657,2054 'improv':2663 'includ':27,962,969 'inconsist':1922 'increas':2204 'increment':836 'independ':1651 'index':2319 'initi':407,987,2348 'input':1145,1192 'instal':120,234,1793,1811,1867,2125,2144,2147,2152 'instead':1891 'instruct':1067 'int':1239 'integr':2507 'interact':70,1895 'interrupt':2230 'intro':1591 'invalid':1338,1347,1690,1698,1708,1725,2084,2158,2251 'investig':432 'isol':1646 'issu':2203 'iter':558,2344 'json':756,759,796,798,982,1527,1539,1678,2552,2561,2571,2582 'kebab':1232 'kebab-cas':1231 'key':91,96,124,138,157,168,172,195,200,1797,1799,2102,2110,2115 'keyfram':20,208,445,1016,1021,1134,1173,1189,1700,1705,1761,1821,1921,1930,1954,2378 'keyframe.png':1595,1608 'keyframe.py':1020,1128,1392,1776 'keyframe.py/clip.py':1775 'keyword':456,1261,1364,1407,1411,1757,1772,2545 'kling':28,360,472,507,561,637,838,934,1745,1749,2059,2429,2435 'kling-specif':2434 'kling-v3':359,471,506,560,636,933,1744,1748 'latest':262 'layer':1732 'layout':1855 'left':318 'level':2578 'librari':1791 'light':38,63,287,322,487,1786,2331 'limit':2172 'line':1275 'linux':2154 'list':1557 'llm':1007,1102,1111,1386,2370,2634,2644,2657,2665 'load':1634,1673,1675,1999,2009,2324 'local':270 'lock':1030,1035,1038,1158,1175,1307,1328,1336,1714,1939,1956,2078,2088,2282 'lock-sequ':1034,1157,1335,2077 'log':763 'loglin':429,1271 'long':518,583 'longer':2073 'lower':1904 'ltx':34,329,394,499,550,630,634,779,804,828,902,912,1741,2022,2026,2036,2339,2466,2472 'ltx-specif':2471 'machin':1575 'maco':716,2149 'malform':2216 'manag':131,135,153,176,183,188,1633,1815,2358,2362 'mani':2174 'manifest':990,995 'manifest.md':1083,1568 'map':1736 'max':1280,2066 'media':603 'metadata':1064,1218,1502,2579 'micro':610 'micro-express':609 'minim':1653 'minimum':2027 'miss':2105,2121,2140 'mode':37,62,207,288,301,323,362,384,402,405,488,648,789,806,972,1787,1805,1896,1908,2043,2332,2474,2606,2617 'model':26,328,345,358,388,470,489,545,629,632,803,824,895,1412,1417,1442,1447,1739,1960,1975,2037,2063,2161,2184,2199,2224,2238,2241,2257,2418,2424,2513,2612,2620 'moodi':424,458 'movement':2535 'mp4':1601,1611 'multi':16,56,297,565,2352,2407,2597 'multi-scen':15,55,296,2351,2596 'multi-shot':564 'multi-view':2406 'music':1508,1511,1621 'n/a':931 'name':412,1227,1230,1322,1567,2271,2275,2310 'narrat':567 'natur':581 'need':212,280,495 'negat':748 'negative-prompt':747 'network':2202,2229,2236 'new':248,302,408,1311,2350 'nn.mp4':1195,2313 'no-audio':719 'no-preview':711 'no-state-upd':1418,1468 'noir':414,426 'noir-detect':413 'none':666,701,750,1272,1384,1408,1465,1498,1504,1509 'note':827 'number':1236,1326,1404,1441 'object':2565,2575,2586 'one':11,284,1274 'one-lin':1273 'one-off':10,283 'open':553 'oper':1650 'optim':2427,2491,2522,2619,2642,2654 'option':601,843 'order':1836,1986 'output':84,293,340,419,485,704,706,758,793,795,983,1081,1193,1242,1383,1491,1493,1541,1544,1585,1622 'output-dir':418,1241,1540 'overflow':2008 'overlay':1215 'overload':2200 'overrid':1409,1769,1839 'overrun':1965 'overwrit':276 'packag':1814 'paramet':2438,2461 'parent':1245 'path':669,710,792,794,997,1023,1051,1063,1308,1400,1437,1496,1507,1512,1845,2320 'path/url':2052 'pattern':1882,1885,2311 'peer':216,1150,1819,1827,1851,1871,2122 'per':698,1018,1046,1767,2512,2514,2621 'per-scen':1766 'perform':582 'physic':538,612,619 'pick':315 'pip':1792 'pipelin':46,71,974,1912 'pixvers':646 'plain':191 'plan':2519,2610 'practic':2528 'prefer':181 'premium':1269,1747 'prerequisit':122 'prevent':1716 'preview':392,713,718,768,777,2337 'preview.py':766 'price':2423 'pro':730,863,1458 'produc':1903 'produce.py':1893 'product':18,58 'profil':204,1550 'progress':2366 'project':44,69,113,206,300,303,307,404,409,438,442,450,466,971,985,988,993,1069,1075,1229,1248,1293,1300,1315,1333,1343,1396,1398,1433,1435,1566,1572,1642,1682,1734,1755,1804,1907,2268,2346,2354,2363,2599,2605,2608,2616 'project-nam':1565 'project_init.py':304,992,1072,1223 'project_state.py':308,1033,1156,1286,2290 'prompt':291,333,350,378,399,661,749,785,1000,1005,1008,1097,1103,1123,1305,1348,1387,1695,1940,1953,2001,2371,2525,2532,2540,2625,2631,2635,2645,2658,2662,2666 'prompt.md':1592,1607 'provid':2050 'python':331,348,376,397,410,440,448,464,479,772,783,1291,1298,1313,1331,1341,1788 'qualiti':505,726,1454,1905,1914,2208,2600,2652 'quarter':1552 'queue':743,2503 'quick':9,282,320,391,786,893,2336,2341 'quicklook':717 'rang':853,867,875,883,891 'rate':2171 'ratio':1094,1367,1372,2253,2255 'read':257 'readabl':1571 'recommend':144 'red':335 'refer':321,624,765,894,1013,1125,1222,1285,1350,1391,1428,1478,1520,1596,1614,1656,2383,2410,2432,2443,2456,2469,2483,2496,2505,2546 'references/installation-guide.md':128,129 'references/models.md':2247 'regener':1723 'remain':1934 'remix':2463 'remov':2277 'reproduc':702,1466 'request':819,1790,1794,2175 'requir':662,672,1146,1228,1235,1244,1356,1361,1397,1402,1434,1439,1486,1492,1528,1535,1543,1639,1677,1784,1802,1861,1948,2013 'resolut':366,680,811,1828 'resolv':1830 'resourc':2318 'respons':2218 'result':2215 'resum':310 'retri':2179,2233 'review':1027,1028,1154,1172,1901,1927 'rl':616 'rl-train':615 'root':115 'rule':1629,1687 'run':163,337,733,1108,1127,1179,1972 'save':1385 'scan':1670 'scenario':2517 'scene':17,57,298,401,416,447,452,463,468,593,788,1004,1019,1047,1078,1115,1117,1122,1131,1167,1183,1234,1238,1302,1312,1319,1321,1325,1345,1401,1403,1438,1440,1489,1582,1589,1593,1645,1648,1717,1768,1780,1926,1935,1991,1995,2082,2286,2298,2315,2353,2375,2386,2415,2550,2564,2566,2595,2598,2622,2674 'scene-by-scen':1114 'scene-nam':1320 'scene-numb':1324 'scene-specif':1779 'scenes/01-intro/prompt.md':1309 'scenes/nn-name':1198 'schema':2553,2562,2572,2583 'script':74,164,623,764,981,1221,1284,1349,1390,1427,1477,1519,1649,1674,1829,1842,1877,2134,2329 'sec':809 'second':679,699,746,1378,1453,2515 'secret':152,175,182,187 'secret-manag':151 'section':1679 'see':127 'seed':700,703,816,1464,1467 'select':490,1672,2425,2613 'separ':1264,1555 'sequenc':1026,1032,1036,1037,1153,1159,1164,1329,1337,1713,1955,2079,2089,2280,2293 'sequenti':1994 'serv':1142 'set':347,1874,2104,2131 'setup':87,986,1070 'sheet':210,1615,1823,2411 'shell':203 'ship':222 'shot':566,999,1031,1096,1163,1194,1599,1609,2312,2574,2577 'shot-level':2576 'simul':621 'simulation-accur':620 'singl':290,292,1663 'skill':101,143,154,217,221,245,1151,1820,1852,1866,1872,2123,2129 'skill-video-gen' 'skill.md':109 'skip':715,1899,1916,2076 'skylin':352 'snow':339 'social':602 'sora':32,521,585,641,854,957,964,2069,2453,2459 'sora-specif':2458 'sora/veo':1968 'sourc':554,667,1664 'source-buildoak' 'specif':344,1781,2436,2447,2460,2473,2487 'spend':1281 'stabil':2237 'stage':979 'standard':428,727,729,1266,1268,1380,1455,1457,1559,1743 'start':381,2349 'state':21,295,314,991,996,1420,1470,1576,1658,1683,2357 'state.json':1086,1120,1426,1476,1574,1661,2015 'status':309,439,1289,1297,1306,2221,2360 'stay':218 'std':859,914,951 'stderr':762 'store':155 'stori':1001,1010,1105,1276,1357,1497,2368,2373,2557,2669,2672 'story-to-scen':2671 'story.json':1217,1499,1581,2555 'story/production':299 'structur':45,989,1564,2347,2556,2568 'style':422,455,1090,1140,1258,1260,1360,1363,1406,1410,1729,1756,1771,1917,1924,1931,2544,2547 'style-keyword':454,1405,1770 'subdirectori':1082 'success':799 'summari':1573 'sunset':354 'support':608,1212,2267 'suppress':761 'switch':2181 'sync':512,571,580 'system':1669,1813 't2v':363,403,649,650,790,807 'tabl':1290,2165 'target':1376 'task':2334 'team':179 'techniqu':2593 'tell':235,254 'templat':1084,2636,2646,2660,2667 'tempor':1462,1988 'terminolog':2538 'test':400,787,2342 'text':279,491,652 'text-to-video':651 'three':132,1551 'tier':133,427,1091,1265,1379,1382,1414,1444,1558,1562,1735 'time':1220,1501 'timeout':741,744,2198,2205 'token':1627,2005 'tokyo':351 'top':2192 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-tools' 'topic-automation' 'topic-browser-automation' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'total':1375 'track':22,1087,1506,1577 'train':617 'tree':278 'tri':2207,2222,2283 'troubleshoot':126 'true':800 'truth':1666 'two':36,61,842 'ultra':1270,1751 'understand':2630 'univers':2266 'unlock':2292 'unlock-sequ':2291 'unsupport':2254 'updat':219,253,1119,1295,1421,1425,1471,1475 'update-guide.md':228,258,267 'updates.md':225,239,265 'upstream':1688 'url':671,2213 'usd':814,1283 'use':177,393,543,778,1071,1098,1155,1188,1202,1461,1660,1892,1906,1969,1980,2014,2018,2030,2058,2068,2166,2258,2289 'v3':361,473,508,562,638,935,1746,1750 'v3/2.6':839 'valid':825,2024,2047,2156,2167,2559,2569,2580,2589 'valu':851,865,873,881,889,2168 'var':1879,2136 'variabl':140,1801 'variant':2210 'variat':1782 'vault':142,149,169 'veo':30,389,513,572,639,845,941,949,1752,2440,2446 'veo-specif':2445 'verif':125 'via':6,59,1812,2397 'video':2,4,50,52,243,281,374,460,478,654,660,663,770,896,1041,1044,1049,1059,1062,1177,1186,1370,1445,1494,1625,1809,1937,2057,2086,2095,2141,2212,2327,2387,2390,2395,2403,2524,2531 'video-gen':1,49,242 'view':1548,1556,2408 'violat':2065 'visual':1139,1362,1923,2382,2543,2591 'voiceov':1505,1619 'wait':2176 'walk':382 'walkthrough':121 'wan':529,597,643,876,922,2479,2486 'wan-specif':2485 'wast':1943,2006 'without':1961 'work':1915,2295 'workflow':2607 'wrapper':2338 'write':2529 'yes':909,919 'your-fal-ai-key':92,196,2111","prices":[{"id":"69686a7e-e255-4bad-82f6-817adfad56df","listingId":"8cbac9db-24e7-49fa-8d56-3bb2afbd2ddc","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"buildoak","category":"fieldwork-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:07:18.860Z"}],"sources":[{"listingId":"8cbac9db-24e7-49fa-8d56-3bb2afbd2ddc","source":"github","sourceId":"buildoak/fieldwork-skills/video-gen","sourceUrl":"https://github.com/buildoak/fieldwork-skills/tree/main/skills/video-gen","isPrimary":false,"firstSeenAt":"2026-04-18T23:07:18.860Z","lastSeenAt":"2026-04-22T19:06:33.908Z"}],"details":{"listingId":"8cbac9db-24e7-49fa-8d56-3bb2afbd2ddc","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"buildoak","slug":"video-gen","github":{"repo":"buildoak/fieldwork-skills","stars":15,"topics":["agent-skills","ai-agents","ai-tools","automation","browser-automation","claude-code","claude-skills","codex"],"license":"apache-2.0","html_url":"https://github.com/buildoak/fieldwork-skills","pushed_at":"2026-03-18T08:36:25Z","description":"Battle-tested skills for AI agents that do real work","skill_md_sha":"4eea4973a1e9c7e73263540eff6fdb9bb495742e","skill_md_path":"skills/video-gen/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/buildoak/fieldwork-skills/tree/main/skills/video-gen"},"layout":"multi","source":"github","category":"fieldwork-skills","frontmatter":{"name":"video-gen","description":"Video generation via fal.ai -- from quick one-off clips to multi-scene\nproductions with keyframes, state tracking, and assembly. 10+ models\nincluding Kling 3.0, Veo 3.1, Sora 2, LTX-2.3. Two modes: light\n(fire-and-forget) and project (structured pipeline with gates)."},"skills_sh_url":"https://skills.sh/buildoak/fieldwork-skills/video-gen"},"updatedAt":"2026-04-22T19:06:33.908Z"}}