Projects
Runnable experiments in machine learning and graphics, most have a live interactive demo!
-
A 3D Gaussian Splatting rasterizer written from scratch in CUDA. EWA projection, tile duplication, a 64-bit depth sort, and per-tile compositing straight into an OpenGL texture.
-
The splat before any of the training. Click to drop 2D gaussians, drag them around, and stretch the covariance by hand to see what the thing a splat renderer optimises actually looks like.
-
A whole sky's lighting squeezed into 16 coefficients per channel. Drag the band slider and watch an HDR environment map collapse into a soft gradient, running as WebAssembly in the browser.
-
A convolutional VAE against a diffusion transformer, same dataset. Generate from both and watch instant-but-blurry go up against slow-but-sharp.
-
The smallest VAE I could build, a 3D RGB through a 2D latent space. Click anywhere in the latent plane and the decoder turns the coordinate into a colour.
-
A class-conditional DDPM with a small FiLM-modulated U-Net. Pick a digit and watch the model denoise pure Gaussian noise into a handwritten sample.
-
A tiny DDPM trained on two concentric rings. Press generate and watch random noise denoise step-by-step into the original distribution.
-
A decoder-only transformer trained from scratch on years of WhatsApp messages. Give it a prompt and it generates text in the style of two friends chatting.
-
Two architectures, one task. Draw a digit and watch a flat MLP and a convolutional network race to classify it.
-
Binary classification on non-linearly separable concentric circles. Click the plot to query the decision boundary live.
-
A minimal MLP trained to approximate a parabola. Drag the slider to query the model live.