- GLSL 47.2%
- C 42.3%
- Assembly 4.6%
- Makefile 2.2%
- Python 1.7%
- Other 2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
La fiche d'aurore et la section Videos indiquent maintenant « Mistral Large 4 (mistral-large-4) via Mistral Vibe » au lieu du seul nom de l'agent, comme pour Claude Opus 5.5. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai> |
||
| amiga | ||
| shaders | ||
| src | ||
| tools | ||
| vibedemos | ||
| .gitignore | ||
| AGENTS.md | ||
| Makefile | ||
| README.md | ||
KILOBYTE CINEMA
Real-time 3D films that fit in a few kilobytes.
No video, no textures, no models, no audio files: every pixel and every note is computed while the program runs.
▶ Watch on PeerTube · Build & run · How it works · Amiga 500 version
The vibedemos
sea
A dive from the surface down to the abyss: reef, jellyfish, then the darkness of the deep. ▶ Watch · generated with Claude Opus 5.5 |
orbit
Chrome spheres and neon rings turning step by step on the beat, above a mirror floor. ▶ Watch · generated with Claude Opus 5.5 |
forge
A torch-lit vaulted corridor, a round hall, a stone sphere floating above a lava pit, circled by iron rings engraved with runes. ▶ Watch · generated with Claude Opus 5.5 |
abyme
orbit, nested inside itself: every sphere carries six scaled-down copies of the whole system, light bounces between them, and the camera dives endlessly from one satellite into the next. ▶ Watch · generated with Claude Opus 5.5 |
vertige
abyme above an ocean of mercury, under a nebula and a ringed gas giant. Brushed chrome, gold and anodized panels; every kick drum sends waves across the mercury. ▶ Watch · generated with Claude Opus 5.5 |
vertige · Amiga 500
The same vibedemo on a stock 1987 Amiga 500 (68000 at 7 MHz, 512 KB), booting from its own floppy. Rings drawn by the blitter, mercury and mirrors made by the copper. ▶ Watch · generated with Claude Opus 5.5 |
redline
A night race: starting lights, wet asphalt, a neon tunnel, a slow-motion breath, then nitro all the way to the checkered flag. The engine sound is synthesized too. ▶ Watch · generated with Claude Opus 5.5 |
mime
A mime alone under a theatre spotlight, pulling faces in time with a waltz played on music box, piano and strings. A face sculpted from formulas, down to the skin grain and the wrinkles. ▶ Watch · generated with Claude Opus 5.5 |
atlas
A continuous flight through nine worlds, sixteen seconds each: ocean at dawn with islands and sailboats, desert with pyramids, sunset forest, city at night with flying cars, ice canyon, temple on the water, asteroid field, floating islands, and a final climb toward the sun. ▶ Watch · generated with Claude Opus 5.5 |
drone
The nine worlds of atlas seen from a drone: fast runs skimming the scenery, climbs that reveal the landscape, dives and orbits around a monument — two eight-second shots per world, cut on the beat. ▶ Watch · generated with Claude Opus 5.5 |
aurore
A polar night over a frozen fjord: aurora borealis curtains mirrored in a still lake, snow mountains under the moon, the milky way and falling snow, and a lone cabin with warm windows and chimney smoke. A keyframed camera glides from the shore, circles the cabin, rises over the lake and ends looking up at the sky. Generated with Mistral Large 4 (mistral-large-4) via Mistral Vibe. |
What is this?
A vibedemo: a demo-like piece produced with a language model, kept distinct from demoscene demos. It is a program that plays an audiovisual piece on its own, from start to finish, computing everything in real time. The challenge is to make it beautiful with as few bytes as possible.
| Platform | Linux x86_64, OpenGL 3.3, SDL2 |
| Size | each vibedemo is a single executable of under 100 KB (512 KB allowed for abyme and vertige, which use 27 and 35; under 8 KB for the 8k vibedemos atlas and drone, which use 5 and 6) |
| External files | none: no textures, models, shaders or music next to the binary |
| Determinism | everything follows the music clock, so every run is identical |
| Duration | 2 to 2:30, then the vibedemo exits on its own |
How it works
┌──────────────────────── one executable ────────────────────────┐
│ │
│ synth.c ──► stereo music rendered into memory at startup │
│ │ │
│ ▼ music clock (bars, beats, kick envelope…) │
│ │
│ scene.frag ──► raymarched SDF scene ──► post.frag ──► screen │
│ (minified GLSL embedded as C strings) │
└────────────────────────────────────────────────────────────────┘
- Images: each scene is a fragment shader drawn on a single full-screen triangle. Shapes are signed distance fields (mathematical formulas, not meshes), lit and reflected by raymarching. A second shader handles glow, color grading and fades.
- Sound: a small synthesizer in C (oscillators, filters, envelopes, drums) renders the whole track at startup from a score written in code. The 8k vibedemos (atlas, drone) synthesize the music on the GPU instead: a fragment shader fills a texture, one stereo sample per pixel.
- Sync: the visuals read the audio playback position, never a frame counter. Camera cuts, ring rotations, waves and facial expressions land exactly on the beat.
- Size: shaders are minified and embedded, the binary is built with
-Os, garbage-collected sections andstrip.
Build & run
You need gcc, make and the SDL2 / OpenGL development headers.
make release # build/vibedemo-<name>: one file per vibedemo, ready to ship
make size # size of each binary and remaining margin
./build/vibedemo-vertige # fullscreen; -w for a window, Esc to quit
During development:
make run D=orbit # dev build in a window (sea, orbit, forge, abyme, vertige, redline, mime, atlas, drone)
No headers on your machine? Build in a container and run on the host, which only needs the SDL2 and OpenGL runtime libraries:
podman build -t vibedemo-build -f tools/Containerfile .
podman run --rm -v "$PWD":/src:Z vibedemo-build make release
./build/vibedemo-orbit
(With docker, replace podman with docker and add -u "$(id -u):$(id -g)" to run.)
vertige on the Amiga 500
amiga/ contains a port of vertige to a stock Amiga 500: 68000 CPU at 7 MHz, OCS chipset, 512 KB of chip memory. It is written in C and 68000 assembly and comes out as a bootable floppy image, amiga/build/vertige.adf, that starts without any operating system, like the demos of the era.
Raymarching is out of reach for a 68000, so every effect was rebuilt with the Amiga's custom chips:
| vertige on PC | vertige on Amiga 500 |
|---|---|
| raymarched neon rings, nested satellites | wireframe rings drawn by the blitter, three nesting levels |
| ocean of mercury, waves on the kick | the copper picks which image line to show on each scanline: reflection, ripples, swell on the kick |
| mirror ceiling, multiple reflections | the same line table folded onto itself, nothing is redrawn |
| nebula, stars, gas giant | dithered noise with per-line colors from the copper |
| synthesized stereo music | synthesized at boot, played on Paula's four 8-bit voices |
cd amiga && make # needs m68k-linux-gnu-gcc, make, perl
fs-uae --amiga_model=A500 --floppy_drive_0=build/vertige.adf
See amiga/README.md for WinUAE, real hardware and technical notes.
Videos
The videos on the channel are produced by the repository itself. Each entry credits the language model that generated its vibedemo, matching the Co-Authored-By trailers in the git history: Claude Opus 5.5 for sea, orbit, forge, abyme, vertige (and its Amiga 500 port), redline, mime, atlas and drone; Mistral Large 4 (mistral-large-4, via Mistral Vibe) for aurore.
make video # build/video/<name>.mp4 for every vibedemo, plus amiga-vertige.mp4
make video V=orbit # just one
Everything runs inside a container (podman or docker), so there is nothing else to install. PC vibedemos are rendered offline, frame by frame, so the 1080p60 output is perfectly smooth on any machine. If /dev/dri exists (Intel or AMD GPU with Mesa drivers), rendering uses the GPU; otherwise it falls back to software rendering, which is much slower. GPU=0 forces software rendering. The Amiga version is captured from FS-UAE at 50 fps PAL.
Repository layout
src/ shared engine: main loop, SDL/GL setup, audio sync
shaders/ full-screen triangle vertex shader
vibedemos/<name>/ one folder per vibedemo: vibedemo.h, synth.c, scene.frag, post.frag
atlas and drone (8k engine): vibedemo.h, music.frag, scene.frag
amiga/ vertige for Amiga 500
tools/ shader embedding/minification, build and video containers
Adding a vibedemo is as simple as copying a folder in vibedemos/: the Makefile picks it up on its own. Guidelines for contributors are in AGENTS.md.
Made with C, GLSL, 68000 assembly and a lot of byte counting. Kilobyte Cinema on PeerTube