cryptopunks 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -1,633 +1,666 @@
1
- # Crypto Punks
2
-
3
- cryptopunks - mint your own 24×24 pixel punk images off chain from the True Official Genuine CryptoPunks™ sha256-verified original 10 000 unique character collection; incl. 2x/4x/8x zoom for bigger sizes
4
-
5
- * home :: [github.com/cryptopunksnotdead/cryptopunks](https://github.com/cryptopunksnotdead/cryptopunks)
6
- * bugs :: [github.com/cryptopunksnotdead/cryptopunks/issues](https://github.com/cryptopunksnotdead/cryptopunks/issues)
7
- * gem :: [rubygems.org/gems/cryptopunks](https://rubygems.org/gems/cryptopunks)
8
- * rdoc :: [rubydoc.info/gems/cryptopunks](http://rubydoc.info/gems/cryptopunks)
9
-
10
-
11
- New to Crypto Punks?
12
- See the [**Awesome CryptoPunks Bubble (Anno 2021) - Modern 24×24 Pixel Crypto Art on the Blockchain** »](https://github.com/cryptopunksnotdead/awesome-cryptopunks-bubble)
13
-
14
-
15
-
16
- ## Command Line
17
-
18
- Use the `punk` (or `cryptopunk`) command line tool. Try:
19
-
20
- ```
21
- $ punk -h
22
- ```
23
-
24
- resulting in:
25
-
26
- ```
27
- NAME
28
- punk - punk (or cryptopunk) command line tool
29
-
30
- SYNOPSIS
31
- punk [global options] command [command options] [arguments...]
32
-
33
- VERSION
34
- 2.1.0
35
-
36
- GLOBAL OPTIONS
37
- -d, --dir,
38
- -o, --out, --outdir=DIR - Output directory (default: .)
39
- -f, --file=FILE - True Official Genuine CryptoPunks™ all-in-one
40
- composite image (default: ./punks.png)
41
- --offset=NUM - Start counting at offset (default: 0)
42
- --seed=NUM - Seed for random number generation /
43
- shuffle (default: 4142)
44
- -z, --zoom=ZOOM - Zoom factor x2, x4, x8, etc. (default: 1)
45
-
46
- --help - Show this message
47
- --version - Display the program version
48
- --verbose - (Debug) Show debug messages
49
-
50
-
51
- COMMANDS
52
- g, gen, generate - Generate punk characters from text attributes (from
53
- scratch / zero) via builtin punk spritesheet
54
- l, ls, list - List all punk archetype and attribute names from builtin
55
- punk spritesheet
56
- q, query - Query (builtin off-chain) punk contract for punk text
57
- attributes by IDs - use 0 to 9999
58
- t, tile - Get punk characters via image tiles from all-in-one punk
59
- series composite (./punks.png) - for IDs use 0 to 9999
60
- f, flip - Flip (vertically) all punk characters in all-in-one punk
61
- series composite (./punks.png)
62
- s, shuffle - Shuffle all punk characters (randomly) in all-in-one
63
- punk series composite (./punks.png)
64
-
65
- help - Shows a list of commands or help for one command
66
- ```
67
-
68
-
69
- ### Generate Command
70
-
71
- _Generate punk characters from text attributes (from scratch / zero) via builtin punk spritesheet_
72
-
73
-
74
- Let's try punk #0:
75
-
76
- ```
77
- $ punk generate female_2 earring blonde_bob green_eye_shadow
78
- ```
79
-
80
- resulting in:
81
-
82
- ![](i/punk-0000.png)
83
-
84
- Let's try the `-z/--zoom` factor 2x, 4x, 8x, etc.:
85
-
86
- ```
87
- $ punk --zoom 4 generate female_2 earring blonde_bob green_eye_shadow
88
- # -or-
89
- $ punk -z2 g female_2 earring blonde_bob green_eye_shadow
90
- ```
91
-
92
- resulting in:
93
-
94
- 2x ![](i/punk-0000x2.png)
95
- 4x ![](i/punk-0000x4.png)
96
- 8x ![](i/punk-0000x8.png)
97
-
98
-
99
- Let's try never-before-seen super-rare punks:
100
-
101
- ```
102
- $ punk generate demon heart_shades
103
- $ punk generate vampire_female wild_hair
104
- ```
105
-
106
- resulting in:
107
-
108
- ![](i/demon.png)
109
- ![](i/vampire-female.png)
110
-
111
-
112
-
113
- Q: What punk archetypes and attributes can I use?
114
-
115
- A: See the list command.
116
-
117
-
118
- ### List Command
119
-
120
- _List all punk archetype and attribute names from builtin punk spritesheet_
121
-
122
-
123
- Let's try:
124
-
125
- ```
126
- $ punk list
127
- # -or-
128
- $ punk ls
129
- ```
130
-
131
- resulting in:
132
-
133
- ```
134
- ==> Archetypes
135
- Male 1 / (m) - Archetype - Human
136
- Male 2 / (m) - Archetype - Human
137
- Male 3 / (m) - Archetype - Human
138
- Male 4 / (m) - Archetype - Human
139
- Female 1 / (f) - Archetype - Human
140
- Female 2 / (f) - Archetype - Human
141
- Female 3 / (f) - Archetype - Human
142
- Female 4 / (f) - Archetype - Human
143
- Zombie / (m) - Archetype - Zombie
144
- Zombie Female / (f) - Archetype - Zombie
145
- Ape / (m) - Archetype - Ape
146
- Ape Female / (f) - Archetype - Ape
147
- Alien / (m) - Archetype - Alien
148
- Alien Female / (f) - Archetype - Alien
149
- Demon / (m) - Archetype - Demon
150
- Demon Female / (f) - Archetype - Demon
151
- Mummy / (m) - Archetype - Mummy
152
- Mummy Female / (f) - Archetype - Mummy
153
- Orc / (m) - Archetype - Orc
154
- Orc Female / (f) - Archetype - Orc
155
- Robot / (m) - Archetype - Robot
156
- Robot Female / (f) - Archetype - Robot
157
- Skeleton / (m) - Archetype - Skeleton
158
- Skeleton Female / (f) - Archetype - Skeleton
159
- Vampire / (m) - Archetype - Vampire
160
- Vampire Female / (f) - Archetype - Vampire
161
- Zombie (Ape) / (m) - Archetype - Zombie
162
- Alien (Ape) / (m) - Archetype - Alien
163
- Alien 0° / (m) - Archetype - Alien
164
- Alien 30° / (m) - Archetype - Alien
165
- Alien 60° / (m) - Archetype - Alien
166
- Alien 90° / (m) - Archetype - Alien
167
- Alien 120° / (m) - Archetype - Alien
168
- Alien 150° / (m) - Archetype - Alien
169
- Alien 180° / (m) - Archetype - Alien
170
- Alien 210° / (m) - Archetype - Alien
171
- Alien 240° / (m) - Archetype - Alien
172
- Alien 270° / (m) - Archetype - Alien
173
- Alien 300° / (m) - Archetype - Alien
174
- Alien 330° / (m) - Archetype - Alien
175
- Alien (Ape) / (m) - Archetype - Alien
176
- Alien (Ape) 30° / (m) - Archetype - Alien
177
- Alien (Ape) 60° / (m) - Archetype - Alien
178
- Alien (Ape) 90° / (m) - Archetype - Alien
179
- Alien (Ape) 120° / (m) - Archetype - Alien
180
- Alien (Ape) 150° / (m) - Archetype - Alien
181
- Alien (Ape) 180° / (m) - Archetype - Alien
182
- Alien (Ape) 210° / (m) - Archetype - Alien
183
- Alien (Ape) 240° / (m) - Archetype - Alien
184
- Alien (Ape) 270° / (m) - Archetype - Alien
185
- Alien (Ape) 300° / (m) - Archetype - Alien
186
- Alien (Ape) 330° / (m) - Archetype - Alien
187
- Alien Female / (f) - Archetype - Alien
188
- Alien Female 30° / (f) - Archetype - Alien
189
- Alien Female 60° / (f) - Archetype - Alien
190
- Alien Female 90° / (f) - Archetype - Alien
191
- Alien Female 120° / (f) - Archetype - Alien
192
- Alien Female 150° / (f) - Archetype - Alien
193
- Alien Female 180° / (f) - Archetype - Alien
194
- Alien Female 210° / (f) - Archetype - Alien
195
- Alien Female 240° / (f) - Archetype - Alien
196
- Alien Female 270° / (f) - Archetype - Alien
197
- Alien Female 300° / (f) - Archetype - Alien
198
- Alien Female 330° / (f) - Archetype - Alien
199
-
200
- ==> Attributes
201
- 3D Glasses / (m) - Attribute
202
- 3D Glasses / (f) - Attribute
203
- Bandana / (m) - Attribute
204
- Bandana / (f) - Attribute
205
- Beanie / (m) - Attribute
206
- Beanie / (f) - Attribute
207
- Big Beard / (m) - Attribute
208
- Big Shades / (m) - Attribute
209
- Big Shades / (f) - Attribute
210
- Black Lipstick / (f) - Attribute
211
- Blonde Bob / (f) - Attribute
212
- Blonde Short / (f) - Attribute
213
- Blue Eye Shadow / (f) - Attribute
214
- Buck Teeth / (m) - Attribute
215
- Cap / (m) - Attribute
216
- Cap / (f) - Attribute
217
- Cap Forward / (m) - Attribute
218
- Cap Forward / (f) - Attribute
219
- Chinstrap / (m) - Attribute
220
- Choker / (f) - Attribute
221
- Cigarette / (m) - Attribute
222
- Cigarette / (f) - Attribute
223
- Classic Shades / (m) - Attribute
224
- Classic Shades / (f) - Attribute
225
- Clown Eyes Blue / (m) - Attribute
226
- Clown Eyes Blue / (f) - Attribute
227
- Clown Eyes Green / (m) - Attribute
228
- Clown Eyes Green / (f) - Attribute
229
- Clown Hair Green / (m) - Attribute
230
- Clown Hair Green / (f) - Attribute
231
- Clown Nose / (m) - Attribute
232
- Clown Nose / (f) - Attribute
233
- Cowboy Hat / (m) - Attribute
234
- Cowboy Hat / (f) - Attribute
235
- Crazy Hair / (m) - Attribute
236
- Crazy Hair / (f) - Attribute
237
- Dark Hair / (f) - Attribute
238
- Do-rag / (m) - Attribute
239
- Do-rag / (f) - Attribute
240
- Earring / (m) - Attribute
241
- Earring / (f) - Attribute
242
- Eye Mask / (m) - Attribute
243
- Eye Mask / (f) - Attribute
244
- Eye Patch / (m) - Attribute
245
- Eye Patch / (f) - Attribute
246
- Fedora / (m) - Attribute
247
- Fedora / (f) - Attribute
248
- Front Beard / (m) - Attribute
249
- Front Beard Dark / (m) - Attribute
250
- Frown / (m) - Attribute
251
- Frumpy Hair / (m) - Attribute
252
- Frumpy Hair / (f) - Attribute
253
- Green Eye Shadow / (f) - Attribute
254
- Goat / (m) - Attribute
255
- Gold Chain / (m) - Attribute
256
- Gold Chain / (f) - Attribute
257
- ...
258
- ```
259
-
260
- See the [**punks.spritesheet**](https://github.com/cryptopunksnotdead/punks.spritesheet) for more.
261
-
262
-
263
-
264
-
265
- ### Query Command
266
-
267
- _Query (builtin off-chain) punk contract for punk text attributes by IDs - use 0 to 9999_
268
-
269
-
270
- Let's try punk #0:
271
-
272
- ```
273
- $ punk query 0
274
- # -or-
275
- $ punk q 0
276
- ```
277
-
278
- resulting in:
279
-
280
- ```
281
- ==> (1/1) punk #0...
282
- female_2 earring blonde_bob green_eye_shadow
283
- ```
284
-
285
- Let's try some top sellers:
286
-
287
- ```
288
- $ punk query 7804 3100 5217 8857
289
- # -or-
290
- $ punk q 7804 3100 5217 8857
291
- ```
292
-
293
- resulting in:
294
-
295
- ```
296
- ==> (1/4) punk #7804...
297
- alien cap_forward pipe small_shades
298
- ==> (2/4) punk #3100...
299
- alien headband
300
- ==> (3/4) punk #5217...
301
- ape gold_chain knitted_cap
302
- ==> (4/4) punk #8857...
303
- zombie wild_hair 3d_glasses
304
- ```
305
-
306
- Note: Yes, you can pass the text attributes to the generate command
307
- to get a free "cleanroom" copy built from scratch / zero
308
- that you own 100% forever.
309
-
310
-
311
-
312
- ### Tile Command
313
-
314
- _Get punk characters via image tiles from all-in-one punk series composite (`./punks.png`) - for IDs use 0 to 9999_
315
-
316
-
317
-
318
- Step 0 - Download the True Official Genuine CryptoPunks™ composite image
319
-
320
- One time / first time only - Download the True Official Genuine CryptoPunks™ composite
321
- housing all 10 000 CryptoPunks
322
- in a single 2400×2400 image (~830 kb) for free.
323
- See [`punks.png` »](https://github.com/larvalabs/cryptopunks/blob/master/punks.png)
324
-
325
-
326
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punks-zoom.png)
327
-
328
-
329
-
330
-
331
- Now let's give it a try. Let's save punk #0, #2890, and #8219:
332
-
333
- ```
334
- $ punk tile 0 2890 8219
335
- ```
336
-
337
- printing:
338
-
339
- ```
340
- ==> reading >./punks.png<...
341
- >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
342
- ✓ True Official Genuine CryptoPunks™ verified
343
- ==> (1/3) saving punk #0 to >./punk-0000.png<...
344
- ==> (2/3) saving punk #2890 to >./punk-2890.png<...
345
- ==> (3/3) saving punk #8219 to >./punk-8219.png<...
346
- ```
347
-
348
- And voila!
349
-
350
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000.png)
351
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890.png)
352
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219.png)
353
-
354
-
355
-
356
- **Bonus: Try the `-z/--zoom` factor 2x, 4x, 8x, etc.**
357
-
358
- Let's give it a try. Let's save punk #0, #2890, and #8219 in 2x format:
359
-
360
- ```
361
- $ punk --zoom 2 tile 0 2890 8219
362
- # -or-
363
- $ punk -z2 t 0 2890 8219
364
- ```
365
-
366
- printing:
367
-
368
- ```
369
- ==> reading >./punks.png<...
370
- >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
371
- ✓ True Official Genuine CryptoPunks™ verified
372
- setting zoom to 2x
373
- ==> (1/3) saving punk #0 to >punk-0000@2x.png<...
374
- ==> (2/3) saving punk #2890 to >punk-2890@2x.png<...
375
- ==> (3/3) saving punk #8219 to >punk-8219@2x.png<...
376
- ```
377
-
378
- And voila!
379
-
380
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000x2.png)
381
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890x2.png)
382
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219x2.png)
383
-
384
- And x4:
385
-
386
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000x4.png)
387
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890x4.png)
388
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219x4.png)
389
-
390
-
391
- And x8:
392
-
393
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000x8.png)
394
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890x8.png)
395
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219x8.png)
396
-
397
-
398
- And so on.
399
-
400
-
401
-
402
-
403
- **10 000 More Punks - Unauthorized? No Way?!- Fuck the Establishment - Yes, You Can - Do-It-Yourself - Use Your Own Collections**
404
-
405
-
406
- Use the `-f, --file=FILE` option
407
- to pass along any unauthorized edition.
408
- Only make sure all punks are lined-up left-to-right, top-to-bottom
409
- in the 24x24 pixel format in the composite image.
410
-
411
-
412
- Let's try the 10 000 More Punks series housing punks in
413
- packs of a hundred each. Let's have a looksie at the first 100
414
- in the series.
415
-
416
-
417
- ![](https://github.com/cryptopunksnotdead/awesome-cryptopunks-bubble/raw/master/i/more-punks-1.png)
418
-
419
-
420
-
421
- Let's save punk #0, #19, #50, and #89
422
- and let's add an offset of 10000
423
- (to start counting at 10000 instead of 0):
424
-
425
- ```
426
- $ punk --file ./more-punks-1.png --offset 10000 tile 0 18 40 88
427
- ```
428
-
429
- printing:
430
-
431
- ```
432
- ==> reading >./more-punks-1.png<...
433
- 240x240 (height x width)
434
- ==> (1/4) saving punk #10000 to >./punk-10000.png<...
435
- ==> (2/4) saving punk #10018 to >./punk-10018.png<...
436
- ==> (3/4) saving punk #10040 to >./punk-10040.png<...
437
- ==> (4/4) saving punk #10040 to >./punk-10088.png<...
438
- ```
439
-
440
- And voila!
441
-
442
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10000.png)
443
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10018.png)
444
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10040.png)
445
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10088.png)
446
-
447
-
448
- And 4x:
449
-
450
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10000x4.png)
451
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10018x4.png)
452
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10040x4.png)
453
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10088x4.png)
454
-
455
-
456
-
457
-
458
- Let's try the second pack - that is, punks 100 to 199 in the series.
459
-
460
-
461
- ![](https://github.com/cryptopunksnotdead/awesome-cryptopunks-bubble/raw/master/i/more-punks-2.png)
462
-
463
-
464
-
465
- Let's save punk #0, #79, #80, and #90
466
- and let's add an offset of 10100
467
- (to start counting at 10000 plus 100 instead of 0):
468
-
469
- ```
470
- $ punk --file ./more-punks-2.png --offset 10100 tile 0 79 80 90
471
- ```
472
-
473
- printing:
474
-
475
- ```
476
- ==> reading >./more-punks-2.png<...
477
- 240x240 (height x width)
478
- ==> (1/4) saving punk #10100 to >./punk-10100.png<...
479
- ==> (2/4) saving punk #10179 to >./punk-10179.png<...
480
- ==> (3/4) saving punk #10180 to >./punk-10180.png<...
481
- ==> (4/4) saving punk #10190 to >./punk-10190.png<...
482
- ```
483
-
484
- And voila! Super rare - world's first female alien and much more.
485
-
486
-
487
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10100.png)
488
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10179.png)
489
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10180.png)
490
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10190.png)
491
-
492
-
493
- And 4x:
494
-
495
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10100x4.png)
496
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10179x4.png)
497
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10180x4.png)
498
- ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10190x4.png)
499
-
500
-
501
- And so on.
502
-
503
-
504
-
505
-
506
- ### Flip Command
507
-
508
- _Flip (vertically) all punk characters in all-in-one punk series composite (`./punks.png`)_
509
-
510
-
511
- Let's generate an all new punk series by turning all punks
512
- in the classic series
513
- from right-looking to left-looking
514
- by flipping vertically "one-by-one by hand [thanks to philip the intern]"
515
- all punks. Phree the phunks! Let's give it a try:
516
-
517
- ```
518
- $ punk flip
519
- # - same as -
520
- $ punk --file ./punks.png flip
521
- ```
522
-
523
- printing:
524
-
525
- ```
526
- ==> reading >./punks.png<...
527
- >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
528
- ✓ True Official Genuine CryptoPunks™ verified
529
- (1/10000) philip the intern flipping punk #0...
530
- (2/10000) philip the intern flipping punk #1...
531
- ...
532
- ==> saving phunks flipped one-by-one by hand to >./punks-flipped.png<...
533
- ```
534
-
535
- And voila!
536
-
537
- Yes, you can use any 24x24 composite. Use the `--file` option.
538
- Example - let's flip the 1000 More Punks collection:
539
-
540
- ```
541
- $ punk --file ./morepunks.png flip
542
- ```
543
-
544
- And so on.
545
-
546
-
547
-
548
-
549
- ### Shuffle Command
550
-
551
- _Shuffle all punk characters (randomly) in all-in-one punk series composite (`./punks.png`)_
552
-
553
- Let's generate an all new punks series by randomly shuffling
554
- "one-by-one by hand [thanks to philip the intern]".
555
- Let's give it a try:
556
-
557
- ```
558
- $ punk shuffle
559
- # - same as -
560
- $ punk --file ./punks.png --seed 4142 shuffle
561
- ```
562
-
563
- printing:
564
-
565
- ```
566
- ==> reading >./punks.png<...
567
- >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
568
- True Official Genuine CryptoPunks™ verified
569
- using random generation number seed >4142< for shuffle
570
- #1369 now #0
571
- #590 now #1
572
- #1635 now #2
573
- #3199 now #3
574
- ...
575
- ==> saving p(h)unks shuffled one-by-one by hand to >./punks-4142.png<...
576
- ```
577
-
578
- And voila!
579
-
580
- Note: The shuffle command also prints out
581
- all new index numbers for easy reference (to reuse attributes and so on):
582
-
583
- ```
584
- All 10000 index numbers (zero-based) for reference using seed 4142:
585
-
586
- [1369, 590, 1635, 3199, 1887, 7719, 5747, 2146, 6671, 7144,
587
- 1428, 7817, 1219, 163, 7186, 8488, 7191, 5240, 7226, 6574,
588
- 1619, 1701, 3018, 4745, 2438, 6474, 4756, 9300, 9382, 9528,
589
- 102, 1847, 2848, 8369, 7825, 842, 66, 1035, 2934, 2442,
590
- ...
591
- 8789, 7299, 4403, 5972, 338, 5635, 7566, 828, 8987, 9777]
592
- ```
593
-
594
-
595
-
596
- Yes, you can use any 24x24 composite. Use the `--file` option.
597
- Example - let's flip the 1000 More Punks collection:
598
-
599
- ```
600
- $ punk --file ./morepunks.png shuffle
601
- ```
602
-
603
- And so on.
604
-
605
-
606
-
607
-
608
- ## Usage in Your Scripts
609
-
610
-
611
- Yes, you can generate punks in your own scripts
612
- and much more.
613
- See the
614
- [**Programming CryptoPunks & Copypastas Step-by-Step Booklet / Guide »**](https://github.com/cryptopunksnotdead/programming-cryptopunks)
615
-
616
-
617
-
618
- ## Install
619
-
620
- Just install the gem:
621
-
622
- $ gem install cryptopunks
623
-
624
-
625
- ## License
626
-
627
- The scripts are dedicated to the public domain.
628
- Use it as you please with no restrictions whatsoever.
629
-
630
-
631
- ## Questions? Comments?
632
-
633
- Post them on the [CryptoPunksDev reddit](https://old.reddit.com/r/CryptoPunksDev). Thanks.
1
+ > Someday, owning a Matt & John's® Punk might signify just how early of an
2
+ > adopter you were into the world of blockchain and its thriving digital
3
+ > art scene. Or, they could just be a bunch of [24×24 pixel] images.
4
+ >
5
+ > -- [June 2017](https://mashable.com/2017/06/16/cryptopunks-ethereum-art-collectibles/)
6
+ >
7
+ >
8
+ > There will be a desire and need to buy expensive [status symbols]
9
+ > in the digital realm [to "flex" how rich and stupid I am].
10
+ > What could be more desirable than a small [24×24]
11
+ > pixelated [knitted cap-wearing ape] face?
12
+ > Matt & John's® Punk artwork [![](i/punk-8219.png) [#8219](https://www.larvalabs.com/cryptopunks/details/8219)] just sold for $176,000.
13
+ >
14
+ > -- [January 2021](https://decrypt.co/53519/an-ethereum-based-cryptopunk-artwork-just-sold-for-176000)
15
+ >
16
+ >
17
+ > Ultra-rare alien [24×24 pixel] Matt & John's® Punk
18
+ > sells for 605 ETH, or $750,000.
19
+ > The investment thesis. "Aliens are the rarest form of Matt & John's® Punk and
20
+ > we believe that the acquired Alien [![](i/punk-2890.png) [#2890](https://www.larvalabs.com/cryptopunks/details/2890), one of nine]
21
+ > will be prized by collectors over
22
+ > time and mature into an iconic digital art piece."
23
+ >
24
+ > -- [January 2021](https://cointelegraph.com/news/ultra-rare-alien-cryptopunk-nft-sells-for-605-eth-or-750-000)
25
+ >
26
+ >
27
+ > The Matt & John's® [CryptoPunksMarket] contract now holds 4,095 ETH (~$5.4M USD) in open bids and pending withdrawals.
28
+ >
29
+ > -- [January 2021](https://twitter.com/larvalabs/status/1353915659453870080)
30
+
31
+
32
+
33
+
34
+ # Crypto Punks
35
+
36
+ cryptopunks - generate your own 24×24 pixel punk images (off-chain) from the True Official Matt & John's® Punks sha256-verified original 10 000 unique character collection; incl. 2x/4x/8x zoom for bigger sizes
37
+
38
+ * home :: [github.com/cryptopunksnotdead/cryptopunks](https://github.com/cryptopunksnotdead/cryptopunks)
39
+ * bugs :: [github.com/cryptopunksnotdead/cryptopunks/issues](https://github.com/cryptopunksnotdead/cryptopunks/issues)
40
+ * gem :: [rubygems.org/gems/cryptopunks](https://rubygems.org/gems/cryptopunks)
41
+ * rdoc :: [rubydoc.info/gems/cryptopunks](http://rubydoc.info/gems/cryptopunks)
42
+
43
+
44
+ New to Crypto Punks?
45
+ See the [**Awesome CryptoPunks Bubble (Anno 2021) - Modern 24×24 Pixel Crypto Art on the Blockchain** »](https://github.com/cryptopunksnotdead/awesome-cryptopunks-bubble)
46
+
47
+
48
+
49
+ ## Command Line
50
+
51
+ Use the `punk` (or `cryptopunk`) command line tool. Try:
52
+
53
+ ```
54
+ $ punk -h
55
+ ```
56
+
57
+ resulting in:
58
+
59
+ ```
60
+ NAME
61
+ punk - punk (or cryptopunk) command line tool
62
+
63
+ SYNOPSIS
64
+ punk [global options] command [command options] [arguments...]
65
+
66
+ VERSION
67
+ 3.0.0
68
+
69
+ GLOBAL OPTIONS
70
+ -d, --dir,
71
+ -o, --out, --outdir=DIR - Output directory (default: .)
72
+ -f, --file=FILE - All-in-one
73
+ composite image (default: ./punks.png)
74
+ --offset=NUM - Start counting at offset (default: 0)
75
+ --seed=NUM - Seed for random number generation /
76
+ shuffle (default: 4142)
77
+ -z, --zoom=ZOOM - Zoom factor x2, x4, x8, etc. (default: 1)
78
+
79
+ --help - Show this message
80
+ --version - Display the program version
81
+ --verbose - (Debug) Show debug messages
82
+
83
+
84
+ COMMANDS
85
+ g, gen, generate - Generate punk characters from text attributes (from
86
+ scratch / zero) via builtin punk spritesheet
87
+ l, ls, list - List all punk archetype and attribute names from builtin
88
+ punk spritesheet
89
+ q, query - Query (builtin off-chain) punk contract for punk text
90
+ attributes by IDs - use 0 to 9999
91
+ t, tile - Get punk characters via image tiles from all-in-one punk
92
+ series composite (./punks.png) - for IDs use 0 to 9999
93
+ f, flip - Flip (vertically) all punk characters in all-in-one punk
94
+ series composite (./punks.png)
95
+ s, shuffle - Shuffle all punk characters (randomly) in all-in-one
96
+ punk series composite (./punks.png)
97
+
98
+ help - Shows a list of commands or help for one command
99
+ ```
100
+
101
+
102
+ ### Generate Command
103
+
104
+ _Generate punk characters from text attributes (from scratch / zero) via builtin punk spritesheet_
105
+
106
+
107
+ Let's try punk #0:
108
+
109
+ ```
110
+ $ punk generate female_2 earring blonde_bob green_eye_shadow
111
+ ```
112
+
113
+ resulting in:
114
+
115
+ ![](i/punk-0000.png)
116
+
117
+ Let's try the `-z/--zoom` factor 2x, 4x, 8x, etc.:
118
+
119
+ ```
120
+ $ punk --zoom 4 generate female_2 earring blonde_bob green_eye_shadow
121
+ # -or-
122
+ $ punk -z2 g female_2 earring blonde_bob green_eye_shadow
123
+ ```
124
+
125
+ resulting in:
126
+
127
+ 2x ![](i/punk-0000x2.png)
128
+ 4x ![](i/punk-0000x4.png)
129
+ 8x ![](i/punk-0000x8.png)
130
+
131
+
132
+ Let's try never-before-seen super-rare punks:
133
+
134
+ ```
135
+ $ punk generate demon heart_shades
136
+ $ punk generate vampire_female wild_hair
137
+ ```
138
+
139
+ resulting in:
140
+
141
+ ![](i/demon.png)
142
+ ![](i/vampire-female.png)
143
+
144
+
145
+
146
+ Q: What punk archetypes and attributes can I use?
147
+
148
+ A: See the list command.
149
+
150
+
151
+ ### List Command
152
+
153
+ _List all punk archetype and attribute names from builtin punk spritesheet_
154
+
155
+
156
+ Let's try:
157
+
158
+ ```
159
+ $ punk list
160
+ # -or-
161
+ $ punk ls
162
+ ```
163
+
164
+ resulting in:
165
+
166
+ ```
167
+ ==> Archetypes
168
+ Male 1 / (m) - Archetype - Human
169
+ Male 2 / (m) - Archetype - Human
170
+ Male 3 / (m) - Archetype - Human
171
+ Male 4 / (m) - Archetype - Human
172
+ Female 1 / (f) - Archetype - Human
173
+ Female 2 / (f) - Archetype - Human
174
+ Female 3 / (f) - Archetype - Human
175
+ Female 4 / (f) - Archetype - Human
176
+ Zombie / (m) - Archetype - Zombie
177
+ Zombie Female / (f) - Archetype - Zombie
178
+ Ape / (m) - Archetype - Ape
179
+ Ape Female / (f) - Archetype - Ape
180
+ Alien / (m) - Archetype - Alien
181
+ Alien Female / (f) - Archetype - Alien
182
+ Demon / (m) - Archetype - Demon
183
+ Demon Female / (f) - Archetype - Demon
184
+ Mummy / (m) - Archetype - Mummy
185
+ Mummy Female / (f) - Archetype - Mummy
186
+ Orc / (m) - Archetype - Orc
187
+ Orc Female / (f) - Archetype - Orc
188
+ Robot / (m) - Archetype - Robot
189
+ Robot Female / (f) - Archetype - Robot
190
+ Skeleton / (m) - Archetype - Skeleton
191
+ Skeleton Female / (f) - Archetype - Skeleton
192
+ Vampire / (m) - Archetype - Vampire
193
+ Vampire Female / (f) - Archetype - Vampire
194
+ Zombie (Ape) / (m) - Archetype - Zombie
195
+ Alien (Ape) / (m) - Archetype - Alien
196
+ Alien 0° / (m) - Archetype - Alien
197
+ Alien 30° / (m) - Archetype - Alien
198
+ Alien 60° / (m) - Archetype - Alien
199
+ Alien 90° / (m) - Archetype - Alien
200
+ Alien 120° / (m) - Archetype - Alien
201
+ Alien 150° / (m) - Archetype - Alien
202
+ Alien 180° / (m) - Archetype - Alien
203
+ Alien 210° / (m) - Archetype - Alien
204
+ Alien 240° / (m) - Archetype - Alien
205
+ Alien 270° / (m) - Archetype - Alien
206
+ Alien 300° / (m) - Archetype - Alien
207
+ Alien 330° / (m) - Archetype - Alien
208
+ Alien (Ape) / (m) - Archetype - Alien
209
+ Alien (Ape) 30° / (m) - Archetype - Alien
210
+ Alien (Ape) 60° / (m) - Archetype - Alien
211
+ Alien (Ape) 90° / (m) - Archetype - Alien
212
+ Alien (Ape) 120° / (m) - Archetype - Alien
213
+ Alien (Ape) 150° / (m) - Archetype - Alien
214
+ Alien (Ape) 180° / (m) - Archetype - Alien
215
+ Alien (Ape) 210° / (m) - Archetype - Alien
216
+ Alien (Ape) 240° / (m) - Archetype - Alien
217
+ Alien (Ape) 270° / (m) - Archetype - Alien
218
+ Alien (Ape) 300° / (m) - Archetype - Alien
219
+ Alien (Ape) 330° / (m) - Archetype - Alien
220
+ Alien Female 0° / (f) - Archetype - Alien
221
+ Alien Female 30° / (f) - Archetype - Alien
222
+ Alien Female 60° / (f) - Archetype - Alien
223
+ Alien Female 90° / (f) - Archetype - Alien
224
+ Alien Female 120° / (f) - Archetype - Alien
225
+ Alien Female 150° / (f) - Archetype - Alien
226
+ Alien Female 180° / (f) - Archetype - Alien
227
+ Alien Female 210° / (f) - Archetype - Alien
228
+ Alien Female 240° / (f) - Archetype - Alien
229
+ Alien Female 270° / (f) - Archetype - Alien
230
+ Alien Female 300° / (f) - Archetype - Alien
231
+ Alien Female 330° / (f) - Archetype - Alien
232
+
233
+ ==> Attributes
234
+ 3D Glasses / (m) - Attribute
235
+ 3D Glasses / (f) - Attribute
236
+ Bandana / (m) - Attribute
237
+ Bandana / (f) - Attribute
238
+ Beanie / (m) - Attribute
239
+ Beanie / (f) - Attribute
240
+ Big Beard / (m) - Attribute
241
+ Big Shades / (m) - Attribute
242
+ Big Shades / (f) - Attribute
243
+ Black Lipstick / (f) - Attribute
244
+ Blonde Bob / (f) - Attribute
245
+ Blonde Short / (f) - Attribute
246
+ Blue Eye Shadow / (f) - Attribute
247
+ Buck Teeth / (m) - Attribute
248
+ Cap / (m) - Attribute
249
+ Cap / (f) - Attribute
250
+ Cap Forward / (m) - Attribute
251
+ Cap Forward / (f) - Attribute
252
+ Chinstrap / (m) - Attribute
253
+ Choker / (f) - Attribute
254
+ Cigarette / (m) - Attribute
255
+ Cigarette / (f) - Attribute
256
+ Classic Shades / (m) - Attribute
257
+ Classic Shades / (f) - Attribute
258
+ Clown Eyes Blue / (m) - Attribute
259
+ Clown Eyes Blue / (f) - Attribute
260
+ Clown Eyes Green / (m) - Attribute
261
+ Clown Eyes Green / (f) - Attribute
262
+ Clown Hair Green / (m) - Attribute
263
+ Clown Hair Green / (f) - Attribute
264
+ Clown Nose / (m) - Attribute
265
+ Clown Nose / (f) - Attribute
266
+ Cowboy Hat / (m) - Attribute
267
+ Cowboy Hat / (f) - Attribute
268
+ Crazy Hair / (m) - Attribute
269
+ Crazy Hair / (f) - Attribute
270
+ Dark Hair / (f) - Attribute
271
+ Do-rag / (m) - Attribute
272
+ Do-rag / (f) - Attribute
273
+ Earring / (m) - Attribute
274
+ Earring / (f) - Attribute
275
+ Eye Mask / (m) - Attribute
276
+ Eye Mask / (f) - Attribute
277
+ Eye Patch / (m) - Attribute
278
+ Eye Patch / (f) - Attribute
279
+ Fedora / (m) - Attribute
280
+ Fedora / (f) - Attribute
281
+ Front Beard / (m) - Attribute
282
+ Front Beard Dark / (m) - Attribute
283
+ Frown / (m) - Attribute
284
+ Frumpy Hair / (m) - Attribute
285
+ Frumpy Hair / (f) - Attribute
286
+ Green Eye Shadow / (f) - Attribute
287
+ Goat / (m) - Attribute
288
+ Gold Chain / (m) - Attribute
289
+ Gold Chain / (f) - Attribute
290
+ ...
291
+ ```
292
+
293
+ See the [**punks.spritesheet**](https://github.com/cryptopunksnotdead/punks.spritesheet) for more.
294
+
295
+
296
+
297
+
298
+ ### Query Command
299
+
300
+ _Query (builtin off-chain) punk contract for punk text attributes by IDs - use 0 to 9999_
301
+
302
+
303
+ Let's try punk #0:
304
+
305
+ ```
306
+ $ punk query 0
307
+ # -or-
308
+ $ punk q 0
309
+ ```
310
+
311
+ resulting in:
312
+
313
+ ```
314
+ ==> (1/1) punk #0...
315
+ female_2 earring blonde_bob green_eye_shadow
316
+ ```
317
+
318
+ Let's try some top sellers:
319
+
320
+ ```
321
+ $ punk query 7804 3100 5217 8857
322
+ # -or-
323
+ $ punk q 7804 3100 5217 8857
324
+ ```
325
+
326
+ resulting in:
327
+
328
+ ```
329
+ ==> (1/4) punk #7804...
330
+ alien cap_forward pipe small_shades
331
+ ==> (2/4) punk #3100...
332
+ alien headband
333
+ ==> (3/4) punk #5217...
334
+ ape gold_chain knitted_cap
335
+ ==> (4/4) punk #8857...
336
+ zombie wild_hair 3d_glasses
337
+ ```
338
+
339
+ Note: Yes, you can pass the text attributes to the generate command
340
+ to get a free "cleanroom" copy built from scratch / zero
341
+ that you own 100% forever.
342
+
343
+
344
+
345
+ ### Tile Command
346
+
347
+ _Get punk characters via image tiles from all-in-one punk series composite (`./punks.png`) - for IDs use 0 to 9999_
348
+
349
+
350
+
351
+ Step 0 - Download the True Official Genuine CryptoPunks™ composite image
352
+
353
+ One time / first time only - Download the True Official Genuine Matt & John's® Punks composite
354
+ housing all 10 000 Punks
355
+ in a single 2400×2400 image (~830 kb) for free.
356
+ See [`punks.png` »](https://github.com/larvalabs/cryptopunks/blob/master/punks.png)
357
+
358
+
359
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punks-zoom.png)
360
+
361
+
362
+
363
+
364
+ Now let's give it a try. Let's save punk #0, #2890, and #8219:
365
+
366
+ ```
367
+ $ punk tile 0 2890 8219
368
+ ```
369
+
370
+ printing:
371
+
372
+ ```
373
+ ==> reading >./punks.png<...
374
+ >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
375
+ True Official Genuine Matt & John's® Punks verified
376
+ ==> (1/3) saving punk #0 to >./punk-0000.png<...
377
+ ==> (2/3) saving punk #2890 to >./punk-2890.png<...
378
+ ==> (3/3) saving punk #8219 to >./punk-8219.png<...
379
+ ```
380
+
381
+ And voila!
382
+
383
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000.png)
384
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890.png)
385
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219.png)
386
+
387
+
388
+
389
+ **Bonus: Try the `-z/--zoom` factor 2x, 4x, 8x, etc.**
390
+
391
+ Let's give it a try. Let's save punk #0, #2890, and #8219 in 2x format:
392
+
393
+ ```
394
+ $ punk --zoom 2 tile 0 2890 8219
395
+ # -or-
396
+ $ punk -z2 t 0 2890 8219
397
+ ```
398
+
399
+ printing:
400
+
401
+ ```
402
+ ==> reading >./punks.png<...
403
+ >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
404
+ ✓ True Official Genuine Matt & John's® Punks verified
405
+ setting zoom to 2x
406
+ ==> (1/3) saving punk #0 to >punk-0000@2x.png<...
407
+ ==> (2/3) saving punk #2890 to >punk-2890@2x.png<...
408
+ ==> (3/3) saving punk #8219 to >punk-8219@2x.png<...
409
+ ```
410
+
411
+ And voila!
412
+
413
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000x2.png)
414
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890x2.png)
415
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219x2.png)
416
+
417
+ And x4:
418
+
419
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000x4.png)
420
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890x4.png)
421
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219x4.png)
422
+
423
+
424
+ And x8:
425
+
426
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-0000x8.png)
427
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-2890x8.png)
428
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-8219x8.png)
429
+
430
+
431
+ And so on.
432
+
433
+
434
+
435
+
436
+ **10 000 More Punks - Unauthorized? No Way?!- Fuck the Establishment - Yes, You Can - Do-It-Yourself - Use Your Own Collections**
437
+
438
+
439
+ Use the `-f, --file=FILE` option
440
+ to pass along any unauthorized edition.
441
+ Only make sure all punks are lined-up left-to-right, top-to-bottom
442
+ in the 24x24 pixel format in the composite image.
443
+
444
+
445
+ Let's try the 10 000 More Punks series housing punks in
446
+ packs of a hundred each. Let's have a looksie at the first 100
447
+ in the series.
448
+
449
+
450
+ ![](https://github.com/cryptopunksnotdead/awesome-cryptopunks-bubble/raw/master/i/more-punks-1.png)
451
+
452
+
453
+
454
+ Let's save punk #0, #19, #50, and #89
455
+ and let's add an offset of 10000
456
+ (to start counting at 10000 instead of 0):
457
+
458
+ ```
459
+ $ punk --file ./more-punks-1.png --offset 10000 tile 0 18 40 88
460
+ ```
461
+
462
+ printing:
463
+
464
+ ```
465
+ ==> reading >./more-punks-1.png<...
466
+ 240x240 (height x width)
467
+ ==> (1/4) saving punk #10000 to >./punk-10000.png<...
468
+ ==> (2/4) saving punk #10018 to >./punk-10018.png<...
469
+ ==> (3/4) saving punk #10040 to >./punk-10040.png<...
470
+ ==> (4/4) saving punk #10040 to >./punk-10088.png<...
471
+ ```
472
+
473
+ And voila!
474
+
475
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10000.png)
476
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10018.png)
477
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10040.png)
478
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10088.png)
479
+
480
+
481
+ And 4x:
482
+
483
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10000x4.png)
484
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10018x4.png)
485
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10040x4.png)
486
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10088x4.png)
487
+
488
+
489
+
490
+
491
+ Let's try the second pack - that is, punks 100 to 199 in the series.
492
+
493
+
494
+ ![](https://github.com/cryptopunksnotdead/awesome-cryptopunks-bubble/raw/master/i/more-punks-2.png)
495
+
496
+
497
+
498
+ Let's save punk #0, #79, #80, and #90
499
+ and let's add an offset of 10100
500
+ (to start counting at 10000 plus 100 instead of 0):
501
+
502
+ ```
503
+ $ punk --file ./more-punks-2.png --offset 10100 tile 0 79 80 90
504
+ ```
505
+
506
+ printing:
507
+
508
+ ```
509
+ ==> reading >./more-punks-2.png<...
510
+ 240x240 (height x width)
511
+ ==> (1/4) saving punk #10100 to >./punk-10100.png<...
512
+ ==> (2/4) saving punk #10179 to >./punk-10179.png<...
513
+ ==> (3/4) saving punk #10180 to >./punk-10180.png<...
514
+ ==> (4/4) saving punk #10190 to >./punk-10190.png<...
515
+ ```
516
+
517
+ And voila! Super rare - world's first female alien and much more.
518
+
519
+
520
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10100.png)
521
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10179.png)
522
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10180.png)
523
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10190.png)
524
+
525
+
526
+ And 4x:
527
+
528
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10100x4.png)
529
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10179x4.png)
530
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10180x4.png)
531
+ ![](https://github.com/cryptopunksnotdead/cryptopunks/raw/master/cryptopunks/i/punk-10190x4.png)
532
+
533
+
534
+ And so on.
535
+
536
+
537
+
538
+
539
+ ### Flip Command
540
+
541
+ _Flip (vertically) all punk characters in all-in-one punk series composite (`./punks.png`)_
542
+
543
+
544
+ Let's generate an all new punk series by turning all punks
545
+ in the classic series
546
+ from right-looking to left-looking
547
+ by flipping vertically "one-by-one by hand [thanks to philip the intern]"
548
+ all punks. Phree the phunks! Let's give it a try:
549
+
550
+ ```
551
+ $ punk flip
552
+ # - same as -
553
+ $ punk --file ./punks.png flip
554
+ ```
555
+
556
+ printing:
557
+
558
+ ```
559
+ ==> reading >./punks.png<...
560
+ >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
561
+ ✓ True Official Genuine Matt & John's® Punks verified
562
+ (1/10000) philip the intern flipping punk #0...
563
+ (2/10000) philip the intern flipping punk #1...
564
+ ...
565
+ ==> saving phunks flipped one-by-one by hand to >./punks-flipped.png<...
566
+ ```
567
+
568
+ And voila!
569
+
570
+ Yes, you can. Use any all-in-one composite image in the 24x24 format. Use the `--file` option.
571
+ Example - let's flip the 1000 More Punks collection:
572
+
573
+ ```
574
+ $ punk --file ./morepunks.png flip
575
+ ```
576
+
577
+ And so on.
578
+
579
+
580
+
581
+
582
+ ### Shuffle Command
583
+
584
+ _Shuffle all punk characters (randomly) in all-in-one punk series composite (`./punks.png`)_
585
+
586
+ Let's generate an all new punks series by randomly shuffling
587
+ "one-by-one by hand [thanks to philip the intern]" all punks.
588
+ Let's give it a try:
589
+
590
+ ```
591
+ $ punk shuffle
592
+ # - same as -
593
+ $ punk --file ./punks.png --seed 4142 shuffle
594
+ ```
595
+
596
+ printing:
597
+
598
+ ```
599
+ ==> reading >./punks.png<...
600
+ >ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b< SHA256 hash matching
601
+ ✓ True Official Genuine Matt & John's® Punks verified
602
+ using random generation number seed >4142< for shuffle
603
+ #1369 now #0
604
+ #590 now #1
605
+ #1635 now #2
606
+ #3199 now #3
607
+ ...
608
+ ==> saving p(h)unks shuffled one-by-one by hand to >./punks-4142.png<...
609
+ ```
610
+
611
+ And voila!
612
+
613
+ Note: The shuffle command also prints out
614
+ all new index numbers for easy reference (to reuse attributes and so on):
615
+
616
+ ```
617
+ All 10000 index numbers (zero-based) for reference using seed 4142:
618
+
619
+ [1369, 590, 1635, 3199, 1887, 7719, 5747, 2146, 6671, 7144,
620
+ 1428, 7817, 1219, 163, 7186, 8488, 7191, 5240, 7226, 6574,
621
+ 1619, 1701, 3018, 4745, 2438, 6474, 4756, 9300, 9382, 9528,
622
+ 102, 1847, 2848, 8369, 7825, 842, 66, 1035, 2934, 2442,
623
+ ...
624
+ 8789, 7299, 4403, 5972, 338, 5635, 7566, 828, 8987, 9777]
625
+ ```
626
+
627
+
628
+
629
+ Yes, you can. Use any all-in-one composite image in the 24x24 format. Use the `--file` option.
630
+ Example - let's shuffle the 1000 More Punks collection:
631
+
632
+ ```
633
+ $ punk --file ./morepunks.png shuffle
634
+ ```
635
+
636
+ And so on.
637
+
638
+
639
+
640
+
641
+ ## Usage in Your Scripts
642
+
643
+
644
+ Yes, you can generate punks in your own scripts
645
+ and much more.
646
+ See the
647
+ [**Programming CryptoPunks & Copypastas Step-by-Step Booklet / Guide »**](https://github.com/cryptopunksnotdead/programming-cryptopunks)
648
+
649
+
650
+
651
+ ## Install
652
+
653
+ Just install the gem:
654
+
655
+ $ gem install cryptopunks
656
+
657
+
658
+ ## License
659
+
660
+ The scripts are dedicated to the public domain.
661
+ Use it as you please with no restrictions whatsoever.
662
+
663
+
664
+ ## Questions? Comments?
665
+
666
+ Post them on the [D.I.Y. Punk (Pixel) Art reddit](https://old.reddit.com/r/DIYPunkArt). Thanks.