Geophylla is a generative artwork series released on Art Blocks Studio, and my second long-form code-based project following Pacific Spirit’s release last year. Geophylla is a more personal work and a direct continuation of the preoccupation with floral forms that I've returned to many times.

I've been making spinning metallic flowers in Blender since 2021, releasing them first on Hic et Nunc in my series of trinkets and objects. While flowers are read as loose organic forms, they are radially symmetric and mathematically precise, strictly following the rules of nature and Fibonacci sequences. This juxtaposition between softness and rigidity is a recurring theme in my work. This particular project brings together floral forms, metallic geometry and mineral-inspired palettes to create hypnotic looping animations using randomness derived from Ethereum blockchain hashes.

Over time, my process for creating these forms has developed into a sequence of decisions I follow and a repeatable methodology. Sometimes while I'm working, I find myself feeling like a computer, on autopilot, following this set of mental instructions. This thought is what spurred the creation of Geophylla; I wanted to see if my creative process could be externalized and if that decision making process could be translated into a system. Could it arrive at something that feels like my work without my direct involvement?

The code behind Geophylla first started as a p5.js script producing flat greyscale flowers. The barebones version of this script lives on my website’s homepage, and a more refined version finds its home at trellis. From there I moved the logic into Blender, using it to generate the geometry that I could texture and light using my usual process. That version still required some manual intervention, so translating it into Three.js was the final form, allowing the system to generate outputs autonomously, producing a complete animated output without any intervention that maintained the style of my 3D works.

Geophylla came close to replicating what I do, but there was one obvious restriction, which I came to realize is what makes humans so unique. To build the system, I created shapes that I had already in my minds eye, then fed these "building blocks" into the algorithm, where they get assembled. The variation comes from the randomness in the assembly process, but every possible shape was something I had preconceived – a thought translated to code. But I realized, a big way in which I come up with new ideas is through making mistakes. Each mistake can trigger a cascade of new thoughts and ideas. That serendipitous idea generation from messing up is impossible to encode. A system can follow rules precisely, but it doesn’t naturally misbehave.

sample outputs
the system

Each flower is built from a stack of petal layers. The number of layers, the petal count per layer, the width and shape of each petal, and the rotation offset between layers are all determined independently by the hash. Layers are stacked along the z-axis, and each layer spins continuously at a slightly different speed giving the outputs a hypnotic and slightly imperfect feel to the animation.

Petal geometry is constructed from cubic Bezier curves that define a 2D outline, which is then extruded along a semicircular profile to give it volume. A variety of 2D outline shapes were defined in the original P5.js script, and the code randomly selects which shape to use for each layer, and how wide to make each layer’s petals. The shapes alone can produce interesting and varied outputs. For example, a wide oval at low petal count is lush and obviously botanical while spiky shapes at high counts push toward crystalline.

I attempted to mimic my Blender materials and scene setup in the Three.js script. The materials are fully metallic with roughness near zero, which means the petals appear as close to mirror as Three.js allows. The colour comes entirely from two sources: the vertex colour gradient baked into each petal's geometry, and the environment map, which consists of a custom gradient sphere with a cool blue-grey top, warm toned bottom, and a white specular patch that produces the bright reflective streak you see running along each petal's ridge.

palettes

The project has twelve colour palettes, each inspired and named after a mineral or gemstone: pearl, lapis lazuli, garnet, azurite, fire opal, chalcopyrite, cobalt, malachite, citrine, fluorite, cinnabar, and hematite.

The default state will set the colour of each layer of petals by stepping through the palette in order and applying a gradient to each petal. Some palettes use a randomized colour picking mode where each layer independently draws two colours from anywhere in the palette rather than stepping through in order. This produces outputs with more colour mixing and less tonal progression.

traits & features

The traits are: palette, body, stamen, petals, core, tempo, form, layers, and parity.

Body indicates the rendering style. Where most outputs are fully rendered in 3D, in some rare instances, just a wireframe will be rendered (wire) or just an outline of the shapes will be rendered (trace).

There are seven stamen styles with varying probabilities of selection and a few sub-rules restricting which types can be present on which forms.

Petals indicates the shapes that are present on the flower. There are eleven different petal shapes. These shapes were grouped into categories and rules were set limiting which combinations of petal shapes would be possible. Before I added these limitations, while the complete random mixing of shapes resulted in some interesting outputs, there were too many combinations that did not feel cohesive. There are seven categories in total, but these operate behind the scenes. What ends up being displayed as the trait is Wild as the default, where any of the combinations I have set can be used, Plush, where just “bubbly” or rounded shapes are selected, Blade, which only uses the one blade-type petal, or Sakura which adds other restrictions.

The Sakura petal mode draws a special flower disobeying a lot of the rules already in place. The petals are not metallic, they are paper thin and slightly translucent. This mode has a special place in my heart because a sakura was the first thing i modeled in 3D that I was proud of. Before that, I was following tutorials and learning how to do things “properly”, but breaking free from those restrictions, making mistakes, and just messing about until it worked was how I came to find my signature style in this medium. If a Sakura output is left running for five seconds, petals will begin to fall.

Core is simple – it is either absent (none), small or normal. The size is selected from a range of values defined for each category.

Tempo indicates the speed of rotation. In an homage to my love of vinyl and work in music, 0% represents the default speed, +8% for fast, and -8% for slow. I find the speed of rotation makes a big difference in the overall vibe of the piece – with slow outputs probably being my favourite at the moment.

Form has two options – Minimal for flowers with three or fewer layers, and Flore Pleno for those with more.

Layers simply presents the exact number of layers present on the output and Parity indicates if the layers consist of an even or odd number of petals. I found that when even and odd were mixed, the outputs looked messy, so each flower will be balanced to have only one or the other.

Once the flower is rendered, a Gaussian noise texture is overlayed, which has become almost a signature of mine across my work for Aquaregia and my personal practice, adding a grainy and more analogue vibe to the outputs.

availability

The works are available as tokenized digital assets on Art Blocks Studio from Wednesday May 13th, 2026.

Have a token? Visit here for sharing tools.