A music video for the Suno song No Off Switch, about AI agent swarms that can't be shut down.
Watch it on YouTube: https://youtu.be/7KWI3f77TxM
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
The video is rendered with three.js from five of neoneye's vibe-coding-lab
experiments (copies in assets/):
- The queen (3d-queen-clothing) is the singer. She moves her arms to the song while her gown changes through the eras.
- Shoggoths (3d-shoggoth) are the agent swarm and the chorus. Every one is a different genome.
- The Amiga torus and its shapes (3d-torus-shooter), sometimes dithered, sometimes in colour.
- The 3D game of life (3d-game-of-life): All d4, 3×3×3, Coral Drift 8-18/15-19/16, 32³.
- Birefringent crystals (3d-birefringent-crystal), with one and two crystals, in colour.
Most shots are dithered to black and white with a 4×4 ordered-dither
(Bayer) matrix, so its 17 patterns show. The lyrics run along the bottom with the word being sung highlighted; the word
timings come from faster-whisper aligned to the lyric sheet (video/src/lyrics.js).
This repository is a fork of JohnHeibel/PDoomVideo, the Claude Opus 5.5 music video for I'm Upping My P(doom). Its headless-Chrome render pipeline and the way the work was split into parallel subagents are what this video builds on. That video's code is still here (see The P(doom) video below).
| Path | What it is |
|---|---|
video/index.html |
live player: node video/serve.mjs, then open http://localhost:8040/video/ |
video/src/timeline.js |
the shot list |
video/src/scenes/ |
one module per world; the contract is in video/SCENES.md |
video/src/post.js |
the ordered-dither and dissolve pass |
video/thumbs.html |
three YouTube thumbnail candidates |
video/render.mjs |
headless renders: sheets, stills, clips, frames, MP4, thumbnails |
assets/ |
the song, the lyrics and the five experiments |
prompts/ |
every prompt given to Claude while making the video, verbatim |
You need Node.js, Google Chrome and ffmpeg.
npm install
node video/render.mjs --frames=0:220.7 --workers=3 # PNG frames → out/frames (resumable)
node video/render.mjs --encode --out=out/no-off-switch.mp4 # frames + song → MP4
node video/render.mjs --thumbs=out/thumbs # thumbnailsThe rest of this README is from JohnHeibel/PDoomVideo. Its song
(assets/pdoom.mp3) and first generation (legacy/) were removed in this fork; get them from the original repository.
Source code for the Claude Opus 5.5 music video for I'm Upping My P(doom).
Highly recommend checking it out!
- Inspired by: this post on X
- Song: as far as I could find, it comes from this YouTube video from 2024
- Lyrics from Osmarks showing the original udio generations and the interpretation of each lyric
The video took two generations, both in Claude Code:
- First generation (
legacy/): Claude Opus 5.5 (Medium) - Second generation (everything else): Claude Opus 5.5
Everything in this repository was generated by the model. No scene ideas were specified. The only direction was to:
- use the Clawd character design
- give each lyric interesting visuals and transitions
ANIMATION_GUIDE.md was written by Opus to brief the subagents it ran in parallel.
STORYBOARD.md was also written by Opus after the first generation, after being instructed to use P5 brushstrokes, make each scene visually interesting, and make every scene transition into the next.
| Path | What it is |
|---|---|
src/ch/ |
The video's nine chapters, one file each |
src/ |
Shared code: Clawd, the guest characters, props, lyrics and the timeline |
studio.html |
The page every frame is painted in, using p5.js and p5.brush |
render.mjs |
Renders frames in headless Chrome and encodes the MP4 with ffmpeg |
STORYBOARD.md |
Opus's shot-by-shot plan |
ANIMATION_GUIDE.md |
Opus's style and code guide for its subagents |
legacy/ |
The first generation |
You need Node.js, Google Chrome and ffmpeg. The song is included at assets/pdoom.mp3.
npm install
node render.mjs --frames=0:156.6 --workers=4 # paint every frame into out/frames (resumable)
node render.mjs --encode --out=out/pdoom.mp4 # join the frames and the song into an MP4If Chrome isn't installed at the default Windows path, add --chrome=<path to chrome>.





