I have always been very fascinated with flowers, these forms have appeared naturally and effortlessly in my sketches. It's remarkable how if you take four or five lopsided, elongated ellipses rotated around a center, the shape is universally recognized as a flower.
For the past few months, I've been working on something. Phoools is a generative art series of bouquets, where each flower exists through a sequence of ones and zeros. It's the result of months of research exploring organic, gestural forms with math and code.
What I do is called generative art - think of it like writing a recipe, give it to four people, they all make the dish. But change one thing - a pinch more salt, a minute less heat - and you get something new. That's generative art. You set the rules, but you don't control exactly what comes out. Its playing with the process rather than the end result, because the end result can be of infinite varieties.
My interest, however, lies not in the botanical aspects of flowers—their anatomy, flowering patterns, or pollination processes. Instead, I'm drawn to the motif itself—the gesture, the shared agreement that allows us to see and call this simple form, in all its variations, a flower, whether it's on a kid's drawing or an intricate tile. The idea of 'flower-ness'.
To truly do justice to the infinite variations of flower forms, I needed a medium that would allow me to break it down to its most fundamental level. Computation enables the discovery of possibilities beyond what I could have imagined. Nature itself is generative. Fundamental laws of physics, chemistry, and biology define our physical reality, from which all natural phenomena and beauty emerge.
At the core of it there are three ideas -
The petal shape - By taking any vector shape and adding slight randomness to its points, we can create an infinite combination of unique shapes. Revolving these shapes around a center forms a flower.
Circle packing -In nature, flowers in a bush grow to avoid overlap or intersection. This algorithm makes sure that flowers grow only in the available space they find.
Recursion - Each flower continuously checks for space around it and creates new, smaller flowers by essentially calling itself again. These "child" flowers inherit some properties from their "parent," creating a cascade of related yet unique forms.
An individual flower lives at a point determined by other factors not in its control. The arrangement of the whole bouquet which includes taking care of the sizes, branches, growth, population density is taken care of by a Node object. A node is an object which has just four things - ( parent node, position, size, depth ). The overarching algorithm this is based on is recursive circle packing. Circle packing is a problem of placing circles within a given space so as to not have any intersections and overlaps. An example is glass beads in a jar. Now in nature, branches, roots, leaves are always recursive, a branch splits into two which in turn grow two more each.
These factors combine to create a digital garden in bloom, making sure no single flower or composition is ever repeated. Not Real, But Recognizable
My flowers are not botanically correct or realistic. Instead, they are gestural and organic, exploring the shared cultural understanding of what constitutes a flower. This motif is ubiquitous—found in tiles, textiles, architecture, and children's drawings. It's so ingrained in our culture that it's simultaneously ever-present and invisible.
Down the texture rabbit hole
This to me is pure abstraction and I set out to capture as much variety as I could, with textures, brushes and drawing methods. At the end I am a traditional artist, extending his practise with code.
Any brush/ink/paint if you look closely is a bunch of particles - their distribution, size, shapes influences the overall texture. This led me to explore all of these
Not all brushes play nicely together. It's a delicate dance of textures, palettes, and density. Take our pen hatching technique, for instance. If flowers overlap too much, their delicate hatched lines jumble together, and suddenly, you can't tell where one flower ends and another begins. Conversely, a watercolor brush allows flowers to group together, their colors blending, as long as they're in different shades of the same hue.
How to explain your composition to a machine
Generative art’s expressivity is less about imitating painterly gestures than devising a system to produce them. Here starts the question of how do you explain your composition to a machine.
The foundation of our system is the style object - an array of arrays containing compatible brushes, backgrounds, and palettes. Our algorithm selects a style based on weighted probability, determining the composition's overall feel - from branch type to color distribution.
Each style offers multiple possibilities. A style might have three compatible backgrounds and three brush types, creating nine basic combinations. Add palettes and six other parameters, and the potential variations become vast, all while maintaining the style's core aesthetic.
Lets do a overview of all elements we have in a vibe once -
Compatible Brush: Defines the common brush style for all flowers in a composition, like "pen" and "hatch" type.
Compatible bg: The canvas colors. Some color palettes are divas - they only work on certain backgrounds. This prevents fashion faux pas like white flowers disappearing on a white background.
Compatible palettes : The color palettes are also defined as an array of individual color objects with weighted probability - think of it as a color roulette wheel, where some hues have a better chance of being picked than others. I had 15 palettes by the end of this, all hand picked.
Compatible color arrangements : This is how we distribute our chosen colors among the flowers. We could go random, cluster similar colors, have child flowers inherit parent colors, or create a repeating sequence. Each arrangement is its own function, ready to be called into action. Visually this is the one parameter that bought the most joy to me, clusters of flowers lead the eyes through the composition like a well-designed garden path.
Compatible branch - have two options - lines and splines. It might seem like a small detail, but it's a joyful discovery. Even with the same flower arrangement, a hash will generate the same set of flowers in the same position, but the wavy branch calculated and drawn between them will still vary every time you see the token.
Orientation : simply - horizontal, vertical, random, tree, grid. It dramatically affects the composition. The angle between nodes (where new flowers sprout) compounds as the image grows, injecting a controlled chaos into the final piece.
density : Controls how closely flowers are packed, based on our underlying circle-packing algorithm.
This system mimics nature's own hierarchy. Just as a species of flower shares common traits but each bloom is unique, our digital flowers share a brush type but vary in their individual expression. The overall style of the bouquet – the "species," if you will – is chosen once. But then, each flower – our "individual" – gets to play with this style in its own way.
Taking Alejandro's p5.brush as base, I finetuned more than 12 brushes - even created two new ones: 'stitching,' reminiscent of embroidered flowers, and 'old paper,' evoking the charm of vintage botanical illustrations. By combining these brushes in different ways (stroke and hatch, hatch and fill, and so on), I've expanded our range to six distinct brush effects. These finetuned parameters lies in a range where I found the effect to be the most pleasing. I lost count, and frankly dont care about the exact number of brush variations available. But each style has 3-4 brush, I can only estimate it to be around 20 for now.
I'll be the first to say that the algorithm or the process is not that difficult or groundbreakingly new. But I think the artistic merit of any generative piece lies in directing and finetuning the potential results. Artistic merit in general lies in what you build on top of existing ideas. When I scroll through gen art platforms - the shapes I see are triangle, squares, circles - the primitives stretched and over done, because these are the only shapes that the computer understands. It breaks my heart to see this sea of sameness in the medium we all love so much. Hope this project becomes a step in a new direction, to extend traditional practices, organic lines with computation.
With all this randomness - in petal shape, branching, position, size, texture, color palettes, and orientation - the total possible combinations add up to billions of unique pieces. They never repeat, not even slightly.
For this @highlight.xyz release, only 512 pieces from this vast sea of possibilities will be made available. When you press the mint button, neither you as the buyer nor I as the artist know exactly what will emerge. Each piece is a unique snapshot, saved from the infinite possibilities and stored permanently on the blockchain. It's a moment of quantum certainty amidst a sea of limitless potential—the wave function collapses, and art is born.
PS : I made a film about my experience through the months making on this, its out on zora now. Do check out.