cd /news/ai-tools/claude-skill-makes-edits-synced-to-s… Β· home β€Ί topics β€Ί ai-tools β€Ί article
[ARTICLE Β· art-90158] src=github.com β†— pub= topic=ai-tools verified=true sentiment=Β· neutral

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.

read4 min views1 publishedAug 10, 2026
Claude Skill Makes Edits Synced to Song Beat
Image: source

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/.

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 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, 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

── more in #ai-tools 4 stories Β· sorted by recency
── more on @ziad abdelkarim 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/claude-skill-makes-e…] indexed:0 read:4min 2026-08-10 Β· β€”