

Each animation was built at its full native size — 5184 × 1920 pixels — inside a custom p5.js framework designed for deterministic output. To sync any real-time (25 fps) animation adjustments with the later and much slower (~3 fps) PNG output, all parameter changes were recorded to file and automatically replayed as the system rendered the individual frames. This ensured a precise match between the live creative process and the final exported sequences.
Beneath the surface, the animations used a mix of Perlin noise, particle advection, and procedural wave behaviour to generate smooth, organic motion for large-scale LED playback.








