reel-editor
Use when someone drops a raw talking-head video (phone clip, selfie video, webcam recording) and wants it edited into a short-form reel, TikTok or YouTube Short in their own brand style - "edit this", "make this a reel", "cut this down", "add captions and graphics", "send it to CapCut". Also use the first time someone installs this skill or says "set up my brand".
How do I install this agent skill?
npx skills add https://github.com/nicolapocock/claude-reel-editor --skill reel-editorIs this agent skill safe to install?
- Gen Agent Trust Hubpass
A professional-grade video editing skill for producing social media reels. It leverages FFmpeg, Node.js, and specialized AI transcription services to automate the editing workflow, featuring a human-in-the-loop review process via Claude Artifacts.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
Reel editor
Turns a raw talking-head clip into a finished, on-brand vertical reel. Every brand choice (colours, fonts, caption style, sounds, CTA) comes from the person's brand file, never from defaults baked into this skill. You do the editing; they only make the calls that are theirs.
Before anything else: is there a brand file?
The workspace is ~/reels/ unless REELS_HOME is set.
- No
~/reels/brand.md→ run the setup interview inreferences/setup-interview.mdfirst. Do not edit a clip without a brand file, even if they say "just use whatever". The interview takes 5 minutes and it is the whole point of this skill. - Brand file exists → read
brand.mdandbrand.jsonin full, then continue.
Check the tools (once per machine)
bash scripts/doctor.sh - checks ffmpeg, Node, the HyperFrames skills and (if the brand file says CapCut) the CapCut connector. Fix anything it flags before editing. Install steps are in the repo README.
The edit, in order
Each reel gets its own folder: ~/reels/<yyyy-mm-dd>-<short-name>/. Copy the raw clip in (never edit the original).
- Transcribe -
python3 scripts/transcribe.py <clip> transcript.json. Uses ElevenLabs Scribe whenELEVENLABS_API_KEYis in~/.config/reels/.env(tight word timing; captions land on the word), else local Whisper (free, timing can drift ~0.3 s). - Clean the voice -
bash scripts/clean_audio.sh <clip> voice.wav(add--denoiseif there is background noise). Targets -14 LUFS, the level Instagram and TikTok expect. - Review (their call) - propose: lines to cut (repeats, false starts, rambles), fillers to drop, CTA moved to the end, target under 60 s, and the graphics plan. Wait for their yes before cutting. This is the step people care most about.
Look at the start and end before proposing cuts: grab a frame every 0.5 s for the first and last 4 s. Cut any camera setup (pointing at the floor/garden, flipping the camera, reaching for the phone) even if words are spoken over it. Start on the first frame where they're settled in shot, and on a word that works as an opener.
- Main path: the Reel Review page. First check that the
ArtifactandArtifactDatatools exist in this session (load them through tool search if they're deferred). If they do, followreferences/review.md: they tap words to cut, watch the live rough cut, check graphics, captions, sound and colour, then say "build preview". Its import step writesedl.json+edit.json, so skip to step 4's cut and step 5.4's render. - Fallback: review in chat when those tools aren't there (older Claude Code, other apps). Show the transcript as numbered lines (format in
references/rough-cut.md), then the card list in step 5.
- Main path: the Reel Review page. First check that the
- Tighten, then cut + speed - write
edl.jsonfrom the approved lines, thenpython3 scripts/tighten.py <folder>: it removes fillers and shortens pauses inside the kept lines, as hard as the brand's"pacing"says (naturaldefault,tight,fast; presets inscripts/pacing.py). They never approve these one by one. Thenpython3 scripts/cut.py <folder>. Speed comes from the same preset unlessbrand.jsonsets"speed". Listen-check: re-transcribemaster.mp4and confirm no clipped words at the joins. - Graphics + captions: fill the template, don't design. You are the editor here, not the designer - the look is already built from the brand file.
python3 scripts/transcribe.py master.mp4 master_transcript.jsonpython3 scripts/auto_edit.py <folder>→ draftsedit.json(captions in their caption mode, punch-ins)- Edit
edit.jsonyourself, in one pass: set"accent": trueon the one key word per sentence, and add cards at the densitybrand.json"graphics"asks for:minimalabout one every 8-12 s,balanced(default) every 4-6 s,busyevery 2-4 s. A line with nothing to show gets no card; don't chart every number or screenshot every tool just to fill the gap. Card types and fields are in the header ofscripts/build_reel.py; HyperFrames catalog motions (carousels, charts, counters, notifications, cursor, follow cards) are inreferences/motions.md. Every card must show what that exact line says.- Hook title: max ~10 characters per line, 2-3 lines (
"still / uploading / screenshots?"), so it renders big. It's the only text with an outline. - Carousel: if
brand.jsonhas"require_carousel": true, every reel gets one (motioncard, acarousel-*name,imagesfrom screenshots/their assets). If no line suits one, ask them; if they say no, set"no_carousel_ok": true. - Screenshots: for a tool or site they name that the line is about, run
bash scripts/screenshot.sh <url> shots/<name>.png. Exit code 2 means the site blocked it: try the tool's marketing page, or ask them for a screenshot. Never use a blank one. - Mix the kinds: website shots, a colour block, a list card (
"glass": truefor liquid glass), a sticker from their assets, afollowcard for the big moment, a counter or chart when they say a number.
- Hook title: max ~10 characters per line, 2-3 lines (
REEL_PREVIEW=1 bash scripts/render.sh <folder>for the draft (1080p, low priority), thenbash scripts/render.sh <folder> --finalonce they approve it (the resolution inbrand.json; add--capcuton the CapCut route) →final.mp4+ stage timings. Do not hand-write composition HTML or use other HyperFrames workflows here: they are slower and ignore the brand template. Only if they explicitly ask for an effect the template lacks (e.g. text behind their head), say it's slower, then use thehyperframesskill for that one effect.
- QA -
python3 scripts/qa.py <folder>(loudness, size, length, missing words). Then grab a frame at every card and look: text inside the frame, readable over the background, on brand. Fixedit.jsonand re-run render.sh until it passes. - Deliver -
bash scripts/deliver.sh <final.mp4> "<clear name>"→ upload-ready MP4 in their delivery folder. - CapCut (only if
brand.jsonhas"capcut": true) - build the editable CapCut draft and give them the link.references/capcut.md.
Tell them what changed, and what to check by ear (cuts, names, brand words spelled right).
Their brand rules win
If the brand file and your taste disagree, the brand file wins. If they correct something during an edit ("no, never outline captions"), add it to brand.md under "Rules" straight away so the next edit gets it right.
Common mistakes
| Mistake | Instead |
|---|---|
| Editing before a brand file exists | Run the setup interview |
| Cutting on Whisper word times blindly | Check the joins; nudge cuts into the quiet gap between words |
| Graphics that decorate instead of illustrate | Each card shows what this exact line says |
| Captions in a font the brand file bans | Re-read brand.md "Rules" before step 5 |
| Saying CapCut works everywhere | It doesn't (see capcut.md). The MP4 route always works |
| Fixing QA failures by lowering the bar | Fix the edit, re-run QA |
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/nicolapocock/claude-reel-editor/reel-editor">View reel-editor on skillZs</a>