Generative art is all about designing systems and letting those systems create the art. Different generative artists might define it in their own ways. Some see the system itself as the art, while others view the generated pieces as the art. Some might consider themselves the artist, while others might see the computer as the artist. There’s also a group I would call `parametric artists’, where people take an existing generative project and tweak the parameters until they get the desired output.
I see generative art as a unique blend of traditional art concepts with an element of randomness that’s hard to replicate with traditional media. It’s a balancing act between algorithmic precision and adding enough unpredictability to keep things interesting.
Curation is a big part of generative art as well. I often write programs that run overnight, generating images. In the morning, I sift through them to find the ones I like, sometimes using randomised parameters in the filenames to make sorting easier.
Some might want to compare it to AI art, but that is different to generative art. Recently, generative AI has become more common, and many people are calling their work ‘generative art’. While I think these are two different things, I understand why AI art falls under the same term. Both involve working with generative systems, but it’s important to distinguish between them.
We might start using new terms like procedural or algorithmic artists for traditional generative artists, and AI artists, parametric artists or prompt engineers for those working with AI. But for now, they all fall under the umbrella of generative art.

‘Here’s what you could have won!’: Some more of Hayden’s artowrk.
About the artist
I’ve always had a passion for digital art and using computers in creative ways, exploring systems that behave uniquely. My journey into coding began in primary school when my older brother introduced me to GameMaker. From there, I started experimenting with fun little projects, often creating old-style roguelike games in my free time.
My shift to generative art happened in secondary school when I discovered Daniel Shiffman’s YouTube channel. I learned about the Processing library for Java and began making simulations. My friends and I would sit in the back of our physics class, writing simulations for each new concept we learned. Eventually, I started exploring more abstract routes, creating simulations related to gravity and objects interacting with each other. My first true generative art projects involved making strange attractors and re-implementing flocking algorithms.

The Lorenz attractor is perhaps the best-known example of a strange attractor
Over time, I discovered many generative artists who continue to inspire me, including Ben Kovach, Daniel Shiffman and Tyler Hobbs. Their talks and pieces available online have been a significant source of inspiration. This is not really inspired by any particular thing or work, but I wanted to pick a topic that comes up in a lot of fields, or even in a lot of different generative art projects. I wanted to make something where I wasn’t combining too many different ideas, that way the main focus of Voronoi diagrams could be seen easily.
While my Instagram page has been fairly inactive since I started teaching and attending grad school, I hope to become more active in sharing my work. My future aspirations include continuing to explore the intersection of art and technology, creating more generative art projects and inspiring others to find creativity in coding.
Voronoi diagrams
Voronoi diagrams are one of the more commonly used tools in a generative artist’s toolbox. Generative artists often aim to mimic organic patterns, and Voronoi diagrams are excellent for this purpose. They can approximate many natural forms, from the patterns on a giraffe’s coat to the structure of plant cells. I find it fascinating whenever we see such close relationships between maths and nature.
A Voronoi diagram is a way of dividing space into regions based on distance to a specific set of points. Each point has a corresponding region consisting of all locations closer to that point than to any other. These regions are called Voronoi cells.
Given a set of points, the Voronoi diagram can be constructed like so:
- Start with a set of points;
- For each point, determine the region of space that is closer to it than to any other point. This involves finding the perpendicular bisectors of the lines between each pair of points;
- The intersection of these bisectors forms the edges of the Voronoi cells.
Additionally, I’m showcasing another concept on the cover closely related to Voronoi diagrams: Delaunay triangulations. This is a way of connecting a set of points to form triangles such that no point is inside the circumcircle of any triangle. Given a set of points, the Delaunay triangulation can be constructed like so:
- Start with a set of points;
- Connect the points to form triangles such that the circumcircle of each triangle does not contain any other points.
A Delaunay circle is the circumcircle of a triangle in the Delaunay triangulation. It is the circle that passes through all three vertices of the triangle. The property of Delaunay triangulation ensures that no other points lie inside these circumcircles.
The Voronoi diagram and Delaunay triangulation are duals of each other. This means that the vertices of the Voronoi diagram correspond to the faces of the Delaunay triangulation and vice versa. You can construct the Voronoi diagram from the Delaunay triangulation by connecting the circumcentres of the Delaunay triangles.
These diagrams have significant applications in various fields, including computer science, geography, biology and urban planning. They help solve proximity problems, such as finding the nearest neighbour, and are used in spatial analysis, map overlay and network planning. In computer graphics, Voronoi diagrams can be used to generate realistic textures and simulate natural phenomena.
Voronoi patterns are found in nature, such as in the distribution of seeds in a sunflower or the pattern of cracks in drying mud. Some of my favourite example use cases include shattering patterns, creating paths that avoid obstacles, and even applying machine learning techniques like $k$-means clustering.

Example of Delaunay constructions.
Behind the scenes
Most of my projects follow an iterative process. I start by writing code that defines a system, then make random changes, experiment with different colour schemes, and tweak parameters to achieve the desired outcome. Here, I use p5.js, a JavaScript version of the Processing library, which allows me to add buttons and interactive elements easily. This makes it simple to tweak and modify the artwork live.
In this project I draw a few separate layers and stack them on top of each other to make a composite image. It takes a set of points to generate the Voronoi diagram and then takes it from there. The software allows me to apply a blur effect and a threshold to layers. It takes a buffer and the name of the layer as inputs. The function first applies a Gaussian blur, then iterates through each pixel to adjust the alpha value based on a threshold. This process helps generate more natural curves in the drawing.

Without blur or threshold, some blur but a threshold at 0, and finally some blur and threshold applied.
In graphics programming, we often work with a one-dimensional array of pixels. Each pixel is represented by four consecutive values (red, green, blue, $\alpha$); by iterating through this array and adjusting the $\alpha$ values, we can create smooth transitions and define edges more clearly.
I am sure there are much faster ways to do this with shaders, but I tend to stick to whatever tools are built in to what I am using. We can see the effects of this by increasing the blur amount for our Voronoi edge layer (see above). This allows us to get much more organic shapes.
This can be applied to many different layers in different ways, including the triangulation. Since the Delaunay triangulation is the dual graph of our Voronoi diagram, the vertices should be inside each tile. Additionally, the vertices should be darker and less likely to disappear when we blur and threshold them. This will cause star-like shapes to form inside each tile (see below).

Adding blur and threshold distorts the dual graph.
The same can be done for other layers until we have a cohesive image. I also colour in the tiles randomly, pulling from a predefined colour scheme.

Adding some colour to the tiles and a drop shadow completes the work.
The last thing I do is add a drop shadow to make some layers stand out a bit or make it more interesting. The shadows are made by copying the layer, blurring it, and setting the RGB values to be a consistent colour. Once the settings are fine, I generate a few iterations with the same settings, then pick the ones I like best. The variations you see below are all generated with the same parameters.