10k Mares

 

 

About the Project

When I first heard about Cryptopunks, I thought what most people think when they first hear about Cryptopunks, “Wait, these stupid things cost HOW MUCH MONEY?!” But as a fan of NFT technology, I quickly got over the money side of Cryptopunks and was blown away by the whole thing. Setting aside all of the pioneering blockchain technology part, I was completely intrigued with the idea of writing a computer code that generated 10,000 unique illustrations, based on a rarity index.

Everything about it captured my imagination. From how I would design the “traits” so they fit across the range of other designs to how I would simply code the whole thing. I’ve thought about “10k projects” nearly every day of my dumb life since I heard about these damned Cryptopunks.

After a few months of development, I figured out how to do it using my creative tool of choice: After Effects and Illustrator, with the help of a few opensource javascript expressions and a whole bunch of Google Sheets. I was proud, but it didn’t scratch the itch of learning how to code a code that made 10,000 unique illustrations.

Fast forward 3-4 years, ChatGPT is now a thing, and after spending an embarrassing amount of time on another 10k Project, I said to myself, “Damn it! It’s time to make a real 10k Project using Python! Let’s do this!”

So I did.

 
 
 
 

The Design

The real Mare

Top Left - The original 10,000 Mare inspiration

Midjourney

In case you didn’t know, I’m obsessed with my cat Marilyn. So when I set out to make this project, I knew I wanted to make it 10,000 Mares. But unlike my real PFP project, I wanted this one to be 24x24 pixels, just like ye olde Cryptopunks. But how on earth would I capture the beauty, adorableness, fluffiness, cuddliness, and personality of my little Mare Mare in just 576 pixels?

So I asked the AI software Midjourney what this could look like. After "a few rolls,” I spotted the perfect piece of inspiration. It captured everything about Mare that makes her Mare and it did it in what was clearly 24x24 pixels. I instantly envisioned the whole thing. All her little tails on both sides, her ears, all of it!

This was a perfect example of how AI can provide amazing creative inspiration.

I upscaled the image and took it to Illustrator.

 
 
 
 

Illustrator

In all honesty, this was hands down the most fun I’ve ever had working Adobe Illustrator. I’ve made a lot of fun shit over the years but I’ve never spent a few hours just making different versions of Marilyn. It was so awesome. It wasn’t hard to make dozens of different little squishy faces and floofy tails and fuzzy little ears.

I still can’t get over how forgiving the 24x24 pixel medium is. Going in, I was really worried about the ears and if I moved the head, would I need to make a special piece of code that moved the ears? But it all worked out just fine without any adjustments. No special code was needed. Pixel art is just very forgiving.

I exported all of the data and took it to VS Code.

 
 
 

All the Mare faces. Some are more rare than others…

 
 
 
 

The Code

In my brief coding experience, I’ve only used online IDEs like the p5.js Editor or sites like Replit to write code. This time, however, since I wanted to generate 10,000 images, using a free, cloud-based operation wasn’t an option at the time. I needed the real thing. So, I downloaded VS Code, a real coding program that involved me using my CPU’s “terminal” to install libraries and shit. We’re not messing around any more folks. This is the real deal.

 

Sections like this were calculated by hand … well, Google Sheets, but you know what I mean. Not GPT.

 

ChatGPT

I went through dozens of GPT chats while working on this project. When I needed help pumping out lots of code over and over again with small iterations, I went with GPT 3.5 since, at the time, it was available for unlimited use. When I needed help on more sophisticated parts of the code like the rarity distribution logic, I turned to GPT 4.0. But without ChatGPT, I wouldn’t have even known to download VS Code, let alone write a Python script.

But it wasn’t all GPT. Even 4.0 has a hard time writing sequences like the one above. Sections like this required Google Sheets and lots of head-scratching.

 
 
 
 

Outputs

I built a little Assembly.py script that randomly assembled a Mare using the pieces I illustrated. Once I was satisfied with the test assemblies, I made a new script that would generate 10,000 Mares based on my specific rarity index. 96 hours or so later, it was ready to go!

I did the “drum roll” thing and with much anticipation, I finally clicked “Run Program”. It didn’t run. There was an error. But like six hours later after clicking “Run Program” 238 times, it finally worked as I envisioned. Woo hoo!

 
 
 
 
 

Rarity Index & Distribution

