Video editing with Claude Code on the Mac — say a keyword, get a cut, captions, a motion graphic, a demo or a reel. Arabic-first, all local, zero API spend
Edit
Claude Code edits video by reading it, not watching it. A word-level transcript of the
footage, a few KB of text, lets Claude choose cuts at word boundaries. It looks at a filmstrip
only when a decision needs it, then renders with ffmpeg. Everything runs on the Mac, so there are
no uploads and no API spend.
record and shootfilm the product, higgsgenerates
clips with AI, and editfinishes them.
Quick start
One-time setup (already done on Abdout's Mac):
bash ~/.claude/skills/edit/scripts/setup.sh
Then start a new Claude Code session so the HyperFrames plugin loads.
Put the footage in a folder. One folder per video, holding every take you want considered,
for example ~/media/inbox/launch/.
Open Claude Code and say what you want, in Arabic or English, with no slash commands:
"rough cut ~/media/inbox/launch into a 60-second video with Arabic captions"
Claude transcribes the footage and tells you what it found. It proposes a plan and waits for
your yes, then renders a draft and shows you frames at the cut points.
Give feedback in plain words until it's right. The final file is overwritten in place.
Keywords
Say any of these in a sentence and the edit lane runs. The full list is on the
spellbook under The Pensieve.
Say
What happens
You get
edit · مونتاج
Claude asks what the footage is and what you need, then picks the lane
Whatever the lane below produces
rough cut · قص الفيديو
A transcript-driven cut that removes silences, fillers ("umm", "يعني") and false starts. When you repeat a line, the last take wins
<folder>/edit/final.mp4
captions · ترجمة الفيديو
Arabic captions burned in from the transcript, in Thmanyah Sans on a dark box
The same file, captioned
title card
An animated Arabic title, intro or outro card in the brand type and colors
A short MP4 card
motion graphic
A promo or explainer composed from code (HyperFrames), with no camera
An MP4 promo
reel
A vertical 9:16 version of a cut, captioned and capped at 58 s. With no footage it falls back to an AI clip (higgs), which only plans while credits are out
Transcribe. Every take is transcribed locally with mlx-whisper, at about 5 s per 30 s
of audio. Transcripts are cached and never redone.
Read. Claude reads edit/takes_packed.md, one line per phrase with its timestamps,
and describes the material back to you.
Plan. It proposes what to keep, what to cut and the order, then waits for your yes.
Draft. It renders a fast draft and checks the frames on both sides of every cut.
Final. It renders edit/final.mp4 at −14 LUFS loudness, with captions applied last. It
reports the loudness numbers, because it can't listen.
Feedback that works: "tighter", "keep the joke at 1:20", "drop the second example",
"less warm", "English captions", "no captions", "square for Instagram". Every change
re-renders from the cached transcript.
2. Captions only
"captions for ~/media/inbox/talk/final.mp4"
Whisper sometimes misspells Arabic (الأضافة for الإضافة). Claude fixes the transcript before
burning the captions. Ask to see the caption file first if the wording matters, such as names,
brands or Quranic verses.
3. Title card or motion graphic
"title card: إضافة طالب جديد — بالقلم" · "motion graphic announcing the admission season, 20 seconds"
Claude writes an HTML composition: Thmanyah Serif Display headlines, Thmanyah Sans body text and
the clay accent #e05638. It runs the HyperFrames check, which covers contrast and layout, then
renders and shows you a frame. Ask for "preview" to scrub it in the browser before the final
render.
4. A product demo with intro and outro
"demo video for add-student with an intro and outro card"
The take comes from shoot's sim. Its cached take is re-composed with no new filming. A record
screen recording also works. The cards come from HyperFrames, and everything is joined at a
constant 30 fps. The result overwrites ~/media/<repo>/<flow>/<flow>-ar.mp4, with one
file per flow.
5. A reel
"reel from the launch cut"
Claude takes the finished cut without captions, reframes it to 1080×1920 and burns the
captions last, placed above the TikTok, Instagram and Facebook buttons. There are two modes:
pad (default for screen recordings): the whole frame sits over a blurred fill, so nothing is cut off.
crop: a centered 9:16 crop, for talking heads.
Get better edits
Record clean audio. The transcript drives every decision, so a lapel or phone mic close to
the speaker beats the laptop mic.
Flub a line? Pause, then say the whole sentence again. The last take wins.
One folder per video, with every take inside. Claude chooses across takes.
Say the target up front: length, aspect (16:9, 9:16 or 1:1), captions yes or no, and the
language.
Where files land
What
Where
Transcripts (cached)
<folder>/edit/transcripts/*.json
Transcript Claude reads
<folder>/edit/takes_packed.md
Edit decision list
<folder>/edit/edl.json
Captions
<folder>/edit/master.srt
Final video
<folder>/edit/final.mp4, overwritten on every re-render
Session notes
<folder>/edit/project.md, so the next session continues where this one stopped
HyperFrames renders
<project>/renders/
Troubleshooting
Symptom
Fix
edit: only N GiB free (floor 10)
Free disk space. Delete old edit/ scratch, renders/ drafts and ~/Downloads media
Captions show boxes or broken letters
Thmanyah Sans is missing. Run setup.sh; it reports the font
Captions are missing entirely
The slim ffmpeg is on PATH. Use the scripts, which prepend ffmpeg-full
A HyperFrames video renders black
dir="rtl" is on <html>. Move direction: rtl onto each text element
A cut clips the first syllable
Whisper word starts drift after silence. Ask for "more padding on the cuts"
Compositions written as HTML and GSAP, rendered to MP4
Chrome shapes Arabic correctly, the same model shoot's motion lane uses
ffmpeg-full (Homebrew, keg-only)
Encodes and burns captions
The slim ffmpeg has no libass, so it can't burn subtitles. ffmpeg-full sits beside it, and shoot and record stay untouched
auto-editor, yt-dlp
Quick silence cuts; pulling in video from a URL
Not used, on purpose:
Remotion. A company of 4 or more people needs its Company licence ($100/mo minimum), and HyperFrames covers the same ground for free.
ElevenLabs Scribe. It is a paid API.
ffmpeg, Final Cut Pro and DaVinci Resolve MCP servers. Skills that call the CLI cost fewer tokens, and the workflow is fully agentic, with no desktop editor.
What setup.sh does:
Installs the Homebrew formulas and mlx-whisper.
Clones video-use to ~/oss/video-use and applies .claude/skills/edit/patches/video-use-local-asr.patch.
Symlinks the clone as the video-use skill and installs the hyperframes@hyperframes plugin.
The first transcription downloads about 1.5 GB of model weights.
House rules
One file per piece, always overwritten. Never -v2 or -final2.
Disk floor: 10 GiB. The render scripts refuse below it. Scratch is purged after delivery.
Plan before render. The strategy is confirmed before the first full render.
Measured, not claimed. Audio is reported as loudness numbers.
Verified on 2026-10-07
Test
Result
Arabic transcription, 30 s clip
27 words with timestamps in 5 s
Rough cut: 3 pauses + 1 false start
30 s → 16 s. No gap over 0.6 s remains, loudness is −14 LUFS, and Arabic captions are shaped correctly
HyperFrames Arabic title card, 6 s
Rendered in 10 s, with 8/8 contrast checks passing
Demo: card + take + card
22 s at a constant 30 fps
Reel, pad mode
1080×1920 @ 30 fps with captions above the platform UI