3,856
stars
+13
426
forks
11
watchers
8
prs
2
issues
0
releases
0
discussions
README
I'm Upping My P(doom) — music video A generative, code-rendered music video with word-synced karaoke typography. Every frame is a deterministic function of song time, so the live preview in the browser and the offline 1080p60 (or 4K60) export are identical. Watch it in 4K on YouTube: https://www.youtube.com/watch?v=5EoO5413dBY The YouTube upload is a slightly outdated render. For the latest and best-quality version, render it locally (see Render the video). The video was made with Claude (Opus 5.5) in Claude Code: the concept and treatment, the lyric alignment and audio analysis, the renderer, every scene and the renders were all worked out in conversation with Claude. The song is not ours: see Credits for who wrote and made it. The concept, style bible and plate-by-plate treatment are in docs/TREATMENT.md. The engine and scene API are documented in docs/ENGINE.md. Layout - audio/pdoom.mp3 — the song (the Claude-Pop version, see Credits). - lyrics/lyrics.src.js — the original line-level lyrics (approximate timings). - analysis/ — Python (uv) tools that produced the timing data: Demucs stem separation, CTC forced alignment cross-checked with Whisper, beat/downbeat/onset analysis. See analysis/align.py and analysis/analyze.py. - data/lyrics.json — word-level (and some syllable-level) lyric timings. - data/audio.json — tempo (132.007 BPM), beats, downbeats, sections, drum/vocal onsets and loudness envelopes. - app/ — the renderer: TypeScript + three.js, bun + Vite. - src/engine/ — renderer core: timeline playback, post-processing (bloom, halation, grain), typography (Archivo, IBM Plex Mono, Cormorant Garamond, single-stroke plotter fonts), GPU line batches, HUD. - src/scenes/ — one module per plate (open, loss, prompt, hook, room, shoggoth, spacetime, ascent, bureau, leftturn, paperclips, fuse, stack, dense, loom, ilya, outro) plus shared motifs. - src/timeline.ts — the edit: scene windows anchored to lyric lines and snapped to the beat grid. - scripts/render.ts — offline renderer (headless Chrome → raw frames over WebSocket → ffmpeg). - out/ — renders (not in the repo). Requirements bun, Google Chrome (the offline renderer drives it headless through playwright-core) and ffmpeg with libx264. The analysis tools need uv; the renderer doesn't. Preview sh cd app bun install bunx vite Open http://localhost:5173 and use the keys below. ?t=23 starts at a given time. | Key | Action | |---|---| | space | play / pause | | ← / → | seek ±1 s (±5 s with shift) | | , / . | step one frame | | [ / ] | previous / next scene | | l | loop the current scene | | h | hide the UI | The preview renders in real time on a recent Mac. The export is not real time and is heavier. Render the video sh cd app bun scripts/render.ts video --samples auto --shutter 0.2 --out ../out/pdoom.mp4 - Output: 1920×1080 at 60 fps, x264 CRF 16, AAC audio. - Motion blur: every frame is the average of many sub-frames spread over a short shutter (--shutter 0.2, a fi