Work / FluidSim
FluidSim
Data paintings: an archive of images is learned into a latent space, and a walk through that space is poured into a GPU fluid as paint and force.
What it does
An image archive is reduced to a latent space by principal component analysis. A slow walk through that space is decoded every frame on the GPU, and the decoded dream becomes both the pigment and the force field of a WebGPU fluid. The result is glossy, folding relief paint threaded with luminous fibres. Each work is a small file covering the dream, flow, matter, camera, light and look. Live wind data for a chosen city can steer the whole field.
- Pick a work or drop in an image archive
- The browser learns the archive's latent space
- A seeded walk drifts through that space
- Each decoded frame pours paint and force into the GPU fluid
- Present full screen, record, or export a still
- Render a master offline at the film tier
How it works
The latent space is learned in the browser from the archive's own pixels: no network model runs at view time. The bundled Nature Dreams archive was generated locally. The fluid is advected, vorticity-confined and pressure-projected in WGSL, and the pigment carries its own height, so it renders as lit relief on a wall or as a floating sculpture. The live view adapts to the GPU: it lowers its resolution, then its fibre count, until frames keep up, and never queues a frame behind a slow one. A film tier renders the same work offline at far higher resolution, frame by frame, for prerendered masters. The earlier emitter studio and the solver lab are still reachable, but neither is the front door any more.
Skills shown
- AI, agents & ML
- Principal component analysis turns an image archive into a latent space whose walk is decoded on the GPU.
- Testing & QA
- Vitest for the latent maths and Playwright real-Chrome checks of every control, export and recording.
- Frontend, 3D & graphics
- A WebGPU fluid and relief renderer written in WGSL, driven by a latent space learned in the browser.
Worth knowing
- The dream is a principal-component walk through a learned image archive, decoded on the GPU every frame.
- The decoded image is both paint and force: it pours pigment and steers the fluid that carries it.
- Drop in your own images or folder and the browser learns a new archive from them.
- An offline film tier renders prerendered masters far beyond real time; the demo here is cut from one.