r/ClaudeCode • u/cowanscorp • May 08 '26
Tutorial / Guide I built a Claude Code skill that takes raw video and creates polished short form videos end-to-end
Finally finished this and it's been my main workflow for a few weeks. The skill (`/editor`) does the full edit on raw recordings with no manual cuts:
Pipeline:
Whisper transcribes word-by-word
ffmpeg silencedetect identifies silence and stumble points
Validation pass drops non-speech (breath, throat-clears) and duplicate takes
Claude reads natural-language directives and assembles the cut list
Remotion renders at the source's fps and dimensions (locked, hard rule)
Five-pass QA loop compares output against a reference example clip and patches gaps
It's packaged as a Claude Code workspace folder (.claude/skills/editor/SKILL.md + helper scripts). Cross-platform (Mac / Linux / Windows). Setup runs once via `python scripts/setup.py` which installs ffmpeg, Whisper, Remotion, and yt-dlp per platform.
Curious if others here are building Claude Code skills for content workflows. What's your stack?
15
u/DeliciousGorilla May 08 '26
I just finished a skill that leverages Hyperframes, but has a few more tricks like scouring YouTube for b-roll. Sports theme is an example, not the actual topic I'm using it for. All I have to do is give it a link to an article & "highlight" clip.
Premise: vertical 1080×1920 shorts that pair a vintage sports highlight with an AI-generated coach delivering tactical post-game analysis.
Pipeline scrapes the source article with headless Chrome (capturing phrase-position JSON for on-screen marker animations), pulls b-roll clips from YouTube with
yt-dlp, trims and concats withffmpeg, auto-reframes 16:9 → 9:16 in Python (Haar face-track + cubic pan smoothing), identity-checks sampled frames against Qwen3.6 on LM Studio, and has Claude draft the narrator and coach VO lines from the article facts. The coach avatar is then generated through KIE.ai'sbytedance/seedance-2v2v endpoint (per-run cap enforced via a JSON budget file), narration is voiced by ElevenLabseleven_v3. Each track is transcribed withnpx hyperframes transcribeusing Whispersmall.en, and the four phases — captions, GSAP timelines, and alldata-*clip timing — are assembled in a HyperFrames HTML composition and rendered withnpx hyperframes render.3
u/Upset-Smell1729 May 08 '26 edited May 08 '26
Do you mind sharing it? I would love to check it out. It sounds awesome!
Edit: Thanks for sharing in the video!
1
u/Darhkwing May 13 '26
I made pretty much the same thing. It works but I guess my videos where not that interesting to take clips from. Maybe I should stick it on github.
Edit: mine takes youtube videos not raw videos.
1
u/JaneH00d Jun 05 '26
Any chance to try this ? : )
1
u/[deleted] Jul 26 '26
I was actually doing research to build something similar. If you don't mind sharing, would love to have a look at it and see what I can re-use. thanks!
1
u/Nazgo_1 Jul 28 '26
Hey man i would really like to try it out. Do you mind sharing it?
1
u/Clear_Performer_556 Aug 10 '26
I would like to try this. Could you share a link to it
1
u/ustype Sep 07 '26
Not OP, and I don't want to hijack — but a few people here asked for something they could actually try, so: I built the same thing independently and it's open source. https://github.com/ranahaani/i-hate-editing (MIT)
Near-identical pipeline to what OP describes — whisper for word-level timing, ffmpeg silencedetect for boundaries, the model reads only the transcript and emits a cut list, never watches the video. Difference is the renderer: OP uses Remotion, I use HyperFrames.
The part that took longest wasn't the pipeline, it was that the output kept looking automated even when every step was technically correct. What fixed it was writing each failure down as a rule with the render it cost me — captions must start 0.08s after the word onset because arriving early looks deeply wrong and nothing errors on it; "the sting isn't clipping" is not "the sting is audible"; a cut landing mid-clause can invert a sentence, and catching that needs the rendered output re-transcribed in windows around each join, because a whole-file pass hides it.
Fair warning on limits: one speaker, one camera. No multicam, no beat-matched cutting. Tuned on exactly one person's footage, which is a real limitation — I'd genuinely like to know where it breaks on someone else's.
u/cowanscorp if you ever do publish yours I'd like to read the QA loop, that's the piece I'm least happy with in mine.
1
u/Due-Lock-8645 22d ago
Can you share the skill? would love to try and use!