Artwork generator

The server draws every image with a real PHP algorithm and GD: millions of points of chaotic attractors, the silk threads of damped pendulums, drifting particles, contour lines of imaginary terrain. Pick a pattern and a palette, step the seed, or ask for a surprise - the link brings back the exact same image.

Pattern

Strange attractor: the orbit of a single point over millions of steps, with a density histogram and logarithmic tone mapping.

Palette
Size
Wallpaper and poster
Detail
Server-rendered procedural artwork generated with PHP GD - Attractor, Cosmic, seed 385101118

seed 385101118

Hand-picked pattern, palette and seed combinations. Click one and the server redraws it live.

How are these images made?

Every image is the run-time result of a mathematical rule: the same rule with a different seed always gives a different but related image. The computation runs entirely on the server, in PHP (with GD) - the browser only receives the finished PNG.

Attractor, Harmonograph and Flow field aren't made of individually drawn lines: we accumulate millions of points into a density histogram and map the counts to brightness logarithmically. That way faint veils and glowing cores are visible at the same time - the same principle as a long-exposure star photo. For the attractor, the seed yields several parameter candidates that are tested with a short probe run, and only a beautiful one is kept.

Nebula and Topography are built on simplex noise that is pushed around by another noise field (domain warping) - that's what makes the shapes swirl and flow like rivers. The contour lines come from the marching squares algorithm, the shading from the surface normal and an imaginary light source.

Colors are blended in the OKLab color space, which is perceptually uniform, so gradients stay saturated instead of turning grey. The final touches (supersampled anti-aliasing, bloom, vignette and film grain) are all native GD operations, without a per-pixel PHP loop.

The preview is a fast, low-resolution render with a fraction of the iterations, which is why it appears almost instantly; the full image follows. Every numeric input is clamped, size and iteration counts have hard upper limits, and the endpoint is rate limited.