This painting runs a real fluid simulation on the GPU, and your browser doesn't offer the WebGL2 features it needs. The rest of the page still works — and the technique is described below.
Drag to pour ink. The water does the rest.
Every stroke you make pours dye and momentum into a real-time fluid simulation: a GPU solver for the incompressible Navier–Stokes equations, the same mathematics used in film effects and engineering, run small and fast in your browser. The curls and blooms are not drawn by hand — they emerge from advection and pressure, the way cream folds into coffee or dye blooms in a rock pool.
Each frame the solver advects the velocity field along itself (semi-Lagrangian backtracing), adds a touch of vorticity confinement to keep small whirls alive, solves for pressure with about twenty Jacobi iterations, subtracts its gradient so the water stays incompressible, and finally carries the dye along the corrected flow. All of it runs in WebGL2 fragment shaders writing to half-float textures — the dye at up to 1024 pixels across, the velocity field coarser, which is plenty for water this size.
Four ink sets from real intertidal life: Lagoon's sea-glass teals and foam, Anemone's coral and violet, Kelp's greens and gold, and Abyss — the blues and cyans of bioluminescent plankton. Save PNG downloads exactly what is on the canvas, at canvas resolution, with no watermark.
If you asked for reduced motion, the pool skips its opening swirl and waits for you; painting is always something you start yourself. The simulation pauses whenever this tab is hidden. On devices without the required WebGL2 support, the pool degrades to a still gradient and says so plainly.