Inside Unique 24×24 Pixel Art on the Blockchain...
by Gerald Bauer, et al
One time / first time only - Download a punks pixel art collection from the Awesome 24px Downloads - Free Pixel Art Collections in the 24x24 Format page.
Let's try the 1000 More Punks
collection
in a single all-in-one 600×960px image (~180 kb) for free.
See
morepunks.png »
Let's create a program to mint (more) punk pixel art images. Let's (re)use the pixelart package from the learn pixel art org.
package main
import (
"fmt"
"github.com/learnpixelart/pixelart.go/pixelart"
)
func main() {
fmt.Printf( "Hello, Pixel Art v%s!\n", pixelart.Version )
path := "./morepunks.png"
tileSize := pixelart.Point{24, 24}
punks := pixelart.ReadImageComposite( path, &tileSize )
fmt.Println( punks.Bounds() )
//=> (0,0)-(600,960)
}
Note: By default punks get saved in the original 24x24 pixel format
and the first punk starts at index zero, that is, 0.
running up to 999.
Let's mint punk #0, #18, #40, and #88.
Add inside func main():
punk := punks.Tile( 0 )
fmt.Println( punk.Bounds() )
//=> (0,0)-(24,24)
punk.Save( "./morepunk0.png" )
punks.Tile( 18 ).Save( "./morepunk18.png" )
punks.Tile( 40 ).Save( "./morepunk40.png" )
punks.Tile( 88 ).Save( "./morepunk88.png" )
And voila!

Let's change the zoom factor:
punks.Tile( 0 ).Zoom( 4 ).Save( "./morepunk0@4x.png" )
punks.Tile( 18 ).Zoom( 4 ).Save( "./morepunk18@4x.png" )
punks.Tile( 40 ).Zoom( 4 ).Save( "./morepunk40@4x.png" )
punks.Tile( 88 ).Zoom( 4 ).Save( "./morepunk88@4x.png" )
And voila in 4x!

Proof-of the pudding.
If you want to run the ready-made sample
program in 01_tile/ yourself try:
go.mod)go.mod$ cd 01_tile
$ go mod init example.com/01_tile
$ go get github.com/learnpixelart/pixelart.go/pixelart
$ go run main.go
Let's try with the classic gray-ish
background in red/green/blue (rgb) as a hexstring #638596:
punks.Tile( 0 ).Background( "#638596" ).Zoom( 4 ).Save( "./morepunk0_(grayish)@4x.png" )
punks.Tile( 18 ).Background( "#638596" ).Zoom( 4 ).Save( "./morepunk18_(grayish)@4x.png" )
punks.Tile( 40 ).Background( "#638596" ).Zoom( 4 ).Save( "./morepunk40_(grayish)@4x.png" )
punks.Tile( 88 ).Background( "#638596" ).Zoom( 4 ).Save( "./morepunk88_(grayish)@4x.png" )
And voila!
@4x.png)
Philip! Phree the Phunks! Let's try to flip vertically, that is, mirror, the punk images - turning right-looking punks into left-looking.
punks.Tile( 0 ).Background( "#638596" ).Mirror().Zoom( 4 ).Save( "./morephunk0_(grayish)@4x.png" )
punks.Tile( 18 ).Background( "#638596" ).Mirror().Zoom( 4 ).Save( "./morephunk18_(grayish)@4x.png" )
punks.Tile( 40 ).Background( "#638596" ).Mirror().Zoom( 4 ).Save( "./morephunk40_(grayish)@4x.png" )
punks.Tile( 88 ).Background( "#638596" ).Mirror().Zoom( 4 ).Save( "./morephunk88_(grayish)@4x.png" )
And voila!
@4x.png)
And so on. Happy miniting.
Let's try the ukraine flag in the background (with the built-in Ukraine helper method):
punks.Tile( 0 ).Ukraine().Zoom( 4 ).Save( "./morepunk0_flag(ukraine)@4x.png" )
punks.Tile( 18 ).Ukraine().Zoom( 4 ).Save( "./morepunk18_flag(ukraine)@4x.png" )
punks.Tile( 40 ).Ukraine().Zoom( 4 ).Save( "./morepunk40_flag(ukraine)@4x.png" )
punks.Tile( 88 ).Ukraine().Zoom( 4 ).Save( "./morepunk88_flag(ukraine)@4x.png" )
And voila!
@4x.png)
Or try two-colored with the background in blue and the silhouette (foreground) in yellow and vice versa:
punks.Tile( 0 ).Silhouette("#ffdd00").Background("#0057b7").Zoom( 4 ).Save( "./morepunk0_silhouette(ukraine)@4x.png" )
punks.Tile( 18 ).Silhouette("#0057b7").Background("#ffdd00").Zoom( 4 ).Save( "./morepunk18_silhouette(ukraine)@4x.png" )
punks.Tile( 40 ).Silhouette("#ffdd00").Background("#0057b7").Zoom( 4 ).Save( "./morepunk40_silhouette(ukraine)@4x.png" )
punks.Tile( 88 ).Silhouette("#0057b7").Background("#ffdd00").Zoom( 4 ).Save( "./morepunk88_silhouette(ukraine)@4x.png" )
And voila!
@4x.png)
Let's retry with Egon Elbre's gophers collection
in the 32x32 pixel format.
See the all-in-one composite image with 35 gophers in a 7x5 grid -
gophers.png
(~14kb)
Let's create a program to mint gopher pixel art images.
package main
import (
"fmt"
"github.com/learnpixelart/pixelart.go/pixelart"
)
func main() {
fmt.Printf( "Hello, Pixel Art v%s!\n", pixelart.Version )
path := "./gophers.png"
tileSize := pixelart.Point{32, 32}
punks := pixelart.ReadImageComposite( path, &tileSize )
fmt.Println( gophers.Bounds() )
//=> (0,0)-(224,160)
}
Let's mint gopher #0 (neutral), #1 (pirate), #16 (heart eyes), and #28 (mind blown).
Add inside func main():
gopher := gophers.Tile( 0 )
fmt.Println( gopher.Bounds() )
//=> (0,0)-(32,32)
gopher.Save( "./gopher0.png" )
gophers.Tile( 1 ).Save( "./gopher1.png" )
gophers.Tile( 16 ).Save( "./gopher16.png" )
gophers.Tile( 28 ).Save( "./gopher28.png" )
And voila!

