
Astra is an organization focused on gamifying digital experiences. One of their flagship products, Astraverse, is an open-world 3D digital fashion experience where users can showcase, buy, and sell virtual fashion assets.
To take things further, Astra decided to create an NFT collection featuring their 3D avatars and fashion assets. This meant creating 2D versions of each 3D fashion asset, which would later be combined by layering different fashion items onto the 2D avatar to form unique NFTs.
The Challenge
Their challenges were clear:
- Seamlessly automating the process of generating over 10,000 NFT assets
- Randomizing trait combinations to ensure uniqueness while keeping the collection visually cohesive
- Implementing rarity logic so some traits appeared less frequently
- Generating accurate metadata for minting on-chain
- Providing a way to visualize, review, and approve generated assets before deployment
That’s where I came in.
Astra approached me with these challenges and a clear mission: build a 10,950-piece NFT collection that was polished, consistent, and ready for minting — without manually designing each image. I knew this was going to be a full-scale generative art project requiring tight collaboration between design and development.
🎨 Collaboration First
I began by working closely with the illustrator who designed each trait — backgrounds, frames, characters, outfits, accessories, and special features that gave each NFT its unique charm. My role was to ensure every trait aligned perfectly when layered with others. Getting this right meant fewer visual glitches and a collection that looked polished and cohesive no matter which combination got generated.
🔧 Building the Engine
Once the art was ready, I proceeded built a custom engine to generate the collection.
-
Random but Smart – I used Python to randomly generate trait combinations for each NFT.
-
No Weird Combos – Some traits didn’t look great together (think a hat that covers a character’s eyewear). So I wrote an exception script to prevent those combos from ever appearing.
-
Perfectly Layered – The final step was using Pillow to layer each trait image on top of the next, turning the metadata into a fully composed NFT image.
-
Svelte-powered frontend – This was built so the Astra team could preview samples, approve them, and trigger new batches — without ever touching a terminal.
🚀 The Outcome
By the end, we had a complete collection of 10,950 unique NFTs, all properly formatted and ready for minting. The assets were clean, consistent, and exactly what Astra needed to launch with confidence. The Astra team could easily preview, approve, and export assets — making the handoff smooth and stress-free.
This project wasn’t just about writing code — it was about preserving the art direction. I had to ensure colors worked well together, rarities were balanced, and the overall collection felt cohesive. While code can generate random combinations, I spent time fine-tuning the logic so the results felt curated rather than chaotic.
🎥 To build excitement ahead of the launch, I also produced the video shown above, which previewed some of the generated NFT images.