/auto-video-edit: raw footage to finished video
Run the whole thing without stopping to ask. Fix errors and re-run until there's a good final-video.mp4.
SKILL_DIR below means the folder this file is in (normally ~/.claude/skills/auto-video-edit).
1. Check the setup (once)
ls SKILL_DIR/.venv/bin/python SKILL_DIR/remotion/node_modules/.bin/remotion
If either is missing, run the repo's install.sh, or do it by hand:
python3 -m venv SKILL_DIR/.venv && SKILL_DIR/.venv/bin/pip install -r SKILL_DIR/requirements.txt
cd SKILL_DIR/remotion && npm install && npx remotion browser ensure
Also needs ffmpeg, ffprobe and node on PATH (macOS: brew install ffmpeg node).
2. Run the pipeline
In the folder with the footage (the biggest video file there is used unless you name one):
bash SKILL_DIR/scripts/run_all.sh # or: run_all.sh my-take.mov
It runs three steps, each also runnable on its own with SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/<step>.py:
| Step | Does | Writes |
|---|---|---|
edit.py | finds speech, cuts silences > 0.5 s (keeps 0.15 s air), splits into ~4.5 s shots, picks normal / punched (1.3×) / tight (1.5×) per shot from the words, centres zooms on the detected face, grades colour, masters the voice to -14 LUFS, 10 ms fades at every cut | edited-video.mp4, work/transcript.json, work/edit_report.json |
animate.py | finds moments that need a visual: numbers with units → Counter, "A vs B" / "instead of" / before-after → Comparison, 3+ "first / then / finally" sentences → Flowchart, strong claims ("the truth is", "most people", …) → TextCard; about 1 card per 15 s, never in the first 2.5 s; renders each card at the video's size and fps | work/animation_plan.json, animations/*.mp4, work/animation_manifest.json |
finalize.py | cuts every card in at its time with soft fades; if a broll/ folder exists, cuts in clips whose file names match spoken words (broll/coffee.mp4 → "coffee") for 3 s | final-video.mp4, work/finalize_report.json |
Useful flags: edit.py --no-zoom, --whisper small (better transcript, slower), --silence-db -35 (quiet room) / -25 (noisy room), --min-silence 0.35 (tighter cuts). animate.py --max 3, --min-gap 8.
3. Make the cards smart (do this every time)
The automatic plan uses rules. Improve it with the transcript before the final render:
SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/animate.py --plan-only- Read
work/transcript.jsonandwork/animation_plan.json. Edit the plan:- Rewrite every
headline/label/steps/valueinto 2–6 punchy words that say what the speaker means (not a fragment of the sentence). Fix numbers the transcript misheard. - Drop cards that don't help understanding; add a card where a key number, list or contrast has none. Card types and props:
Counter:{"to": 75, "decimals": 0, "prefix": "$", "suffix": "%", "label": "..."}Comparison:{"left": {"label": "Before", "value": "4 hours"}, "right": {"label": "After", "value": "10 min"}}Flowchart:{"steps": ["Record", "Upload", "Post"]}(2–5 steps)TextCard:{"headline": "Nobody talks about this", "body": ""}
- Each card needs
"start"(seconds in edited-video.mp4) and"seconds"(3–5).
- Rewrite every
SKILL_DIR/.venv/bin/python SKILL_DIR/scripts/animate.py --from-planSKILL_DIR/.venv/bin/python SKILL_DIR/scripts/finalize.py
4. Check the result
- Read
work/edit_report.jsonandwork/finalize_report.json: duration shrank sensibly, no warnings. - Grab frames to look at:
ffmpeg -ss 5 -i final-video.mp4 -frames:v 1 -y work/check.jpg(and at each card's start + 1 s). Look at them: face in frame on zoomed shots, cards readable, nothing cut off. - If a zoom crops the face badly, re-run
edit.py --no-zoom. If cuts feel choppy, use--min-silence 0.8.
If something fails
Every step writes its full ffmpeg / Remotion output to work/*.log. Read the last lines, fix the cause, re-run that step only. Common ones:
whisper unavailable→ the venv is missing; install it (step 1). The edit still runs without zoom choices.- Remotion
Could not find a browser→cd SKILL_DIR/remotion && npx remotion browser ensure. - A card fails to render → it is retried as a plain TextCard, then skipped; the video still finishes.
Report
--- VIDEO EDIT COMPLETE ---
Input / Output / Duration before → after / cuts / zoom mix / cards / b-roll / file size
Then name anything you couldn't fix.