An important part of the program is it also generates an extremely detailed CSV file that tells me all of the trait information and rarity scores. I spent a lot of time with GPT making sure the trait distribution was fair and even. After lots of trial and error, instead of creating a code that generated x amount of Legendary Cards, x amount of Ultra Rare cards, etc. It simply evenly distributed the traits based on the rarity index, tabulated the score, and automatically assigned the top x amount of Mares Legendary, the next x amount of Mares as Ultra Cards, etc. That way, there is no distribution issues like my last 10k project.

 
 
Distribution

5,000 Common
3,500 Uncommon
750 Rare
500 Super Rare
240 Ultra Rare
10 Legendary
-------------
10,000 Mares!
 
 
 

Rarity Scores

The lower the score the rarer the Mare. They have weird score numbers because all of the scores for each trait had to equal 1.0. So when there are a lot of designs for a trait, the numbers get really weird. I think it makes it look more scientific and fun, so I like it. Below are examples of a Common, Uncommon, Rare, Super Rare, Ultra Rare, and Legendary Mare.

Mare #1928

Rarity Score: 1.67616
Rarity Tier: Common
Rank: 10000

Background 01: Common: 0.35
Body 03: Common: 0.2
Face 02: Uncommon: 0.13
Left Ear 03: Common: 0.225
Right Ear 01: Common: 0.225
Left Paw 03: Common: 0.225
Right Paw 03: Common: 0.225
Right Tail 01: Rare: 0.09616

Mare #9786

Rarity Score: 0.95616
Rarity Tier: Uncommon
Rank: 1501

Background 05: Rare: 0.05
Body 05: Uncommon: 0.1
Face 13: Legendary: 0.01
Left Ear 02: Common: 0.225
Right Ear 05: Uncommon: 0.1
Left Paw 02: Common: 0.225
Right Paw 04: Uncommon: 0.15
Right Tail 01: Rare: 0.09616

Mare #7666

Rarity Score: 0.88205
Rarity Tier: Rare
Rank: 751

Background 05: Rare: 0.05
Body 06: Uncommon: 0.1
Face 07: Rare: 0.05
Left Ear 02: Common: 0.225
Right Ear 01: Common: 0.225
Left Paw 06: Rare: 0.05
Right Paw 04: Uncommon: 0.15
Left Tail 07: Super Rare: 0.03205

Mare #556

Rarity Score: 0.86616
Rarity Tier: Super Rare
Rank: 651

Background 03: Common: 0.2
Body 07: Rare: 0.05
Face 11: Rare: 0.06
Left Ear 04: Uncommon: 0.13
Right Ear 04: Uncommon: 0.13
Left Paw 06: Rare: 0.05
Right Paw 04: Uncommon: 0.15
Right Tail 03: Rare: 0.09616

Mare #9835

Rarity Score: 0.75705
Rarity Tier: Ultra Rare
Rank: 180

Background 04: Uncommon: 0.15
Body 07: Rare: 0.05
Face 15: Legendary: 0.005
Left Ear 06: Rare: 0.09
Right Ear 04: Uncommon: 0.13
Left Paw 04: Uncommon: 0.15
Right Paw 04: Uncommon: 0.15
Left Tail 08: Super Rare: 0.03205

Mare #616

Rarity Score: 0.43205
Rarity Tier: Legendary
Rank: 1

Background 05: Rare: 0.05
Body 07: Rare: 0.05
Face 13: Legendary: 0.01
Left Ear 06: Rare: 0.09
Right Ear 05: Uncommon: 0.1
Left Paw 06: Rare: 0.05
Right Paw 06: Rare: 0.05
Right Tail 06: Super Rare: 0.03205

 
 

 
 

That’s All Folks

So that’s the project. It was so much fun. That being said there were moments when ChatGPT was spitting out the same wrong code for several hours and I couldn't figure anything out on my own, I got frustrated to the point of tears and wanted to quit. Throughout it all, the love of my life, Annie, supported me and reminded me this silly project was worth the effort. It was and I’m so happy with how it turned out and very thankful she talked me through the down times.

I have no plans to actually “mint” 10,000 Mares and sign her to a blockchain forever. Maybe I’ll do that someday, who knows?

Until then, I’ve got 10,000 little Marilyn collectibles, some Common, some Legendary. All of them are nearly as cute as Mare herself.

But most importantly, for the first time since learning about those god-damned Cryptopunks so many years ago, I finally learned how to code a code that made 10,000 unique illustrations. 😌

 
 
 
 
 

Every 10,000 Mares


© Jimmy Weber LLC