video-studio
One conversational pipeline for editing any video. Three layers compose; this skill
routes between them. The LLM never watches the video — it reads it (transcript +
on-demand timeline PNGs) and edits with word-boundary precision.
The three layers (what's bundled here)
The cut engine — video-use (skills/video-use/)
Transcribe → pack → reason → EDL → render → self-eval. Owns: filler-word removal,
dead-space trimming, color grade, 30ms audio fades, subtitle burn, and the
render.py composite that lays overlays onto the cut. This is the spine of every
edit. Read skills/video-use/SKILL.md for the 12 production rules.
The motion layer — HyperFrames (skills/hyperframes/, hyperframes-cli/,
hyperframes-registry/, gsap/, website-to-hyperframes/)
HTML + GSAP compositions rendered through headless Chrome to .mov with alpha.
Use for: lower-third captions, title cards, callouts, audio-reactive bits, scene
transitions, kinetic text. video-use spawns these as overlays and composites them.
The craft layer — make-a-video, short-form-video, docs/MOTION_PHILOSOPHY.md
Storyboard, brand system, pacing, motion taste. Reach here for how it should feel,
not how to render.
The standard loop
- Inventory. List the sources in the folder. Don't transcribe unprompted — wait
for the user to point at footage and say what they want.
- Transcribe + pack (video-use): one transcript call per source → one
takes_packed.md.
- Strategy → confirm. Propose the cut (beats, order, what gets cut). Wait for OK.
Never touch the cut without approval.
- EDL. Write the cut list (
ranges = source seconds, overlays = caption .movs in
output seconds). See templates/project/ for the shape.
- Motion (HyperFrames, when a beat needs it): author one composition, render per
variant
--format mov (alpha — webm comes out opaque).
- Composite (video-use):
render.py <edl> -o final.mp4 --no-subtitles --no-loudnorm
(drop --no-loudnorm only if the source has real audio).
- Self-eval → persist. The engine checks every cut boundary before you show
anything. Session memory lives in the project's
project.md.
Hard rules (non-negotiable; taste is free)
- Captions render
--format mov (ProRes 4444 yuva). webm = opaque, no alpha.
- Silent source needs a stereo silent track before render.py (its audio path
expects one) and
--no-loudnorm.
- Speed-ramps are pre-rendered
setpts clips, referenced as their own EDL sources.
No native EDL speed.
- Outputs live in
<videos>/edit/ — keep the skill dirs clean.
Setup
Run ./install.sh once (checks ffmpeg/node/chrome, sets up video-use's venv, wires the
skills, prompts for the ElevenLabs key). Then cd into a folder of footage and start a
session. See the repo README.md.
1---2name: video-studio3description: Edit any video by conversation — the orchestrator for the bundled video pipeline. Use when the user wants to edit, cut, caption, grade, or add motion graphics to footage; drops a folder of clips and says "edit this"; or asks to make a promo/teaser/tutorial/short. Routes to video-use (the cut engine) and HyperFrames (motion-graphics overlays), with a motion-craft library for taste.4---56# video-studio78One conversational pipeline for editing any video. Three layers compose; this skill9routes between them. The LLM never watches the video — it **reads** it (transcript +10on-demand timeline PNGs) and edits with word-boundary precision.1112## The three layers (what's bundled here)13141. **The cut engine — `video-use`** (`skills/video-use/`)15 Transcribe → pack → reason → EDL → render → self-eval. Owns: filler-word removal,16 dead-space trimming, color grade, 30ms audio fades, subtitle burn, and the17 `render.py` composite that lays overlays onto the cut. **This is the spine of every18 edit.** Read `skills/video-use/SKILL.md` for the 12 production rules.19202. **The motion layer — HyperFrames** (`skills/hyperframes/`, `hyperframes-cli/`,21 `hyperframes-registry/`, `gsap/`, `website-to-hyperframes/`)22 HTML + GSAP compositions rendered through headless Chrome to `.mov` **with alpha**.23 Use for: lower-third captions, title cards, callouts, audio-reactive bits, scene24 transitions, kinetic text. video-use spawns these as overlays and composites them.25263. **The craft layer — `make-a-video`, `short-form-video`, `docs/MOTION_PHILOSOPHY.md`**27 Storyboard, brand system, pacing, motion taste. Reach here for *how it should feel*,28 not *how to render*.2930## The standard loop311. **Inventory.** List the sources in the folder. Don't transcribe unprompted — wait32 for the user to point at footage and say what they want.332. **Transcribe + pack** (video-use): one transcript call per source → one `takes_packed.md`.343. **Strategy → confirm.** Propose the cut (beats, order, what gets cut). Wait for OK.35 Never touch the cut without approval.364. **EDL.** Write the cut list (`ranges` = source seconds, `overlays` = caption .movs in37 output seconds). See `templates/project/` for the shape.385. **Motion** (HyperFrames, when a beat needs it): author one composition, render per39 variant `--format mov` (alpha — webm comes out opaque).406. **Composite** (video-use): `render.py <edl> -o final.mp4 --no-subtitles --no-loudnorm`41 (drop `--no-loudnorm` only if the source has real audio).427. **Self-eval → persist.** The engine checks every cut boundary before you show43 anything. Session memory lives in the project's `project.md`.4445## Hard rules (non-negotiable; taste is free)46- **Captions render `--format mov`** (ProRes 4444 yuva). webm = opaque, no alpha.47- **Silent source needs a stereo silent track** before render.py (its audio path48 expects one) and `--no-loudnorm`.49- **Speed-ramps are pre-rendered `setpts` clips**, referenced as their own EDL sources.50 No native EDL speed.51- **Outputs live in `<videos>/edit/`** — keep the skill dirs clean.5253## Setup54Run `./install.sh` once (checks ffmpeg/node/chrome, sets up video-use's venv, wires the55skills, prompts for the ElevenLabs key). Then `cd` into a folder of footage and start a56session. See the repo `README.md`.