Experiments
Interactive pages from oaustegard/experiments. Each links its experiment's directory, where the writeup and code live. ↗ marks a page hosted elsewhere.
- Plumb ↗
Falling blocks for the phone: tilt to steer, tip to drop faster, jab to hard-drop, shake to hold; SVG well over a WebGPU dust field that pools under real gravity. Installable PWA
plumb - Raking Light ↗
Relights flat SVG on the GPU: paint order becomes a heightfield, compute passes add bevels and ambient occlusion, and Kelvin lights cast soft ray-marched shadows
raking-light - Refractometer
Sweeps WebGPU kernel configurations on your GPU, checks each against a JS reference, and saves the fastest per adapter with the performance cliffs around it
refractometer - Two Prisms
Five-band spectral audio processor in one WGSL dispatch: FFT, per-band compressor, gate, freeze and mute, inverse FFT, with a live waterfall and the GPU round trip measured against the block length
prism-audio - Bit-Plane Dispersion Scan
Exact int8 top-K search in WebGPU that reads the corpus one bit plane at a time and prunes candidates with provable bounds; compares results, survivor counts and bytes read against brute force
bitplane-scan - Self-painting SVG
Any picture becomes one SVG that sketches itself in charcoal, paints itself in and falls apart; built in the page, no JavaScript in the output
svg-timeline - Starry Night, painting itself
A traced Starry Night sketched, painted, taken to night and dawn, then dismantled on a 48 s loop: one SVG, CSS keyframes from a small timeline compiler, no JavaScript
svg-timeline - Live camera tagger
Point your phone camera at something: MobileCLIP-S0 on WebGPU tags each frame against 4,585 tags embedded ahead of time, with no text model in the page
live-tagger - Image to SVG in the browser
image-to-svg ported to the page: k-means in WGSL (JavaScript fallback), pixel-edge tracing and image-to-svg 1.9.0's compact output, all client-side
svg-in-browser - Warhol palette cycle
One traced cat drawn four times, cycling four palettes with @property colors and offset keyframes; 72 KB, no JavaScript
svg-palette-cycle - Navier–Stokes term by term
Interactive WebGPU explainer: the four terms, Reynolds number, vortex stretching, the Beale–Kato–Majda criterion and the 2026 forced blowup results
navier-stokes-explainer - EmbeddingGemma 2 search on WebGPU
EmbeddingGemma 2 q4 in the browser, with 2-bit remex codes and the corpus scan in WebGPU kernels on onnxruntime-web's own device
embeddinggemma2-webgpu-tail - EG2 query encoder in hand-written WGSL
Bench: the 4-layer EmbeddingGemma 2 query encoder run by a custom WebGPU engine against onnxruntime-web (WebGPU and wasm) on the same 25 MB model file
eg2-wgsl-engine - EG2 training targets on WebGPU
Embeds 110,605 query-shaped texts with EmbeddingGemma 2 on the browser's GPU and saves int8 shards, the training targets for a small query encoder distilled into EG2's space
eg2-query-student - Delegation skill map
14 agent and delegation skills compared: frontmatter, boundaries, a decision path and cut candidates
delegation-skill-map - The Second Sky ↗
140 constellations of an invented people, drawn on the real stars by 1,843 Haiku calls
second-sky - Latent Calculator
A frozen SmolLM2-135M doing arithmetic through a calculator wired between its layers, in the browser
latent-calculator - Latent Calculator demo
Explainer page: how the operands are read from layer 16 and the result written back
latent-calculator - In-browser taxonomy classifier
gte-small snaps free text onto Wayfair's 860 WANDS product classes, with no server
hypothetical-classification - Snooker Break Simulator
Break simulator: the traditional apex strike against Murphy's third-red break
snooker-break - Procedural Lion
A cartoon lion rebuilt procedurally in three.js, with about 3,000 swept-tube hair strands
threejs-lion - Geezer Goon
Animated music video for the Wednesday-ride song, driven by the ride's real Strava data
geezer-goon-video - Strudel FM, before and after
The Strudel FM lead before and after its melody rewrite, with seeded variants
before · after · before-seeded · after-seeded
strudel-fm-melody - A Growth Race for Erdős–Gyárfás
Research note with partial results on an open problem in graph theory
erdos-gyarfas - KB Packer ↗
Build a portable knowledgebase skill in the browser
kb-packer-web - X-ray glasses ↗
Point the camera at a person, cat or dog: MediaPipe Pose or RTMPose (AP-10K) finds the joints and a WebGPU shader draws a fitted skeleton over a radiograph view of the feed, all on the device
xray-glasses - GPU Bridge
Runs WebGPU jobs that Claude Code sessions push to a private GitHub repo on this machine's GPU, commits the results back and wakes the session
gpu-bridge