latent-variable/deep-learning-birthday

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

See the code

See what people are saying

SourceMessageScoreDate

AlexNet turns 14 today. Made deep learning a birthday music video using Opus 5.5 and local models (r/ClaudeAI)

Yup Opus 5.5 is amazing. It wrote a risograph compositor from scratch (two canvas layers + a WebGL shader, rendered frame by frame in headless Chrome), drove local image and video models through ComfyUI, and used critic subagents to review the cuts. Spend $0 dollars not couting the claude…

1

Sep 30, 2026

README

Happy Birthday to Me: Lexi, the SuperVision team and the labs, printed in riso ink

Happy Birthday to Me (Self-Supervised)

Lexi, jumping

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).

Nine frames from the video

How it's made

Lexi in sunglasses
StageToolsWhere
SongSuno (final). Style exploration with ACE-Step 1.5, MiniMax Music 3, YuE2music/
Timingword-level lyric alignment (faster-whisper) + a librosa beat gridscripts/align_lyrics.py, video/timing/
PicturesQwen-Image 2.1: one riso plate per lyric beat, sticker sheets, background removal, real-person portraits from photosvideo/plates/, video/assets/
MotionLTX-2.3 image-to-video, trimmed and retimed per clipvideo/plates/run_ltx.sh, video/animation/src/riso/cuts.js
Lip syncInfiniteTalk on Wan 2.1, driven by vocal stemsvideo/plates/run_lipsync.sh
CompositorRISO LIVE: two canvas layers plus a WebGL risograph shader (four inks, halftone screens, misregistration on the downbeat), rendered frame by frame in headless Chromevideo/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.

Make your own

