Particle movement is calculated on the GPU using framebuffer ping-pong technique.
Movement is controlled by curl noise combined with rotation with varying parameteres that change over time, independently of each other, which creates endless combinations of values.
CRLN was built with THREE.js.
Full source code: szymonkaliski/CRLN.