Claude Skill Makes Edits Synced to Song Beat A new open-source Claude Code skill from developer Ziad Abdelkarim automatically syncs video edits to a song's beat, analyzing audio with librosa, tagging scenes with PySceneDetect, and rendering beat-accurate cuts with ffmpeg effects. The pipeline runs four stages—beat_map.py, clip_tag.py, plan_edit.py, and render_edit.py—and supports custom cut density, aspect ratios, and reference-based color grading, with demos available in the repository's examples folder. Automatic beat-synced video editing. Feed it a song and raw footage. It analyzes the beats, maps the energy, tags every scene, and cuts a ready-to-post edit — zero manual editing. preview flash-montage-1x1.mp4 | preview sealife-beat-edit-9x16.mp4 | Full-quality versions of both demos live in examples/ /ZiadAbdelkarim/beat-synced-edit/blob/main/examples . Run the four stages yourself. Same inputs, same edit, every time. The repo ships a skill at .claude/skills/beat-sync-edit/SKILL.md . Open this folder in Claude Code https://claude.com/claude-code and describe the edit you want: "cut my footage to the chorus, white flash on every drop, space the cuts out so the shots breathe, then make it 9:16" Claude runs the same pipeline and layers ffmpeg effects at beat-accurate timestamps — white flashes, stretch punches, hue shifts, RGB split, speed ramps, shakes, color grades. The full effects cookbook lives in the skill file. In conversation you can also dictate: Aspect ratio — 9:16 vertical, 1:1 square, stacked over-under, or leave it 16:9 Cut density — "a cut on every beat" vs "spaced out, let the shots breathe" Hue / tint by reference — point Claude at any other video on your machine "grade it like this one" and it will sample frames from the reference and build a matching color grade; with the Claude-in-Chrome extension it can even study a look from a video on the web song.mp3 ──► beat map.py ──► beats, energy curve, peaks/valleys JSON clips.mp4 ──► clip tag.py ──► scenes tagged by motion/energy/brightness JSON both ──► plan edit.py ──► edit decision list: which clip hits which beat EDL ──► render edit.py ──► final MP4 extract → concat → mux audio | Stage | What it does | |---|---| beat map.py | librosa audio analysis — beat timestamps, tempo, energy over time, peaks/valleys, best highlight segments | clip tag.py | PySceneDetect scene detection + per-clip motion/energy/brightness scoring; --thumbs exports a labeled contact sheet | plan edit.py | the matcher — high-energy clips land on energy peaks, calm clips on valleys, with anti-repetition, source spacing, and black-frame filtering | render edit.py | ffmpeg assembly; --overunder emits a stacked 960×1080 variant | vertical style.py | fits 16:9 output into 9:16 with a stylized squeeze + grade for TikTok / Reels / Shorts | flash montage.py | the white-flash montage template — 1:1 edits from stills and/or video clips with fadewhite transitions, punch-ins, and handheld sway see below | pip install -r requirements.txt ffmpeg must be on PATH brew install ffmpeg python3 beat map.py song.mp3 python3 clip tag.py footage.mp4 --thumbs python3 plan edit.py song beatmap.json footage clips.json --html python3 render edit.py footage edl.json -a song.mp3 -v footage.mp4 All creative control lives in plan edit.py : | Flag | Effect | |---|---| --beat-stride N | Cut density. 1 = a cut on every beat default . 2 + keeps every Nth beat — fewer, longer cuts that breathe, for slow or contemplative footage | --full | Edit the whole song instead of the best-scoring segment | --segment 2 | Use the second or third best highlight segment | --exclude '1,6,0-30' | Drop clips by id or source time range | --lead '2:18,5' | Force the opening cuts, in order | --pin '8=138,peak2=22' | Pin a clip to a specific beat, peak, or valley | A useful convention when comparing densities: render both and suffix them beat-full and beat-thinned . The square demo above is a montage: each scene holds for a couple of beats about 2.8 seconds in the demo , then blooms into the next through a white flash. You make one by describing it. Open this folder in Claude Code https://claude.com/claude-code , point it at your song and a folder of clips or photos, and say what you want: "make a white-flash montage from these six clips — punch in on each animal, flashes about a second long" "use still frames instead of the moving clips, and give them a little handheld shake" "quicker flashes, and end it on a fade to white" Claude picks the moments from each clip, frames each subject, times the scenes to your song, and renders the finished 1:1 video. Scenes can be video clips or still photos — stills get a subtle handheld sway so they don't look frozen — and the flash length is whatever you ask for. Prefer the command line? python3 flash montage.py --seq seq.json --audio song.wav --out montage.mp4 — the seq.json format is documented at the top of the script. - Python 3.10+ - ffmpeg on PATH pip install -r requirements.txt — librosa, PySceneDetect, OpenCV, NumPy