“sparks of AGI in your eyes”
osmarks points to Microsoft Research’s 2023 paper “Sparks of Artificial General Intelligence”, which argued GPT-4 showed early signs of general intelligence. The rest is a love-song cliché.
A 2024 AI-doom pop song, re-sung in 2026 as “Claude Pop”, then animated in p5.js watercolour by code that Claude Opus 5.5 wrote. Here’s a 10-step guide to painting your own video, the best remixes, and what the lyrics mean.
X via Grok · 2026-09-28 · YouTube: yt-dlp · 2026-09-28 · GitHub · 2026-09-28
Play Claude Pop – I’m Upping My P(Doom) · John Heibel2:37
Plays from youtube-nocookie.com only after you click.
No frame of the p(doom) video is an AI-generated image. Every frame is drawn by code Claude wrote: a p5.js canvas paints the picture for song time t, headless Chrome screenshots it, and ffmpeg joins the frames and the song into an MP4. One evening to set up and prompt, then let it render.
This guide uses ClaudeAnimationBase (MIT, © 2026 John Heibel): the same p5.brush engine as the viral video, cleaned up to be forked, with a Clawd who has 31 emotions and an ANIMATION_GUIDE.md that Claude reads first. The original PDoomVideo repo has no licence, so we link to it rather than copy it. You need to be able to install software and paste commands into a terminal; Claude writes the code.
git clone https://github.com/JohnHeibel/ClaudeAnimationBase my-video cd my-video npm install
On a Mac, brew install node git ffmpeg and brew install --cask google-chrome get you everything. Use Claude Code, not claude.ai: only Claude Code can run the renderer and look at what it drew.
node render.mjs --sheet=0,1,2,3,4,5 --out=out/sheet.jpg
Open out/sheet.jpg. If you see Clawd, the orange mascot, you’re set.
--chrome="<path>" or set CHROME_PATH.--soft-gl (software WebGL).--gpu-angle=gl-egl (or vulkan).The kit already adds --use-angle=metal on macOS and --no-sandbox on Linux.
Write lyrics with Claude and generate the song in Suno. Suno’s free plan is personal, non-commercial only (upgrading later doesn’t change that); songs made on Pro/Premier come with a commercial licence. Check suno.com’s terms before you monetise. Skip Udio: its current terms forbid downloading outputs without written consent.
Suno’s .m4a hides a timed lyric track. Pull it out, then convert to MP3 without it:
ffmpeg -i song.m4a -map 0:s:0 subs.srt ffmpeg -i song.m4a -map 0:a -c:a libmp3lame -q:a 2 assets/song.mp3
Using the p(doom) song itself? It isn’t openly licensed: keep it non-commercial, credit everyone, and expect YouTube claims.
Edit src/config.js:
const PROJECT = { duration: 45, bpm: 120, offset: 0.21, audio: 'assets/song.mp3' };
duration is the length in seconds; offset is when the first downbeat lands. For bpm, use any BPM detector or ask Claude to run librosa. Watch for half/double time: PDoomVideo uses 88 BPM for the same song, mexicat’s analysis says 132. Pick whichever feels right.
You need a list of [start, end, "line"]. Easiest first:
subs.srt into src/lyrics.js.faster-whisper with word timestamps, then spot-check it.The guide says “Lyrics are not text”: Claude acts lyrics out by default. Karaoke captions need prompt 3.
Run claude in the project folder and send prompt 1. Read STORYBOARD.md properly: this is the cheapest place to change the story. Say what bores you, then approve.
Going vertical (Shorts, Reels, TikTok)? Send prompt 6 before prompt 1, so the storyboard is composed for a tall frame from the start.
Send prompt 2. Claude writes src/scenes/my_video.js, swaps out the demo in studio.html, and renders a contact sheet after every shot to check its own work.
Over a minute long? Ask for chapters built by parallel subagents, as Heibel did. Want karaoke captions? Add prompt 3 here.
Open studio.html in Chrome to scrub; add ?t=12.5 to jump to 12.5 s. Or render a short clip:
node render.mjs --clip --range=20:30 --out=out/preview.mp4
Give notes in plain words (prompt 4): “0:14, Clawd is too small.” Three to ten rounds is normal; this is where the quality comes from.
node render.mjs --frames --workers=4 node render.mjs --encode --audio=assets/song.mp3 --out=out/video.mp4Always pass
--audio to --encode. It ignores the audio in config.js, so without the flag you get a silent video.
--frames resumes where it stopped: just rerun it. No GPU? Add --soft-gl and use prompt 5 first. Page-load timeouts on a slow machine? Use fewer workers, or --clip. Then watch it once with sound: the first beat, the ending, the captions.
The output is 1920×1080, 24 fps, H.264 + AAC: it uploads straight to YouTube and X. There’s no resolution flag; 1920×1080 is hard-coded in src/core.js, studio.html and render.mjs. For vertical, go back to step 6 and use prompt 6; don’t crop a landscape render.
Credit the song’s writers and generator, the kit and Claude (template below), and tick the AI-content box where a platform asks. Many remixers push their project to GitHub too.
Run them inside the cloned folder. Swap the <placeholders> for your own.
Read ANIMATION_GUIDE.md and look at docs/emotions.jpg and docs/views.jpg.
I want a music video for assets/song.mp3 (tempo and length are in src/config.js).
Here are the lyrics with timings:
<paste [start, end, "line"] list>
Don't write any code yet. Write STORYBOARD.md in the guide's format: a logline, the world/palette and how it changes, a recurring motif, Clawd's emotional arc, and a shot list where each shot is anchored to a lyric line, has a clear event, a transition in and out, and the "reads" with timings. Cuts and hits land on beats.
Make it funny and visual, and act the lyrics out rather than captioning them.
Then stop and show me.Claude reads the rules, then writes only a storyboard, one shot per lyric line, and stops for your review.
The storyboard is approved. Build it: create src/scenes/my_video.js, replace the demo script tag in studio.html, and build one shot at a time in order. For every shot, render a contact sheet and strips of the key motions, open the images and fix anything that breaks the guide's rules (text, tiny Clawd, snapping faces, dead moments, hard cuts). Keep every frame a pure function of t. When all shots are done, render out/preview.mp4 with the audio and tell me what you're least happy with.
Shot by shot, with a self-check after each, ending in a preview with sound.
Add karaoke subtitles: a painted band along the bottom (about y 975-1070) that shows the current lyric line from src/lyrics.js and highlights each word as it's sung (interpolate across the line if we only have line timings). Use the lettering helpers so it matches the hand-painted look, and keep faces and key action above y 960 in every shot. Check it with sheets at 5 lyric times.
A hand-painted caption band, like the original. The coordinates assume landscape; for vertical, ask Claude to convert them.
Notes from watching out/preview.mp4: - 0:08-0:12: I can't tell what Clawd is reacting to; hold the reveal longer. - 0:20: Clawd is too small; make it a medium shot. - The second chorus feels like the first; escalate it (bigger, more chaos). Fix these, re-check each with a strip, and render the changed ranges only.
An example: swap in your own timestamps and notes. Only the changed ranges are re-rendered.
Rendering is too slow on this machine (see the ms/frame in the log). Profile the slowest shots with --sheet and cut per-frame cost to under 2 s: replace most watercolour `fill` shapes with flat `wash` shapes plus a little hatch, reduce shape counts, and keep the look as close as you can. Show me before/after sheets.
Trades the most expensive watercolour fills for flat washes, and shows you a before/after.
Read ANIMATION_GUIDE.md, then make a 15-second video of Clawd trying to catch a butterfly.
The example from the ClaudeAnimationBase README: a good first test before your own song.
I want this video in 9:16 vertical, 1080x1920, for YouTube Shorts, Reels and TikTok. This kit has no resolution setting: 1920x1080 is hard-coded in three places: `const W = 1920, H = 1080` in src/core.js, the <canvas> in studio.html, and `--window-size=1920,1080` in render.mjs. Change all three to 1080x1920. Then search src/ for coordinates that assume a landscape frame (e.g. 960 as the centre x, 1080 as the bottom) and make them use W and H instead. Update the canvas size in ANIMATION_GUIDE.md so later work follows it. Compose for a tall frame: Clawd bigger and near the centre, key action in the middle, nothing important in roughly the top and bottom 15% where app buttons and captions cover it. Render a sheet at 4 times from the demo and show me before we storyboard.
There’s no resolution flag, so vertical means changing code: Claude swaps the three hard-coded 1920×1080 values, fixes landscape-only coordinates and recomposes for a tall frame. Do it before the storyboard.
LICENSE and copyright notices in your code.Song: "I'm Upping My P(doom)". Lyrics by osmarks, MusicPerson & the EleutherAI Discord (original Udio version, 2024); Claude-Pop version by @slimer48484 (Suno). Animation made with Claude Opus 5.5 in Claude Code using ClaudeAnimationBase by John Heibel (MIT) — github.com/JohnHeibel/ClaudeAnimationBase
Using your own song? Replace the first line with its title, writers and generator.
44 remixes, covers, answer songs and tools so far, plus the originals they riff on. Nine favourites below, each credited and linked to where it lives. We don’t re-host anything.
17 scene “plates” with word-level lyric sync. The repo now has more GitHub stars than the original.
The most-viewed remake: one long spoken prompt, then Claude worked overnight.
via Grok search, unverifiedNew lyrics built on real AI-safety incidents, with sources listed under the video. Inspired by Josh Thor and John Heibel.
The Suno re-sing of the 2024 original. Almost every video here uses this audio.
The same lyrics flipped into a vocal-trance track.
The hopeful sequel: same energy, the number goes the other way.
The song turned inside out, aimed at “your doomer friend”.
The starter kit this guide uses: Clawd with 31 emotions plus the animation guide.
Describe a concept and Claude storyboards and renders your own p(doom) video, on your machine.
The song is a dense stack of AI-safety in-jokes. “P(doom)” is someone’s personal estimate of the chance that AI ends badly, and each chorus is a new reason to raise it. Six lines worth decoding, following the lyricist’s own notes:
“sparks of AGI in your eyes”
osmarks points to Microsoft Research’s 2023 paper “Sparks of Artificial General Intelligence”, which argued GPT-4 showed early signs of general intelligence. The rest is a love-song cliché.
“Trapped in the Chinese room”
Searle’s 1980 thought experiment: following symbol rules isn’t the same as understanding. The “bag of shrooms” that follows means, per osmarks, simply “general confusion”.
“One E thirty flops a second”
1e30 floating-point operations per second, far beyond any real computer. osmarks says it isn’t about any specific regulation, just the huge amounts of compute thrown at AI, and that only “twenty” or “thirty” scanned.
“Without a single cdr”
Lisp’s cdr (“the rest of the list”), the language of old symbolic AI and expert systems: the new AI arrived without it. osmarks rhymed it with “are” without knowing it’s usually said “could-er” (“I don’t write Lisp”).
“Killswitch guys on PTO”
The satirical 2023 “killswitch engineer” job ad: the people paid to unplug the AI are on paid time off. It’s “guys”, plural, in osmarks’ canonical lyrics.
“What did Ilya see?”
Per osmarks, Ilya Sutskever quit OpenAI after the November 2023 board coup, which was possibly prompted by the discovery of chain-of-thought RL training (the road to o1), then left to found a superintelligence company. What he saw, we’ll never know.
Plain-English meanings for the words the song throws at you.
Lyrics: osmarks, MusicPerson et al. (with lines from the EleutherAI Discord and from Claude on the outro and final chorus). We quote short lines only. The explanations follow osmarks’ own line-by-line notes: read the full, authoritative version at “P(Doom) Song Objectively Correct Interpretation”.
The music video osmarks officially endorses is Dmytro’s 2024 “P(doom)”, not any of the 2026 remakes.