No description
  • GLSL 47.2%
  • C 42.3%
  • Assembly 4.6%
  • Makefile 2.2%
  • Python 1.7%
  • Other 2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Solène RAPENNE 4d381badc4 readme : précise le modèle derrière Mistral Vibe pour aurore
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>
2026-11-07 18:24:17 +00:00
amiga readme : assume le terme « vibedemo », restaure le sens historique des démos 2026-11-07 18:17:06 +00:00
shaders Ajoute les démos orbit et forge, moteur partagé entre démos 2026-11-06 18:56:23 +00:00
src Renomme « demo » en « vibedemo » dans tous les textes et chemins 2026-11-07 18:14:45 +00:00
tools Renomme « demo » en « vibedemo » dans tous les textes et chemins 2026-11-07 18:14:45 +00:00
vibedemos Renomme « demo » en « vibedemo » dans tous les textes et chemins 2026-11-07 18:14:45 +00:00
.gitignore Première version de la démo sous-marine 2026-11-06 17:27:13 +00:00
AGENTS.md readme : assume le terme « vibedemo », restaure le sens historique des démos 2026-11-07 18:17:06 +00:00
Makefile Renomme « demo » en « vibedemo » dans tous les textes et chemins 2026-11-07 18:14:45 +00:00
README.md readme : précise le modèle derrière Mistral Vibe pour aurore 2026-11-07 18:24:17 +00:00

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

sea

27 KB · 2:30 · 120 BPM dub techno

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

orbit

27 KB · 2:00 · 140 BPM techno, A minor

Chrome spheres and neon rings turning step by step on the beat, above a mirror floor.

▶ Watch · generated with Claude Opus 5.5

forge

forge

27 KB · 2:00 · 128 BPM gothic industrial, E Phrygian

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

abyme

27 KB · 2:00 · 140 BPM techno, A minor

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

vertige

35 KB · 2:00 · 140 BPM techno, A minor

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 on Amiga 500

vertige · Amiga 500

24 KB · 2:00 · 4 voices, 8 bits

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

redline

35 KB · 2:01 · 174 BPM drum and bass, A minor

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

mime

34 KB · 2:24 · soft waltz, D minor

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

atlas

5 KB · 2:24 · 120 BPM house

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

drone

6 KB · 2:24 · 120 BPM house

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

29 KB · 2:13 · 72 BPM ambient, A minor

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 and strip.

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