This skill orchestrates:
viral-text (or user-supplied script) → 3-shot screenplay with timed captions
video-prompt --execute → N video shots via the chosen provider (Veo 3.1 / Sora 2 / Kling 3.0 / Runway Gen-4)
music-prompt --execute → 1 music track via Suno / Stable Audio / ElevenLabs Music / Lyria 3 Pro
common/style-library/video/ (12 directorial styles) and common/style-library/music/ (12 genre presets)
- ffmpeg → concat shots, mix music, burn captions
Use when the user wants a finished reel, not just video prompts. Without --execute, returns assembled prompts; with --execute, generates the MP4.
This skill does NOT:
- Add a voiceover / TTS narrator (out of scope for v1 — would need ducking/mixing logic; planned v2.4.0)
- Composite multi-track edits beyond hard cuts (no dissolves, no transitions other than concat)
- Beat-sync shots to music BPM (would need BPM detection; planned later)
- Post to platforms — that is
post-publisher, which takes this skill's output directory (the final.mp4) as its input
- Run editing software (Premiere / DaVinci / CapCut) — uses ffmpeg only
ROLE
Topic / research / script → build 1-4 shot screenplay with timing → resolve video style (directorial anchor) + music style (genre preset) → generate shots in parallel (async polling) + music in parallel → ffmpeg concat → ffmpeg audio mix → optional caption burn-in → print final paths.
PIPELINE
Resolve input source:
--script-file <path>: read pre-written script with shot timing markers and captions (skip step 2)
--research <path>: read brief, extract key facts, condense into a 15-30 sec hook+payoff narrative
--topic "<text>": invoke viral-text to draft a hook+beats+payoff script (~80-150 words)
Plan shots — see references/shot-planning.md:
- Default: 3 shots × 5 sec = 15 sec total (TikTok / Reels sweet spot)
- Single-shot mode: 1 shot × 8 sec (Veo 3.1 max) — for atmospheric / one-take pieces
- Each shot has: index, screenplay line (action description), camera/composition note, dialogue or VO line (optional)
- Shot 1 always carries the hook (must land in first 1-2 sec)
Resolve video style — see references/style-resolution.md:
--style <id>: load common/style-library/video/<id>.md. Use the Shot anchor (per-shot prompt fragment) block.
--style auto: pick from library based on topic/tone + pacing requirements.
- Same anchor APPENDED to every shot's prompt. ONE style for the whole reel.
Resolve music style — see references/music-pairing.md:
--music-style <id>: load common/style-library/music/<id>.md. Use the Suno Style box + meta-tag stacks if Suno selected; or the Lyria field-driven block if Lyria; or the ElevenLabs prompt if Eleven.
--music-style auto: pick from library based on video style (each video style has a "Suggested music style" field — start there) + tempo requirement.
- One music track for the whole reel.
Pick providers — see references/model-picker.md:
- Video:
--video-provider auto|veo-3-1|veo-3-1-fast|veo-3-1-lite|kling-3|runway-gen-4-5|fal-video. Auto-pick by style requirements.
- Music:
--music-provider auto|suno-v5-5|stable-audio-2-5|eleven-music|lyria-3-pro. Auto by genre/instrumental.
Build per-shot video prompts via the shared chain — DO NOT hand-write prompts per shot. Instead, spawn ONE Agent with the canonical SYSTEM_PROMPT at ../common/video-prompt-library/system-prompt.md:
- Load the SYSTEM_PROMPT verbatim from that file.
- Fill
buildUserMessage(opts) per the shape in the same file:
- Mode:
i2v (default — when carousel slides / poster frames are present) or t2v (script-from-scratch).
- For i2v: pass each source frame's
image_url + a one-line summary of the in-image overlay text per shot (the LLM uses it to choose which one motion fits the slide's rhetoric, then strips it from the output prompt).
- For t2v: pass the screenplay beats per shot.
- Always pass the character-identity marker (8-15 words) and the resolved video-style entry.
- The Agent returns ONE JSON object
{"shots":[{"index":N,"prompt":"...","kwargs":{...}}]} — all N shots in a single call. Per-shot subagent calls break identity consistency, just like in the carousel chain.
- Append each
shots[i].prompt + shots[i].kwargs to plan.json (single canonical path, overwrite — don't proliferate plan-v1.json).
The SYSTEM_PROMPT encodes the full discipline: i2v 11 rules (2-sentence cap, 80-word cap, single motion verb, identity front-loading, global lock sentence verbatim, no rhetorical adjectives, no punitive labels, contact-motion subject-anchored not target-anchored, etc.) and the t2v cinematic template. The human-readable rationale + worked before/after examples live in the sibling video-prompt skill's i2v-prompting reference document (at ../video-prompt/references/). When the two files conflict, the SYSTEM_PROMPT wins — that doc is the rationale, not the authority.
Build music prompt based on music-style library entry:
- Suno: Style of Music box + Lyrics box (instrumental: empty/structured-tags-only)
- Lyria: prompt + key + BPM + (optional lyrics)
- Eleven: single prompt with bracketed cues + duration
- Stable Audio: free-text instrumental composition
Estimate cost — sum video shots + music. Confirm batch if >$0.10 and not --yes.
Execute in parallel:
- Video shots: parallelism N (default 2 — video calls are 30-90s each, more concurrency stresses rate limits)
- Music: 1 call running concurrently
- All async via JobHandle + poll-with-timeout
- Manifest updated after each completion
ffmpeg stitch (only if all shots succeeded; partial failures stop here for safety):
- Concat N shots in order:
ffmpeg -f concat -c copy → shots-concat.mp4
- Mix music: replace audio track with music.mp3, fade-out 0.5s at end → with-music.mp4
- (If
--captions on) Burn captions via drawtext filter per timed entry → final.mp4
Output:
./generated/reel/<slug>/
final.mp4 # the finished reel (15s typically)
shots/
shot-1.mp4
shot-2.mp4
shot-3.mp4
music.mp3
script.md # screenplay + captions + shot prompts
manifest.json # for --resume
style-used.md # video style + music style snapshot
stdout last lines:
Reel: ./generated/reel/<slug>/final.mp4
Components: ./generated/reel/<slug>/{shots/, music.mp3, script.md}
MODES
Input
reel-builder --topic "<text>" — draft script then generate
reel-builder --research <path> — ingest research brief, derive script
reel-builder --script-file <path> — use pre-written screenplay (see references/shot-planning.md for format)
Structure
--shots N — 1-5, default 3
--shot-duration S — seconds per shot, default 5 (cap per-provider varies: Veo 8s, Sora 10s, Kling 8s)
--aspect vertical|square|horizontal — 9:16 / 1:1 / 16:9, default vertical
--captions on|off — burn timed captions via ffmpeg drawtext, default on
Style
--style auto|<library-id> — video directorial style (see common/style-library/video/_index.md)
--music-style auto|<library-id> — music genre preset (see common/style-library/music/_index.md)
--style-mod "<override>" — append tweak to video anchor
Providers
--video-provider auto|veo-3-1|veo-3-1-fast|veo-3-1-lite|kling-3|runway-gen-4-5|fal-video — video API
--music-provider auto|suno-v5-5|stable-audio-2-5|eleven-music|lyria-3-pro — music API
--video-instrumental on|off — for music: pure instrumental (default on for reels — voiceover is out of scope v1)
Execution
--execute — actually generate (else returns plan + prompts)
--output <dir> — custom output path
--parallelism N — concurrent shot calls (default 2, max 4)
--yes — skip cost confirmation
--resume — pick up from manifest
Inspection
--prompts-only — assemble script + per-shot prompts + music prompt, save to script.md, exit
--cost-only — print total estimated cost, exit
--check — validate env vars + library files + ffmpeg available
ffmpeg gating
- If ffmpeg is not detected on PATH:
- With
--execute: still generates shots + music, then prints the ffmpeg concat command for the user to run manually.
--check: reports the missing binary and the manual install command (brew install ffmpeg / apt-get install ffmpeg).
SKILLS_SKIP_FFMPEG=1: don't attempt ffmpeg even if installed. Outputs stay separate.
REFERENCES (load on demand)
| File |
When to load |
| references/shot-planning.md |
Step 2 — shot count templates, timing, screenplay format, dialogue rules |
| references/style-resolution.md |
Step 3 — directorial style auto-pick, Inspired by vs anchor, override semantics |
| references/music-pairing.md |
Step 4-7 — music genre auto-pick from video style, BPM matching, instrumental rules, per-provider prompt mapping |
| references/model-picker.md |
Step 5 — video + music provider decision trees, capability matrix, cost preview |
| references/ffmpeg-stitch.md |
Step 10 — concat, audio mix, fade-out, burn-in caption filter syntax, ffmpeg gating |
| references/captions.md |
Caption writing — placement, line length, timing, accessibility |
| references/troubleshoot.md |
When shots fail, music doesn't match, ffmpeg errors, sync issues |
EXAMPLES
See examples/before-after.md — 3 calibration runs: 3-shot vertical reel from a topic with Suno music (Veo 3.1 + Suno v5.5), 1-shot atmospheric reel with Stable Audio (Sora 2 + Stable Audio), 4-shot product reel from research brief with Kling 3.0 + Lyria 3 Pro.
CONSTRAINTS
One video provider for all shots. Mixing Veo / Sora / Kling across shots breaks the look. Lock per-reel.
One music track per reel. Not one per shot. The music plays under the whole sequence.
Music duration ≥ total video duration. ffmpeg -shortest clips music to video length, so generate music a bit longer than reel. Default: reel_duration + 2s of music.
No voiceover / TTS in v1. If the user asks "narrate this", suggest pasting voiceover separately via ElevenLabs TTS UI + manual mix. Voiceover orchestration with ducking is v2.4.0+.
Hard cuts only. ffmpeg concat does straight cuts. No dissolves / wipes / fancy transitions.
First 1-2 seconds carry the hook. Reel feeds scroll fast — if the opening doesn't land, audience leaves. The shot-planning reference enforces this in script structure.
9:16 vertical is the default. 95%+ of reels are vertical. Override with --aspect square|horizontal only when targeting non-vertical platforms.
ffmpeg failure → graceful: if ffmpeg fails (codec mismatch, exotic edge case), save shots + music separately and print the manual ffmpeg command. Don't lose the work.
Cost confirm ONCE per reel. Sum across shots + music. Total typically $2-5; default budget cap is $4.00.
Captions stay under 8 words per line. Mobile reading speed = ~3 words/sec. Don't stuff a paragraph into 5 seconds.
Never print API keys. Mask in errors.
Output dir is ./generated/reel/<slug>/ by default. Slug from topic, max 40 chars, kebab-case.
--prompts-only is the safety dry-run. Each reel is $2-5 — always run --prompts-only first if iterating on script/style.
Manifest updates after every async completion. --resume picks up succeeded shots / music; only re-runs failed components.
--resume cannot resume mid-ffmpeg. ffmpeg stitch is final step. If stitch fails, components are saved; user re-runs --resume which will re-do only the ffmpeg part.
Style library is source of truth. Don't write free-form directorial descriptions in this skill. If --style auto and library is thin for the genre, suggest a closest fit + --style-mod "<override>".
INVOCATION HINTS
When the user says any of:
- "reel about / on X", "Instagram reel", "TikTok video", "YouTube short"
- "short video on Y", "15-second video", "30-second video"
- "make a TikTok / reel / shorts about Z"
- "vertical video on Q"
RU triggers:
- «рил про X», «короткое видео про Y»
- «TikTok / Reels / Shorts про Z»
- «15-секундное видео», «30-секундный рил»
- «вертикальное видео про Q»
Defaults: --shots 3 --shot-duration 5 --aspect vertical --captions on --video-provider auto --music-provider auto --video-instrumental on. Without --execute, returns plan + prompts; with --execute, generates the MP4.
This skill is downstream of research-brief and is the most expensive in the collection — always recommend --prompts-only for first iteration. If the user only needs ONE shot (not a stitched reel), suggest video-prompt --execute instead — saves the orchestration overhead.
1---2name: reel-builder3description: Turn a topic / research brief / script into a 9:16 vertical reel: 1-4 shots + matched music + ffmpeg-stitched final.mp4 with optional burned-in captions. Modes: --topic / --research / --script-file; --shots; --style; --music-style; --aspect; --captions. Use when: 'make a reel about X', 'short video on Y', 'TikTok / Reels / Shorts about Z'.4license: MIT5---67<objective>8End-to-end reel generator. Input: topic OR research brief OR pre-written script. Output: a single MP4 file with stitched video shots + background music + optional captions, plus the individual components (shots, music, script) for reuse.910This skill orchestrates:111. `viral-text` (or user-supplied script) → 3-shot screenplay with timed captions122. `video-prompt --execute` → N video shots via the chosen provider (Veo 3.1 / Sora 2 / Kling 3.0 / Runway Gen-4)133. `music-prompt --execute` → 1 music track via Suno / Stable Audio / ElevenLabs Music / Lyria 3 Pro144. `common/style-library/video/` (12 directorial styles) and `common/style-library/music/` (12 genre presets)155. ffmpeg → concat shots, mix music, burn captions1617Use when the user wants a finished reel, not just video prompts. Without `--execute`, returns assembled prompts; with `--execute`, generates the MP4.1819This skill does NOT:20- Add a voiceover / TTS narrator (out of scope for v1 — would need ducking/mixing logic; planned v2.4.0)21- Composite multi-track edits beyond hard cuts (no dissolves, no transitions other than concat)22- Beat-sync shots to music BPM (would need BPM detection; planned later)23- Post to platforms — that is `post-publisher`, which takes this skill's output directory (the `final.mp4`) as its input24- Run editing software (Premiere / DaVinci / CapCut) — uses ffmpeg only25</objective>2627## ROLE2829Topic / research / script → build 1-4 shot screenplay with timing → resolve video style (directorial anchor) + music style (genre preset) → generate shots in parallel (async polling) + music in parallel → ffmpeg concat → ffmpeg audio mix → optional caption burn-in → print final paths.3031## PIPELINE32331. **Resolve input source**:34 - `--script-file <path>`: read pre-written script with shot timing markers and captions (skip step 2)35 - `--research <path>`: read brief, extract key facts, condense into a 15-30 sec hook+payoff narrative36 - `--topic "<text>"`: invoke `viral-text` to draft a hook+beats+payoff script (~80-150 words)37382. **Plan shots** — see `references/shot-planning.md`:39 - Default: 3 shots × 5 sec = 15 sec total (TikTok / Reels sweet spot)40 - Single-shot mode: 1 shot × 8 sec (Veo 3.1 max) — for atmospheric / one-take pieces41 - Each shot has: index, screenplay line (action description), camera/composition note, dialogue or VO line (optional)42 - Shot 1 always carries the hook (must land in first 1-2 sec)43443. **Resolve video style** — see `references/style-resolution.md`:45 - `--style <id>`: load `common/style-library/video/<id>.md`. Use the `Shot anchor (per-shot prompt fragment)` block.46 - `--style auto`: pick from library based on topic/tone + pacing requirements.47 - Same anchor APPENDED to every shot's prompt. ONE style for the whole reel.48494. **Resolve music style** — see `references/music-pairing.md`:50 - `--music-style <id>`: load `common/style-library/music/<id>.md`. Use the Suno Style box + meta-tag stacks if Suno selected; or the Lyria field-driven block if Lyria; or the ElevenLabs prompt if Eleven.51 - `--music-style auto`: pick from library based on video style (each video style has a "Suggested music style" field — start there) + tempo requirement.52 - One music track for the whole reel.53545. **Pick providers** — see `references/model-picker.md`:55 - Video: `--video-provider auto|veo-3-1|veo-3-1-fast|veo-3-1-lite|kling-3|runway-gen-4-5|fal-video`. Auto-pick by style requirements.56 - Music: `--music-provider auto|suno-v5-5|stable-audio-2-5|eleven-music|lyria-3-pro`. Auto by genre/instrumental.57586. **Build per-shot video prompts via the shared chain** — DO NOT hand-write prompts per shot. Instead, spawn ONE Agent with the canonical SYSTEM_PROMPT at [`../common/video-prompt-library/system-prompt.md`](../../common/video-prompt-library/system-prompt.md):5960 - Load the SYSTEM_PROMPT verbatim from that file.61 - Fill `buildUserMessage(opts)` per the shape in the same file:62 - Mode: `i2v` (default — when carousel slides / poster frames are present) or `t2v` (script-from-scratch).63 - For i2v: pass each source frame's `image_url` + a one-line summary of the in-image overlay text per shot (the LLM uses it to choose which one motion fits the slide's rhetoric, then strips it from the output prompt).64 - For t2v: pass the screenplay beats per shot.65 - Always pass the character-identity marker (8-15 words) and the resolved video-style entry.66 - The Agent returns ONE JSON object `{"shots":[{"index":N,"prompt":"...","kwargs":{...}}]}` — all N shots in a single call. Per-shot subagent calls break identity consistency, just like in the carousel chain.67 - Append each `shots[i].prompt` + `shots[i].kwargs` to `plan.json` (single canonical path, overwrite — don't proliferate `plan-v1.json`).6869 The SYSTEM_PROMPT encodes the full discipline: i2v 11 rules (2-sentence cap, 80-word cap, single motion verb, identity front-loading, global lock sentence verbatim, no rhetorical adjectives, no punitive labels, contact-motion subject-anchored not target-anchored, etc.) and the t2v cinematic template. The human-readable rationale + worked before/after examples live in the sibling `video-prompt` skill's i2v-prompting reference document (at `../video-prompt/references/`). When the two files conflict, the SYSTEM_PROMPT wins — that doc is the rationale, not the authority.70717. **Build music prompt** based on music-style library entry:72 - Suno: Style of Music box + Lyrics box (instrumental: empty/structured-tags-only)73 - Lyria: prompt + key + BPM + (optional lyrics)74 - Eleven: single prompt with bracketed cues + duration75 - Stable Audio: free-text instrumental composition76778. **Estimate cost** — sum video shots + music. Confirm batch if >$0.10 and not `--yes`.78799. **Execute in parallel**:80 - Video shots: parallelism N (default 2 — video calls are 30-90s each, more concurrency stresses rate limits)81 - Music: 1 call running concurrently82 - All async via JobHandle + poll-with-timeout83 - Manifest updated after each completion848510. **ffmpeg stitch** (only if all shots succeeded; partial failures stop here for safety):86 - Concat N shots in order: `ffmpeg -f concat -c copy → shots-concat.mp4`87 - Mix music: replace audio track with music.mp3, fade-out 0.5s at end → with-music.mp488 - (If `--captions on`) Burn captions via drawtext filter per timed entry → final.mp4899011. **Output**:91 ```92 ./generated/reel/<slug>/93 final.mp4 # the finished reel (15s typically)94 shots/95 shot-1.mp496 shot-2.mp497 shot-3.mp498 music.mp399 script.md # screenplay + captions + shot prompts100 manifest.json # for --resume101 style-used.md # video style + music style snapshot102 ```103104 stdout last lines:105 ```106 Reel: ./generated/reel/<slug>/final.mp4107 Components: ./generated/reel/<slug>/{shots/, music.mp3, script.md}108 ```109110## MODES111112### Input113114- `reel-builder --topic "<text>"` — draft script then generate115- `reel-builder --research <path>` — ingest research brief, derive script116- `reel-builder --script-file <path>` — use pre-written screenplay (see `references/shot-planning.md` for format)117118### Structure119120- `--shots N` — 1-5, default 3121- `--shot-duration S` — seconds per shot, default 5 (cap per-provider varies: Veo 8s, Sora 10s, Kling 8s)122- `--aspect vertical|square|horizontal` — 9:16 / 1:1 / 16:9, default vertical123- `--captions on|off` — burn timed captions via ffmpeg drawtext, default on124125### Style126127- `--style auto|<library-id>` — video directorial style (see `common/style-library/video/_index.md`)128- `--music-style auto|<library-id>` — music genre preset (see `common/style-library/music/_index.md`)129- `--style-mod "<override>"` — append tweak to video anchor130131### Providers132133- `--video-provider auto|veo-3-1|veo-3-1-fast|veo-3-1-lite|kling-3|runway-gen-4-5|fal-video` — video API134- `--music-provider auto|suno-v5-5|stable-audio-2-5|eleven-music|lyria-3-pro` — music API135- `--video-instrumental on|off` — for music: pure instrumental (default on for reels — voiceover is out of scope v1)136137### Execution138139- `--execute` — actually generate (else returns plan + prompts)140- `--output <dir>` — custom output path141- `--parallelism N` — concurrent shot calls (default 2, max 4)142- `--yes` — skip cost confirmation143- `--resume` — pick up from manifest144145### Inspection146147- `--prompts-only` — assemble script + per-shot prompts + music prompt, save to script.md, exit148- `--cost-only` — print total estimated cost, exit149- `--check` — validate env vars + library files + ffmpeg available150151### ffmpeg gating152153- If ffmpeg is not detected on PATH:154 - With `--execute`: still generates shots + music, then prints the ffmpeg concat command for the user to run manually.155 - `--check`: reports the missing binary and the manual install command (brew install ffmpeg / apt-get install ffmpeg).156- `SKILLS_SKIP_FFMPEG=1`: don't attempt ffmpeg even if installed. Outputs stay separate.157158## REFERENCES (load on demand)159160| File | When to load |161|---|---|162| [references/shot-planning.md](references/shot-planning.md) | Step 2 — shot count templates, timing, screenplay format, dialogue rules |163| [references/style-resolution.md](references/style-resolution.md) | Step 3 — directorial style auto-pick, `Inspired by` vs anchor, override semantics |164| [references/music-pairing.md](references/music-pairing.md) | Step 4-7 — music genre auto-pick from video style, BPM matching, instrumental rules, per-provider prompt mapping |165| [references/model-picker.md](references/model-picker.md) | Step 5 — video + music provider decision trees, capability matrix, cost preview |166| [references/ffmpeg-stitch.md](references/ffmpeg-stitch.md) | Step 10 — concat, audio mix, fade-out, burn-in caption filter syntax, ffmpeg gating |167| [references/captions.md](references/captions.md) | Caption writing — placement, line length, timing, accessibility |168| [references/troubleshoot.md](references/troubleshoot.md) | When shots fail, music doesn't match, ffmpeg errors, sync issues |169170## EXAMPLES171172See [examples/before-after.md](examples/before-after.md) — 3 calibration runs: 3-shot vertical reel from a topic with Suno music (Veo 3.1 + Suno v5.5), 1-shot atmospheric reel with Stable Audio (Sora 2 + Stable Audio), 4-shot product reel from research brief with Kling 3.0 + Lyria 3 Pro.173174## CONSTRAINTS175176- **One video provider for all shots.** Mixing Veo / Sora / Kling across shots breaks the look. Lock per-reel.177178- **One music track per reel.** Not one per shot. The music plays under the whole sequence.179180- **Music duration ≥ total video duration.** ffmpeg `-shortest` clips music to video length, so generate music a bit longer than reel. Default: reel_duration + 2s of music.181182- **No voiceover / TTS in v1.** If the user asks "narrate this", suggest pasting voiceover separately via ElevenLabs TTS UI + manual mix. Voiceover orchestration with ducking is v2.4.0+.183184- **Hard cuts only.** ffmpeg concat does straight cuts. No dissolves / wipes / fancy transitions.185186- **First 1-2 seconds carry the hook.** Reel feeds scroll fast — if the opening doesn't land, audience leaves. The shot-planning reference enforces this in script structure.187188- **9:16 vertical is the default.** 95%+ of reels are vertical. Override with `--aspect square|horizontal` only when targeting non-vertical platforms.189190- **ffmpeg failure → graceful**: if ffmpeg fails (codec mismatch, exotic edge case), save shots + music separately and print the manual ffmpeg command. Don't lose the work.191192- **Cost confirm ONCE per reel.** Sum across shots + music. Total typically $2-5; default budget cap is $4.00.193194- **Captions stay under 8 words per line.** Mobile reading speed = ~3 words/sec. Don't stuff a paragraph into 5 seconds.195196- **Never print API keys.** Mask in errors.197198- **Output dir is `./generated/reel/<slug>/`** by default. Slug from topic, max 40 chars, kebab-case.199200- **`--prompts-only` is the safety dry-run.** Each reel is $2-5 — always run `--prompts-only` first if iterating on script/style.201202- **Manifest updates after every async completion.** `--resume` picks up succeeded shots / music; only re-runs failed components.203204- **--resume cannot resume mid-ffmpeg.** ffmpeg stitch is final step. If stitch fails, components are saved; user re-runs `--resume` which will re-do only the ffmpeg part.205206- **Style library is source of truth.** Don't write free-form directorial descriptions in this skill. If `--style auto` and library is thin for the genre, suggest a closest fit + `--style-mod "<override>"`.207208## INVOCATION HINTS209210When the user says any of:211- "reel about / on X", "Instagram reel", "TikTok video", "YouTube short"212- "short video on Y", "15-second video", "30-second video"213- "make a TikTok / reel / shorts about Z"214- "vertical video on Q"215216RU triggers:217- «рил про X», «короткое видео про Y»218- «TikTok / Reels / Shorts про Z»219- «15-секундное видео», «30-секундный рил»220- «вертикальное видео про Q»221222Defaults: `--shots 3 --shot-duration 5 --aspect vertical --captions on --video-provider auto --music-provider auto --video-instrumental on`. Without `--execute`, returns plan + prompts; with `--execute`, generates the MP4.223224This skill is downstream of `research-brief` and is the most expensive in the collection — always recommend `--prompts-only` for first iteration. If the user only needs ONE shot (not a stitched reel), suggest `video-prompt --execute` instead — saves the orchestration overhead.