A beat-locked video compositor and the 58-second AGI edit made with it.
232 cuts · 8.3 ms median sync to the drums · 75 AI-generated clips · 6 iterations
ACCELERATE is a Python engine that cuts video to percussion. It detects kick, snare and hi-hat onsets in a track and assigns each one an on-screen action, so the edit is driven by the drums rather than placed by hand. The repo contains the engine, every generation prompt, a Claude Code skill that packages the full workflow, and a record of the six iterations it took to reach the final cut.
The edit was produced with Claude Code (Claude Opus 5.5), which wrote the engine, rendered each version and reviewed the output frame by frame, with creative direction from @RomanSlack.
![]() |
![]() |
| Second drop | First drop, cut on kicks and snares |
The workflow is packaged as a Claude Code skill in
.claude/skills/schizo-edit/. It covers the style guide derived
from the iterations, music analysis, prompt recipes, scene authoring, rendering, and render QC.
git clone https://github.com/RomanSlack/accelerate && cd accelerate
claude # the skill is available automatically inside this repo
# > make a schizo edit to path/to/track.mp4 about <topic>To use it outside this repo: cp -r .claude/skills/schizo-edit ~/.claude/skills/.
| Onset | Band | On-screen action |
|---|---|---|
| Kick | 20 to 150 Hz | Hard cut, zoom punch, light camera shake |
| Snare | 1.2 to 5 kHz | Hard cut, often to a different treatment of the same subject |
| Hi-hat | 7 to 16 kHz | Camera step, clip time skip, exposure pulse (no cut) |
| Final bar of a section | all | Every onset becomes a cut |
Onsets are detected per band with librosa (engine/perc.py). Scenes are defined as
ordered (clip, treatment) lists and advance on each onset (engine/render3.py).
Measured on the final render with ffmpeg scene detection: median 8.3 ms from a cut to the nearest
onset, 85% within one frame at 60 fps.
The same eight timestamps across every version. Full feedback and changes per round are in docs/DIRECTORS_NOTES.md.
| Version | Feedback | Change |
|---|---|---|
| v1 → v2 | Text too small on mobile (internal review) | Larger text |
| v2 → v3 | Remove text; make the entire edit move with the percussion | All text removed; cuts generated from drum onsets; 60 fps |
| v3 → v4 | Remove glitch effects and slow zooms on stills; keep the 34 to 41 s section | Effects and stills removed; stills animated; generative treatment library; 34 to 41 s preserved exactly |
| v4 → v5 | More realistic people in desolate settings; replace static AI-looking shots and the ending | Realistic footage of people (Veo 3.1); new hard-cut ending |
| v5 → v6 | Replace wireframe geometry and the point-cloud face; reduce repeated footage | Jungle sequence on the first drop; live-action facial close-up; repeats reduced |
Each clip can be rendered through any of these. Snares switch between them. All run at roughly
10 to 30 ms per 1080p frame in NumPy/OpenCV (engine/fxgen.py).
All footage is AI-generated. Prompts are in prompts/ in the order they were used, and
scripts/gen_clips.py regenerates any of them.
| File | Model | Content |
|---|---|---|
01 |
Gemini 3.1 Flash Image | 33 keyframes |
02 |
gpt-image-2 | 5 keyframe replacements |
03, 04 |
Kling 2.5 Turbo Pro (image-to-video) | Initial animation pass |
05 |
Kling 2.5 Turbo Pro (text-to-video) | Motion-led clips |
06 |
Kling 2.5 Turbo Pro | Animated keyframes and additional footage |
07 |
Veo 3.1, Kling | People in desolate locations |
08 |
Veo 3.1, Kling | Jungle sequence |
09 |
Veo 3.1 | Facial close-ups |
For realistic people, Veo 3.1 outperformed Kling on subjects close to camera. The prompt suffix used: "Documentary realism, shot on 16mm film by a handheld camera, real ordinary people, natural imperfect framing, overcast flat light".
Total generation cost was approximately $44.
pip install -r requirements.txt
scripts/setup_fonts.sh # OFL fonts from Google Fonts
scripts/make_music.sh path/to/track.mp4 # -> build/music.wav (bar-aligned 58.8 s edit)
python engine/perc.py # -> build/perc.json (kick, snare, hi-hat onsets)
export FAL_KEY=...
python scripts/gen_clips.py prompts/07_real_people_veo_kling.jsonl --dry-run # payloads and cost estimate
python scripts/gen_clips.py prompts/07_real_people_veo_kling.jsonl # -> assets/vid/<name>_0.mp4
# Image-to-video prompts expect keyframes at assets/img/<name>_0.png (prompts 01 and 02).
python engine/prep.py # clip frames and audio envelopes
python engine/render3.py stills 6.5 41.5 # preview frames -> build/stills3/
python engine/render3.py video out.mp4 # full 1080p60 render
python scripts/check_render.py out.mp4 # sync stats, off-beat cuts, dark stretches, frame stripsA full render takes about 5 minutes on a 16-core CPU with 8 workers and uses about 3 GB of RAM.
| File | Description |
|---|---|
engine/render3.py |
Current engine (v4 to v6): scene lists, onset-driven cuts, treatment switching |
engine/render2.py |
v3 engine; also renders the 34 to 41 s section of the final edit |
engine/render.py |
v1 and v2 engine, kept for reference |
engine/fxgen.py |
Treatments: contours, dot matrix, ASCII, edges, slit-scan, strips, iris, tunnel, point cloud |
engine/perc.py |
Three-band onset detection |
engine/analyze.py, engine/drops.py |
Tempo, energy curve and drop timing |
scripts/gen_clips.py |
fal.ai batch generation (Kling 2.5 Turbo Pro, Veo 3.1) |
scripts/check_render.py |
Render QC |
- Glitch effects (RGB split, slice displacement, echo trails) reduced perceived quality and were removed.
- Slow zooms on still images read as a slideshow. All stills were animated or dropped.
- On-screen text weakened the edit. The final version has none.
- Abstract geometry (wireframes, point clouds) was less effective than live-action footage of people.
- A hard cut to black one downbeat before the final hit was stronger than a fade-out.
- Beat trackers may report half-time: the track is 154 BPM and librosa reported 76.
- Chroma offset on 1-bit frames produces a green cast after 4:2:0 encoding, so it is applied only to non-binary frames.
- Unbounded per-worker frame caches exhausted 62 GB of RAM at 15 workers. Eight workers with bounded caches use about 3 GB.
warhorse by fuyomo (YouTube), 154 BPM, G major.
Licensed by the producer as free for non-profit use only; monetized use requires a lease. The audio is not included in this repository and the GIFs are silent.
- Creative direction: @RomanSlack
- Engine, rendering and review: Claude Code
- Music: fuyomo
- Fonts: Anton, VT323, Bebas Neue, Monoton, UnifrakturMaguntia (SIL Open Font License)
Code is MIT licensed. Generated footage is not included.






