Happy Birthday to Me (Self-Supervised): a riso-print music video for AlexNet's 14th birthday, made with local open models and Claude
JavaScript
1
13 commits
updated Sep 29, 2026

A music video for deep learning's 14th birthday. On September 30, 2012, AlexNet was submitted to ImageNet and won with a 15.3% top-5 error; the runner-up had 26.2%. Lexi (Alex·Net → Lexi) is that kid at 14: bratty, brilliant, labeling everything. In 3 minutes and 14 seconds she recaps fourteen years of AI, from two GTX 580s to the Nobels, until the last line turns the detection box on you.
▶ Watch: premieres on YouTube on Sept 30, 2026.
Made on one RTX 3090 with a $0 budget, using open models, by Lino Valdovinos and Claude Opus 5.5 (in Claude Code).

| Stage | Tools | Where |
|---|---|---|
| Song | Suno (final). Style exploration with ACE-Step 1.5, MiniMax Music 3, YuE2 | music/ |
| Timing | word-level lyric alignment (faster-whisper) + a librosa beat grid | scripts/align_lyrics.py, video/timing/ |
| Pictures | Qwen-Image 2.1: one riso plate per lyric beat, sticker sheets, background removal, real-person portraits from photos | video/plates/, video/assets/ |
| Motion | LTX-2.3 image-to-video, trimmed and retimed per clip | video/plates/run_ltx.sh, video/animation/src/riso/cuts.js |
| Lip sync | InfiniteTalk on Wan 2.1, driven by vocal stems | video/plates/run_lipsync.sh |
| Compositor | RISO LIVE: two canvas layers plus a WebGL risograph shader (four inks, halftone screens, misregistration on the downbeat), rendered frame by frame in headless Chrome | video/animation/ |
Every frame is a pure function of time, so any moment can be re-rendered and reviewed on its own. The full write-up is in video/PIPELINE.md; the shot plan is in video/STORYBOARD.md.
You need: a 24 GB GPU (built on an RTX 3090, Windows 11), roughly 80 GB for model weights, Node, Python, FFmpeg, Chrome, ComfyUI, and Claude Code.
The easy way: clone the repo, open Claude Code in it, and say:
Read README.md and video/PIPELINE.md. Set up this pipeline on my machine, then help me make a music video for my song.
It sets up ComfyUI and the models, and walks through the steps below with you. That's how this video was made: one long conversation, with critic subagents reviewing every pass.
The steps:
music/, with legibility scored by faster-whisper). For the best final audio quality, generate the finished song with Suno; use a paid plan if you want to monetize it. Put your track in video/animation/assets/, then align the lyrics and beats (scripts/align_lyrics.py, into video/timing/); that data becomes src/song.js.video/workflows/qwen21_*) and cut out sticker poses (video/assets/split_sheet.py).video/plates/plates.py and generate them with run_plates.sh. Targeted fixes go through fix_plates.py.run_ltx.sh per plate and extract_clips.sh, then trim the wonky parts in cuts.js.video/animation/src/riso/scenes/*.js. Review any moment with node render.mjs --sheet=12.5,31.8 --grid.FRESH=1 bash video/make_final.sh my-video to get the master, a 1080p share copy and a 720p copy.Run GPU jobs one at a time (video/gpu_queue.sh). Overlapping heavy jobs crashed this machine once.
Model weights (download into ComfyUI's models/):
Exact filenames are in video/workflows/*.json.
refs_attribution.json.For Alex, Ilya & Geoff, and everyone who labeled ImageNet.
JavaScript
69.8%
Python
20.5%
PowerShell
4.4%
Shell
2.2%
HTML
1.6%
CSS
1.4%
Happy Birthday to Me (Self-Supervised): a riso-print music video for AlexNet's 14th birthday, made with local open models and Claude
JavaScript
1
13 commits
updated Sep 29, 2026

A music video for deep learning's 14th birthday. On September 30, 2012, AlexNet was submitted to ImageNet and won with a 15.3% top-5 error; the runner-up had 26.2%. Lexi (Alex·Net → Lexi) is that kid at 14: bratty, brilliant, labeling everything. In 3 minutes and 14 seconds she recaps fourteen years of AI, from two GTX 580s to the Nobels, until the last line turns the detection box on you.
▶ Watch: premieres on YouTube on Sept 30, 2026.
Made on one RTX 3090 with a $0 budget, using open models, by Lino Valdovinos and Claude Opus 5.5 (in Claude Code).

| Stage | Tools | Where |
|---|---|---|
| Song | Suno (final). Style exploration with ACE-Step 1.5, MiniMax Music 3, YuE2 | music/ |
| Timing | word-level lyric alignment (faster-whisper) + a librosa beat grid | scripts/align_lyrics.py, video/timing/ |
| Pictures | Qwen-Image 2.1: one riso plate per lyric beat, sticker sheets, background removal, real-person portraits from photos | video/plates/, video/assets/ |
| Motion | LTX-2.3 image-to-video, trimmed and retimed per clip | video/plates/run_ltx.sh, video/animation/src/riso/cuts.js |
| Lip sync | InfiniteTalk on Wan 2.1, driven by vocal stems | video/plates/run_lipsync.sh |
| Compositor | RISO LIVE: two canvas layers plus a WebGL risograph shader (four inks, halftone screens, misregistration on the downbeat), rendered frame by frame in headless Chrome | video/animation/ |
Every frame is a pure function of time, so any moment can be re-rendered and reviewed on its own. The full write-up is in video/PIPELINE.md; the shot plan is in video/STORYBOARD.md.
You need: a 24 GB GPU (built on an RTX 3090, Windows 11), roughly 80 GB for model weights, Node, Python, FFmpeg, Chrome, ComfyUI, and Claude Code.
The easy way: clone the repo, open Claude Code in it, and say:
Read README.md and video/PIPELINE.md. Set up this pipeline on my machine, then help me make a music video for my song.
It sets up ComfyUI and the models, and walks through the steps below with you. That's how this video was made: one long conversation, with critic subagents reviewing every pass.
The steps:
music/, with legibility scored by faster-whisper). For the best final audio quality, generate the finished song with Suno; use a paid plan if you want to monetize it. Put your track in video/animation/assets/, then align the lyrics and beats (scripts/align_lyrics.py, into video/timing/); that data becomes src/song.js.video/workflows/qwen21_*) and cut out sticker poses (video/assets/split_sheet.py).video/plates/plates.py and generate them with run_plates.sh. Targeted fixes go through fix_plates.py.run_ltx.sh per plate and extract_clips.sh, then trim the wonky parts in cuts.js.video/animation/src/riso/scenes/*.js. Review any moment with node render.mjs --sheet=12.5,31.8 --grid.FRESH=1 bash video/make_final.sh my-video to get the master, a 1080p share copy and a 720p copy.Run GPU jobs one at a time (video/gpu_queue.sh). Overlapping heavy jobs crashed this machine once.
Model weights (download into ComfyUI's models/):
Exact filenames are in video/workflows/*.json.
refs_attribution.json.For Alex, Ilya & Geoff, and everyone who labeled ImageNet.
JavaScript
69.8%
Python
20.5%
PowerShell
4.4%
Shell
2.2%
HTML
1.6%
CSS
1.4%