Let's change the zoom factor:
gophers.Tile( 0 ).Zoom( 4 ).Save( "./gopher0@4x.png" )
gophers.Tile( 1 ).Zoom( 4 ).Save( "./gopher1@4x.png" )
gophers.Tile( 16 ).Zoom( 4 ).Save( "./gopher16@4x.png" )
gophers.Tile( 28 ).Zoom( 4 ).Save( "./gopher28@4x.png" )
And voila in 4x!

Proof-of the pudding.
If you want to run the ready-made sample
program in 01_tile_(gophers)/ yourself try:
go.mod)go.mod$ cd 01_tile_(gophers)
$ go mod init example.com/01_tile
$ go get github.com/learnpixelart/pixelart.go/pixelart
$ go run main.go
Let's try with the classic gray-ish
background in red/green/blue (rgb) as a hexstring #638596:
gophers.Tile( 0 ).Background( "#638596" ).Zoom( 4 ).Save( "./gopher0_(grayish)@4x.png" )
gophers.Tile( 1 ).Background( "#638596" ).Zoom( 4 ).Save( "./gopher1_(grayish)@4x.png" )
gophers.Tile( 16 ).Background( "#638596" ).Zoom( 4 ).Save( "./gopher16_(grayish)@4x.png" )
gophers.Tile( 28 ).Background( "#638596" ).Zoom( 4 ).Save( "./gopher28_(grayish)@4x.png" )
And voila!
@4x.png)
Let's try the ukraine flag in the background (with the built-in Ukraine helper method):
gophers.Tile( 0 ).Ukraine().Zoom( 4 ).Save( "./gopher0_flag(ukraine)@4x.png" )
gophers.Tile( 1 ).Ukraine().Zoom( 4 ).Save( "./gopher1_flag(ukraine)@4x.png" )
gophers.Tile( 16 ).Ukraine().Zoom( 4 ).Save( "./gopher16_flag(ukraine)@4x.png" )
gophers.Tile( 28 ).Ukraine().Zoom( 4 ).Save( "./gopher28_flag(ukraine)@4x.png" )
And voila!
@4x.png)
Q: Dear sir, how do I get rich in ~bits-coin~ punks?
A: If we all buy ~bits-coin~ punks from one another at ever higher prices we'll all be rich beyond our wildest dreams.
21 million bits-coin. 10 000 punks. Do the math.
Let's (re)create from zero / scratch a pixel-perfect copy of the Matt & John's® 10 000 punks collection (Anno 2017).
Yes, you can. Do-it-yourself (DIY) and own 100% forever your home-made free clean-room copy of the billion dollar (2400×2400) bitmap that kicked-off a trillion dollar get-rich-quick digital art mania / bubble in 2021 - selling "decentralized" ~blockchain tokens~ database records to ever greater fools at ever higher prices.
Let's copy and (re)use all punk (building) blocks in the basic series (24×24):
11 Archetypes:
Male 1/2/3/4
,
Female 1/2/3/4
,
Zombie
,
Ape
,
Alien 
122 Attributes (by category and a-z):
- Hat -
Bandana (m/f)
,
Beanie (m)
,
Cap (m/f)
,
Cap Forward (m)
,
Cowboy Hat (m)
,
Do-rag (m)
,
Fedora (m)
,
Headband (m/f)
,
Hoodie (m)
,
Knitted Cap (m/f)
,
Pilot Helmet (f)
,
Police Cap (m)
,
Tassle Hat (f)
,
Tiara (f)
,
Top Hat (m)
- Hair -
Blonde Bob (f)
,
Blonde Short (f)
,
Clown Hair Green (m/f)
,
Crazy Hair (m/f)
,
Dark Hair (f)
,
Frumpy Hair (m/f)
,
Half Shaved (f)
,
Messy Hair (m/f)
,
Mohawk (m/f)
,
Mohawk Dark (m/f)
,
Mohawk Thin (m/f)
,
Orange Side (f)
,
Peak Spike (m)
,
Pigtails (f)
,
Pink With Hat (f)
,
Purple Hair (m)
,
Red Mohawk (f)
,
Shaved Head (m)
,
Straight Hair (f)
,
Straight Hair Blonde (f)
,
Straight Hair Dark (f)
,
Stringy Hair (m/f)
,
Vampire Hair (m)
,
Wild Blonde (f)
,
Wild Hair (m/f)
,
Wild White Hair (f)
- Eyes -
3D Glasses (m/f)
,
Big Shades (m/f)
,
Classic Shades (m/f)
,
Eye Mask (m/f)
,
Eye Patch (m/f)
,
Horned Rim Glasses (m/f)
,
Nerd Glasses (m/f)
,
Regular Shades (m/f)
,
Small Shades (m)
,
VR (m/f)
,
Welding Goggles (f)
- Eyes (Makeup) -
Blue Eye Shadow (f)
,
Clown Eyes Blue (m/f)
,
Clown Eyes Green (m/f)
,
Green Eye Shadow (f)
,
Purple Eye Shadow (f)
- Blemishes -
Mole (m/f)
![]
$ claude mcp add lets-go-programming-cryptopunks \
-- python -m otcore.mcp_server <graph>