Lexi singing

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:

  1. Song and timing. Iterate on style and lyrics locally with ACE-Step 1.5 (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.
  2. Look and character. Design a character sheet with Qwen-Image (video/workflows/qwen21_*) and cut out sticker poses (video/assets/split_sheet.py).
  3. Plates. Write one prompt per lyric beat in video/plates/plates.py and generate them with run_plates.sh. Targeted fixes go through fix_plates.py.
  4. Motion. Run run_ltx.sh per plate and extract_clips.sh, then trim the wonky parts in cuts.js.
  5. Compose. Write shots in video/animation/src/riso/scenes/*.js. Review any moment with node render.mjs --sheet=12.5,31.8 --grid.
  6. Render. Run 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/):

  • Qwen-Image 2.1 int8 + Qwen3-VL 8B text encoder
  • LTX-2.3 22B Q4_K_M GGUF, its distilled LoRA and x2 upscaler, plus a Gemma 3 12B text encoder
  • Wan 2.1 I2V 14B fp8 + InfiniteTalk + lightx2v LoRA

Exact filenames are in video/workflows/*.json.

Credits

Lexi laughing
  • Direction: Lino Valdovinos (@latent-variable).
  • Co-creation (lyrics, storyboard, code, animation engine, edit): Claude Opus 5.5.
  • Models and tools: Suno · ACE-Step · MiniMax Music 3 · YuE2 · Qwen-Image 2.1 · LTX-2.3 · InfiniteTalk · Wan 2.1 · ComfyUI · faster-whisper · librosa · p5.js · Puppeteer · FFmpeg.
  • Animation kit and inspiration: John Heibel's ClaudeAnimationBase and I'm Upping My P(doom).
  • Fonts (SIL OFL): Bricolage Grotesque · Instrument Serif · Silkscreen · Space Mono.
  • Portraits: redrawn from Wikimedia Commons photos, credited in refs_attribution.json.

For Alex, Ilya & Geoff, and everyone who labeled ImageNet.

License

  • Code and pipeline: MIT.
  • Illustrations, stickers and portraits: CC BY-SA 4.0.
  • The song is not included. It was made on Suno's free tier, so Suno owns it and allows personal, non-commercial use only. Bring your own track.
  • Real people and company logos appear as a fan tribute; names and logos belong to their owners, and nothing here is an endorsement.

latent-variable/deep-learning-birthday

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

See the code

See what people are saying

SourceMessageScoreDate

AlexNet turns 14 today. Made deep learning a birthday music video using Opus 5.5 and local models (r/ClaudeAI)

Yup Opus 5.5 is amazing. It wrote a risograph compositor from scratch (two canvas layers + a WebGL shader, rendered frame by frame in headless Chrome), drove local image and video models through ComfyUI, and used critic subagents to review the cuts. Spend $0 dollars not couting the claude…

1

Sep 30, 2026

README

Happy Birthday to Me: Lexi, the SuperVision team and the labs, printed in riso ink

Happy Birthday to Me (Self-Supervised)

Lexi, jumping

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).

Nine frames from the video

How it's made

Lexi in sunglasses
StageToolsWhere
SongSuno (final). Style exploration with ACE-Step 1.5, MiniMax Music 3, YuE2music/
Timingword-level lyric alignment (faster-whisper) + a librosa beat gridscripts/align_lyrics.py, video/timing/
PicturesQwen-Image 2.1: one riso plate per lyric beat, sticker sheets, background removal, real-person portraits from photosvideo/plates/, video/assets/
MotionLTX-2.3 image-to-video, trimmed and retimed per clipvideo/plates/run_ltx.sh, video/animation/src/riso/cuts.js
Lip syncInfiniteTalk on Wan 2.1, driven by vocal stemsvideo/plates/run_lipsync.sh
CompositorRISO LIVE: two canvas layers plus a WebGL risograph shader (four inks, halftone screens, misregistration on the downbeat), rendered frame by frame in headless Chromevideo/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.

Make your own

Lexi singing

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:

  1. Song and timing. Iterate on style and lyrics locally with ACE-Step 1.5 (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.
  2. Look and character. Design a character sheet with Qwen-Image (video/workflows/qwen21_*) and cut out sticker poses (video/assets/split_sheet.py).
  3. Plates. Write one prompt per lyric beat in video/plates/plates.py and generate them with run_plates.sh. Targeted fixes go through fix_plates.py.
  4. Motion. Run run_ltx.sh per plate and extract_clips.sh, then trim the wonky parts in cuts.js.
  5. Compose. Write shots in video/animation/src/riso/scenes/*.js. Review any moment with node render.mjs --sheet=12.5,31.8 --grid.
  6. Render. Run 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/):

  • Qwen-Image 2.1 int8 + Qwen3-VL 8B text encoder
  • LTX-2.3 22B Q4_K_M GGUF, its distilled LoRA and x2 upscaler, plus a Gemma 3 12B text encoder
  • Wan 2.1 I2V 14B fp8 + InfiniteTalk + lightx2v LoRA

Exact filenames are in video/workflows/*.json.

Credits

Lexi laughing
  • Direction: Lino Valdovinos (@latent-variable).
  • Co-creation (lyrics, storyboard, code, animation engine, edit): Claude Opus 5.5.
  • Models and tools: Suno · ACE-Step · MiniMax Music 3 · YuE2 · Qwen-Image 2.1 · LTX-2.3 · InfiniteTalk · Wan 2.1 · ComfyUI · faster-whisper · librosa · p5.js · Puppeteer · FFmpeg.
  • Animation kit and inspiration: John Heibel's ClaudeAnimationBase and I'm Upping My P(doom).
  • Fonts (SIL OFL): Bricolage Grotesque · Instrument Serif · Silkscreen · Space Mono.
  • Portraits: redrawn from Wikimedia Commons photos, credited in refs_attribution.json.

For Alex, Ilya & Geoff, and everyone who labeled ImageNet.

License

  • Code and pipeline: MIT.
  • Illustrations, stickers and portraits: CC BY-SA 4.0.
  • The song is not included. It was made on Suno's free tier, so Suno owns it and allows personal, non-commercial use only. Bring your own track.
  • Real people and company logos appear as a fan tribute; names and logos belong to their owners, and nothing here is an endorsement.

Languages

JavaScript

69.8%

Python

20.5%

PowerShell

4.4%

Shell

2.2%

HTML

1.6%

CSS

1.4%