Agent swarm
Thirteen thousand agents moving through a single curl-noise flow field. The curl of a noise field is divergence-free, so the agents circulate instead of collapsing into sinks, which is what makes it read as flow rather than drift. Move your cursor through it.
How it works
Each agent holds a fixed seed position, and its displacement is evaluated analytically from that seed plus time. Nothing is stored between frames: no ping-pong render targets, no simulation state. The whole swarm is one draw call, and the same seed produces the same frame on any device at any resolution.
Running it well
Point sprites are fill-bound, so phones get a quarter of the agents and a hard pixel-ratio clamp rather than the same scene shrunk down. Rendering stops when the tab is hidden or the canvas scrolls out of view, and prefers-reduced-motion renders a single static frame with no animation loop started at all.
Inspect it
Add ?debug=field to paint flow speed instead of the brand palette, or ?seed=7 to reseed the swarm. Both are deterministic.