Threat model

Thirty pieces about AI that writes code, and the security around it. Every pixel and every sound is made by code, with no image or video models, and each piece leads with a different web technology: from SVG and CSS 3D to WebGPU simulations, a language model running in your browser, and hand tracking through your camera.

Hands-on

Five ways to touch a page: your hands, a liquid, a fabric, a model you can talk to, and maths you can drag.

5 pieces

Vector and CSS

SVG and the browser’s own layout engine: animation elements, filters, generated geometry and 3D transforms.

4 pieces

Shaders and light

Programs that run once per pixel: light that bounces, geometry with no meshes, type as a rendering medium.

3 pieces

3D, physics and splats

Scene graphs, node materials for WebGPU, rigid bodies in WebAssembly, and Gaussian splats made from code.

4 pieces

Simulations and games

Thousands to millions of agents moved by noise fields, sensing rules or falling-sand chemistry.

3 pieces

Labs and explainers

An interactive cutaway you can take apart, and a fact-checked documentary short.

2 pieces

Painting and print

No image models: a woodblock print rendered live, and an oil painting made stroke by stroke in Python.

2 pieces

Models, data and proofs

A real classifier in the tab, the real catalogue of exploited vulnerabilities, and a page that verifies its own source.

3 pieces

Motion, type and sound

Storyboarded films, kinetic typography and soundtracks synthesised in the page.

4 pieces
No.PieceFamilyHow you engageNeeds

Screening room

Four pieces also exist as rendered films. Because every frame is a function of time, they were captured frame by frame in headless browsers or Python and stitched with ffmpeg.

How they’re made

The viral code-rendered work of autumn 2026 isn’t generated video. It’s code that paints frames, and it follows the same workflow every time. Every piece here does too. The research behind them is in the research notes, and all the code is on GitHub.

  1. Storyboard first

    Shots, timings, easing and palette are fixed before any drawing code. The films keep their storyboards as tables; the intro keeps its song as one.

  2. Frames are functions of time

    The same t always paints the same frame. Randomness is seeded and simulations replay from a seed, so any moment can be scrubbed to, tested or re-rendered.

  3. Check contact sheets

    A headless browser calls __seek(t) at chosen moments, on the real GPU, and saves images. Score them, list the three worst flaws, fix, render again.

  4. Capture and encode

    Independent frames render in parallel and ffmpeg stitches them, with audio rendered offline from the same synth code. The previews on this page were made the same way.

The tools, all in tools/:

# frames at any times, frame rates on the real GPU, the hover previews
node tools/shot.cjs pieces/02-zero-trust-mesh.html 1,4,8 --w=1440 --h=900
node tools/perf.cjs
node tools/previews.cjs
# the films and the painting
node tools/render-film.cjs --workers=4
node tools/render-intro.cjs
python3 tools/paint_vanitas.py
cd remotion && npm install && npm run render
# this page
python3 tools/build_index.py