Creating A Curated Generative NFT Collection

Outland Art
7 min readNov 16, 2022

--

by Leo Villareal

I released my first generative NFT collection, Cosmic Reef, on Art Blocks in January 2022. My second collection, Cosmic Bloom, will be released on Outland this December. In this article, I share some of the creative and technical decisions underlying the new project and the process of developing it.

I began working on Cosmic Bloom by conducting a period of digital sketching and experimentation. I wanted to extend the ideas that I’d been exploring in Cosmic Reef and introduce new geometric forms and types of motion. The first experiments I made were animated wireframes with a bloom filter applied. Working with my developers, I created a simple interface that let me multiply geometries, lay them out, and animate their position. I was excited about the potential I was seeing, especially where the wireframes were generating imagery with a more organic quality. I liked the synaptic look of some of the outputs and was interested in developing more complex geometries programmatically using basic shapes as building blocks.

Early digital sketches during concept development of Cosmic Bloom.

Like Cosmic Reef, the code that generates Cosmic Bloom is written in javascript using three.js. My working process includes building an authoring interface that allows me to quickly add objects to the scene and set their parameters. It isn’t part of the final code that gets deployed, but it lets me explore the parameter space by changing values and saving combinations that I like. I can adjust parameters in real-time as the code is running, so that I can immediately see how varying values changes the visual output.

Working with the Cosmic Bloom authoring interface.

The building blocks of Cosmic Bloom are unit geometries. Initially, I use the authoring interface to select a unit geometry from a drop-down list of pre-defined geometries that includes circle, sphere, cone, cylinder, torus, tetrahedron, icosahedron, octahedron, and dodecahedron. These are the buffer geometries built into three.js with the edges that cut across the faces of the geometry removed so that the outlines of the geometry show as polyhedra rather than as triangulated wireframes.

The radius, complexity (number of subdivisions), scale along each axis, position and rotation of the unit geometry can all be set individually.

Points, lines and fills can be applied to each geometry, and the color, size and opacity of each can be set. Dynamic transformations of rotation, scale, and vertex position can be applied as well. We use custom shader materials for points, lines, and fills. Each shader implements the full set of nested transforms and deformations as a chain of transform matrices.

Unit geometries can be nested inside system geometries, with a unit geometry placed at each vertex of the system geometry. System geometries are selected from circle, sphere, tetrahedron, icosahedron, octahedron, and dodecahedron. The radius of the system and its rotation in x, y, and z directions can be animated.

Each system is written to a frame buffer and a series of post-processing passes is applied. These include blur, trails, frame blending, and bloom.

Early in the process, I vary as many parameters as possible to explore what’s possible with different combinations. With so many settings interacting to determine the final outcome, I often discover effects that I wouldn’t have been able to plan. It’s a very improvisational process. I’ve cultivated randomized outcomes of generative code in my work with light sculpture for years. For the sculptures, I often record the outcomes to video, which I then remix and randomize to generate dynamic sequences. For the digital NFT projects, I’m always working with the live code that generates the outcomes, and not with video, so all of the creative choices I make have to be fed back into the code.

I organize my work by tracking and saving parameter values, which I log as json strings in a database. This lets me return to combinations that I like for study, analysis, and further development. As my sense of the work develops, I identify forms, patterns, color schemes, and effects that will form the core visual vocabulary of the collection. I use a tagging system to classify parameter combinations as background, central, and foreground elements. These combinations end up being the seeds of the final pieces.

Cosmic Bloom work in progress image board.

Rather than have the code completely randomize parameter values, I set it up to vary values within ranges that maintain the distinctive features I’ve identified while introducing variation. The example below shows output of a single system where the parameters are randomized within ranges I’ve selected.

Sample outputs of a single Cosmic Bloom system, varying selected parameters within specified ranges.

To generate an output, multiple systems are composited together. The code references parameter combinations according to the tags I’ve assigned to them and randomly combines background, central and foreground elements to create an output, randomizing the parameters within the ranges I’ve set every time.

I’ve used layered compositions in many of my previous artworks, often working in TouchDesigner to achieve them, so this process of layering elements is familiar to me. The challenge becomes reigning in the possible outcomes and creating rules and constraints that consistently generate aesthetically pleasing results.

Periodically, we run a script that generates thousands of iterations from the current code. This gives me a sense of the overall output it’s capable of generating and shows me if I need to make changes to the algorithm. I can see if there are too many similar iterations, if there are ones that don’t render well, or if the set as a whole doesn’t feel cohesive enough.

Early outputs from the developing Cosmic Bloom code base

Every time the code runs to generate an iteration, we can save the specific parameter values of that iteration as JSON data. Feeding that data back into the code reproduces the iteration exactly. For the final production, we’ll upload a version of the code stripped of the authoring interface and all of the JSON files that define the individual mints I’ve selected. In a way it’s a hybrid process: using a generative creative and authoring approach with the added step of personal curation at the last step. The end result is still live code, without repeats or looping.

The code for generating mints will be hosted on the Interplanetary File System (IPFS). This is a departure from the Art Blocks collection, in which the code was uploaded to the blockchain. The JSON definitions for each mint will also be stored in IPFS. IPFS has many advantages over on-chain storage, with minor drawbacks. The primary advantage for IPFS for this project is that it allows for a larger body of generation code than would be feasible for storage on the blockchain. This allows for a mint with more depth and flourishes than would be possible if IPFS was not chosen. IPFS storage is immutable, and can remain available indefinitely, as long as it remains pinned in the network. Pins can be maintained not just by the project team, but also by any person interested in preserving the work. Lastly, using IPFS for storage allows the project team to make adjustments to the system, and to make sure the work functions on future marketplaces, rendering platforms and browsers.

The token metadata will consist of a static image that can be used as a placeholder for marketplaces that do not support real time generation, as well as an animation url, which will point to the code and JSON definition for the mint. If the animation url is loaded directly, it will render the mint in real time. This approach has been used by many other projects, such as ArtBlocks, and is well supported by OpenSea.

For Cosmic Bloom, I’m excited that I’ll be adding a final curation step to the generative process. I’ll be reviewing the outputs generated by the code and hand-selecting iterations to include in the resulting collection. I have been ‘collaborating’ with code for over 20 years and it seems right for the artist to have the final word. Cosmic Bloom will be a blind mint. No individual buyer will know what iteration they’re receiving prior to minting, but they’ll know that I personally reviewed and selected every mint in the collection. Each iteration will be revealed immediately following minting.

Installation view of Cosmic Bloom preview at Stone Nest, London (October 2022)

Installation view of Cosmic Bloom preview at Stone Nest, London (October 2022)

The videos below show some sample outputs from the current code.

Stay tuned to Outland and Discord for updates as we approach the release date.

Join Leo Villareal Studio Discord

Join Outland Discord

--

--