cryptopunks 2024.2.29 → 2024.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87c03c79927af52b3756913e3a08942cbf07334520ca360d7832ec69bdd4d8db
4
- data.tar.gz: ae8e96d0926920951cf1154e218e4535f7f5559bb79a7bcc5225fb701a1a8669
3
+ metadata.gz: 1fc2a706ce8c4e9ec5947d4bde3a88b4529b1d3af04b092a71de20bbdd28bca6
4
+ data.tar.gz: 03f0600b6564f8d1d25fccf624adca0bd38b38c52754135aae9dd8b04d63e4b4
5
5
  SHA512:
6
- metadata.gz: d5c4037f12c60031af368c7b296732a9fc28c155efa218dd988ef0ed29bb28dcd816ae8c7777bb668591fb4bd1208bdc77f463ecc50f7cbb286d98e0c8791c01
7
- data.tar.gz: a629cb29a1caf1f97b678f5305d591b2d61c29bbadb69e3bc51a2754a56c53fc3345fb4b5669f55df12db7ca96a69ebce584dc3cbf630ca07b82e57119afe85e
6
+ metadata.gz: dced1456b9cb0755cc9ec34c8efede1c6d355ce93ff2b295b0dec2b354f6e0d982ec7390e2a1823377cf6f551519e14786507a24d59b8a297c5d8c80ecedd2b0
7
+ data.tar.gz: '088061933c9355d88ea903fbc6e679b938d8cce1b4176919ffda66cc750efb53f300bac149bc42c9214934e617d8378d124e491be960aec1d338f6ed0a92ee0c'
data/Manifest.txt CHANGED
@@ -7,7 +7,6 @@ bin/punk
7
7
  lib/cryptopunks.rb
8
8
  lib/cryptopunks/attributes.rb
9
9
  lib/cryptopunks/colors.rb
10
- lib/cryptopunks/composite.rb
11
10
  lib/cryptopunks/contract/punksdata-assets.rb
12
11
  lib/cryptopunks/contract/punksdata-contract.rb
13
12
  lib/cryptopunks/contract/punksdata-meta.rb
data/README.md CHANGED
@@ -33,7 +33,7 @@
33
33
 
34
34
  # Crypto Punks
35
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
36
+ cryptopunks - generate your own 24×24 pixel punk images from text prompts incl. 2x/4x/8x zoom for bigger sizes (or crop 'n' save tiles from all-in-one composites incl. the True Official Matt & John's® Punks sha256-verified original 10 000 unique character collection)
37
37
 
38
38
  * home :: [github.com/cryptopunksnotdead/cryptopunks](https://github.com/cryptopunksnotdead/cryptopunks)
39
39
  * bugs :: [github.com/cryptopunksnotdead/cryptopunks/issues](https://github.com/cryptopunksnotdead/cryptopunks/issues)
@@ -67,24 +67,23 @@ VERSION
67
67
  3.0.0
68
68
 
69
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)
70
+ -o, --out, --dir, --outdir=DIR - Output directory (default: .)
71
+ -f, --file=FILE - All-in-one
72
+ composite image (default: ./punks.png)
73
+ --offset=NUM - Start counting at offset (default: 0)
74
+ --seed=NUM - Seed for random number generation /
75
+ shuffle (default: 4142)
76
+ -z, --zoom=NUM - Zoom factor x2, x4, x8, etc. (default: 1)
78
77
 
79
- --help - Show this message
80
- --version - Display the program version
81
- --verbose - (Debug) Show debug messages
78
+ --help - Show this message
79
+ --version - Display the program version
80
+ --verbose - (Debug) Show debug messages
82
81
 
83
82
 
84
83
  COMMANDS
85
- g, gen, generate - Generate punk characters from text attributes (from
84
+ g, gen, - Generate punk characters from text attributes (from
86
85
  scratch / zero) via builtin punk spritesheet
87
- l, ls, list - List all punk archetype and attribute names from builtin
86
+ l, ls - List all punk archetype and attribute names from builtin
88
87
  punk spritesheet
89
88
  q, query - Query (builtin off-chain) punk contract for punk text
90
89
  attributes by IDs - use 0 to 9999
@@ -107,7 +106,7 @@ _Generate punk characters from text attributes (from scratch / zero) via builtin
107
106
  Let's try punk #0:
108
107
 
109
108
  ```
110
- $ punk generate female_2 earring blonde_bob green_eye_shadow
109
+ $ punk gen female_2 earring blonde_bob green_eye_shadow
111
110
  ```
112
111
 
113
112
  resulting in:
@@ -117,9 +116,9 @@ resulting in:
117
116
  Let's try the `-z/--zoom` factor 2x, 4x, 8x, etc.:
118
117
 
119
118
  ```
120
- $ punk --zoom 4 generate female_2 earring blonde_bob green_eye_shadow
119
+ $ punk --zoom=4 gen female_2 earring blonde_bob green_eye_shadow
121
120
  # -or-
122
- $ punk -z2 g female_2 earring blonde_bob green_eye_shadow
121
+ $ punk -z4 g female_2 earring blonde_bob green_eye_shadow
123
122
  ```
124
123
 
125
124
  resulting in:
@@ -132,8 +131,8 @@ resulting in:
132
131
  Let's try never-before-seen super-rare punks:
133
132
 
134
133
  ```
135
- $ punk generate demon heart_shades
136
- $ punk generate vampire_female wild_hair
134
+ $ punk gen demon heart_shades
135
+ $ punk gen vampire_female wild_hair
137
136
  ```
138
137
 
139
138
  resulting in:
@@ -156,9 +155,9 @@ _List all punk archetype and attribute names from builtin punk spritesheet_
156
155
  Let's try:
157
156
 
158
157
  ```
159
- $ punk list
160
- # -or-
161
158
  $ punk ls
159
+ # -or-
160
+ $ punk l
162
161
  ```
163
162
 
164
163
  resulting in:
@@ -391,7 +390,7 @@ And voila!
391
390
  Let's give it a try. Let's save punk #0, #2890, and #8219 in 2x format:
392
391
 
393
392
  ```
394
- $ punk --zoom 2 tile 0 2890 8219
393
+ $ punk --zoom=2 tile 0 2890 8219
395
394
  # -or-
396
395
  $ punk -z2 t 0 2890 8219
397
396
  ```
@@ -456,7 +455,7 @@ and let's add an offset of 10000
456
455
  (to start counting at 10000 instead of 0):
457
456
 
458
457
  ```
459
- $ punk --file ./more-punks-1.png --offset 10000 tile 0 18 40 88
458
+ $ punk --file=./more-punks-1.png --offset=10000 tile 0 18 40 88
460
459
  ```
461
460
 
462
461
  printing:
@@ -500,7 +499,7 @@ and let's add an offset of 10100
500
499
  (to start counting at 10000 plus 100 instead of 0):
501
500
 
502
501
  ```
503
- $ punk --file ./more-punks-2.png --offset 10100 tile 0 79 80 90
502
+ $ punk --file=./more-punks-2.png --offset=10100 tile 0 79 80 90
504
503
  ```
505
504
 
506
505
  printing:
@@ -550,7 +549,7 @@ all punks. Phree the phunks! Let's give it a try:
550
549
  ```
551
550
  $ punk flip
552
551
  # - same as -
553
- $ punk --file ./punks.png flip
552
+ $ punk --file=./punks.png flip
554
553
  ```
555
554
 
556
555
  printing:
@@ -571,7 +570,7 @@ Yes, you can. Use any all-in-one composite image in the 24x24 format. Use the `
571
570
  Example - let's flip the 1000 More Punks collection:
572
571
 
573
572
  ```
574
- $ punk --file ./morepunks.png flip
573
+ $ punk --file=./morepunks.png flip
575
574
  ```
576
575
 
577
576
  And so on.
@@ -590,7 +589,7 @@ Let's give it a try:
590
589
  ```
591
590
  $ punk shuffle
592
591
  # - same as -
593
- $ punk --file ./punks.png --seed 4142 shuffle
592
+ $ punk --file=./punks.png --seed=4142 shuffle
594
593
  ```
595
594
 
596
595
  printing:
@@ -630,7 +629,7 @@ Yes, you can. Use any all-in-one composite image in the 24x24 format. Use the `
630
629
  Example - let's shuffle the 1000 More Punks collection:
631
630
 
632
631
  ```
633
- $ punk --file ./morepunks.png shuffle
632
+ $ punk --file=./morepunks.png shuffle
634
633
  ```
635
634
 
636
635
  And so on.
@@ -663,4 +662,9 @@ Use it as you please with no restrictions whatsoever.
663
662
 
664
663
  ## Questions? Comments?
665
664
 
666
- Post them on the [D.I.Y. Punk (Pixel) Art reddit](https://old.reddit.com/r/DIYPunkArt). Thanks.
665
+ Join us in the [Punk Art discord (chat server)]( https://discord.gg/FE3HeXNKRa). Yes you can.
666
+ Your questions and commentary welcome.
667
+
668
+
669
+ Or post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.
670
+
data/Rakefile CHANGED
@@ -13,7 +13,7 @@ Hoe.spec 'cryptopunks' do
13
13
 
14
14
  self.version = Pixelart::Module::Cryptopunks::VERSION
15
15
 
16
- self.summary = "cryptopunks - generate your own 24×24 pixel punk images (off-chain) from the Official Genuine Matt & John's® Punks sha256-verified original 10 000 unique character collection; incl. 2x/4x/8x zoom for bigger sizes"
16
+ self.summary = "cryptopunks - generate your own 24×24 pixel punk images from text prompts incl. 2x/4x/8x zoom for bigger sizes (or crop 'n' save tiles from all-in-one composites incl. the True Official Matt & John's® Punks sha256-verified original 10 000 unique character collection)"
17
17
  self.description = summary
18
18
 
19
19
  self.urls = { home: 'https://github.com/cryptopunksnotdead/cryptopunks' }
@@ -28,7 +28,7 @@ Hoe.spec 'cryptopunks' do
28
28
  self.extra_deps = [
29
29
  ['pixelart', '>= 1.3.2'],
30
30
  ['punks', '>= 2024.2.29'],
31
- ['gli'],
31
+ ['cmdparse'],
32
32
  ]
33
33
 
34
34
  self.licenses = ['Public Domain']
@@ -1,127 +1,112 @@
1
1
 
2
2
  module Punk
3
3
 
4
-
5
4
  class Tool
6
- def run( args )
7
- Toolii.run( args )
8
- end
9
- end
10
-
11
-
12
-
13
- class Opts
14
- def merge_gli_options!( options = {} )
15
- # puts " update options:"
16
- # puts options.inspect
17
-
18
- @file = options[:file] if options[:file]
19
- @outdir = options[:dir] if options[:dir]
20
-
21
- @zoom = options[:zoom] if options[:zoom]
22
- @offset = options[:offset] if options[:offset]
23
-
24
- @seed = options[:seed] if options[:seed]
25
-
26
- @verbose = true if options[:verbose] == true
27
- end
28
-
29
-
30
- def verbose=(boolean) # add: alias for debug ??
31
- @verbose = boolean
32
- end
33
-
34
- def verbose?
35
- return false if @verbose.nil? # default verbose/debug flag is false
36
- @verbose == true
37
- end
38
-
39
- def file() @file || './punks.png'; end
40
- def file?() @file; end ## note: let's you check if file is set (or "untouched")
41
-
42
- def zoom() @zoom || 1; end
43
- def zoom?() @zoom; end
44
-
45
- def offset() @offset || 0; end
46
- def offset?() @offset; end
47
-
48
- def outdir() @outdir || '.'; end
49
- def outdir?() @outdir; end
50
-
51
- ### use a standard (default) seed - why? why not?
52
- def seed() @seed || 4142; end
53
- def seed?() @seed; end
54
-
55
-
56
-
57
- end # class Opts
58
-
59
-
60
-
61
- ## note: use gli "dsl" inside a class / namespace
62
- class Toolii
63
- extend GLI::App
64
-
65
- opts = Opts.new
66
-
67
-
68
- program_desc 'punk (or cryptopunk) command line tool'
69
-
70
- version Pixelart::Module::Cryptopunks::VERSION
71
-
72
-
73
- desc "Zoom factor x2, x4, x8, etc."
74
- arg_name 'ZOOM'
75
- default_value opts.zoom
76
- flag [:z, :zoom], type: Integer
77
-
78
- desc "Start counting at offset"
79
- arg_name 'NUM'
80
- default_value opts.offset
81
- flag [:offset], type: Integer
82
-
83
-
84
- desc "Seed for random number generation / shuffle"
85
- arg_name 'NUM'
86
- default_value opts.seed
87
- flag [:seed], type: Integer
88
-
89
-
90
-
91
- desc "Output directory"
92
- arg_name 'DIR'
93
- default_value opts.outdir
94
- flag [:d, :dir,
95
- :o, :out, :outdir], type: String
96
-
97
-
98
- ### todo/check: move option to -t/--tile command only - why? why not?
99
- # desc "True Official Genuine CryptoPunks™ all-in-one composite image"
100
- desc "All-in-one composite image"
101
- arg_name 'FILE'
102
- default_value opts.file
103
- flag [:f, :file], type: String
104
-
105
-
106
-
107
- ### global option (required)
108
- ## todo: add check that path is valid?? possible?
109
- desc '(Debug) Show debug messages'
110
- switch [:verbose], negatable: false ## todo: use -w for short form? check ruby interpreter if in use too?
111
5
 
6
+ class Opts ## use nested Opts class (inside Tool) - why? why not?
7
+ def verbose=(boolean) # add: alias for debug ??
8
+ @verbose = boolean
9
+ end
10
+
11
+ def verbose?
12
+ return false if @verbose.nil? # default verbose/debug flag is false
13
+ @verbose == true
14
+ end
15
+
16
+ def file() @file || './punks.png'; end
17
+ def file?() @file; end ## note: let's you check if file is set (or "untouched")
18
+ def file=(file) @file = file; end
19
+
20
+ def zoom() @zoom || 1; end
21
+ def zoom?() @zoom; end
22
+ def zoom=(num) @zoom = num; end
23
+
24
+ def offset() @offset || 0; end
25
+ def offset?() @offset; end
26
+ def offset=(num) @offset = num; end
27
+
28
+ def outdir() @outdir || '.'; end
29
+ def outdir?() @outdir; end
30
+ def outdir=(dir) @outdir = dir; end
31
+
32
+ ### use a standard (default) seed - why? why not?
33
+ def seed() @seed || 4142; end
34
+ def seed?() @seed; end
35
+ def seed=(num) @seed = num; end
36
+ end # class Opts
37
+
38
+
39
+ ## use def self.run instead of run e.g.
40
+ ## Tool.run( ARGV ) vs Tool.new.run( ARGV )
41
+ def run( args )
42
+ opts = Opts.new
43
+
44
+ parser = CmdParse::CommandParser.new(handle_exceptions: :no_help)
45
+ parser.main_options.program_name = 'punk'
46
+ parser.main_options.banner = 'punk (or cryptopunk) command line tool'
47
+ parser.main_options.version = Pixelart::Module::Cryptopunks::VERSION
48
+
49
+
50
+
51
+ parser.global_options do |opt|
52
+ opt.on( '-z', '--zoom=NUM', Integer,
53
+ "Zoom factor x2, x4, x8, etc. (default: #{opts.zoom})"
54
+ ) do |num|
55
+ opts.zoom = num
56
+ end
57
+
58
+ opt.on( '--offset=NUM', Integer,
59
+ "Start counting at offset (default: #{opts.offset})"
60
+ ) do |num|
61
+ opts.offset = num
62
+ end
63
+
64
+ ## todo - move to shuffle (only used by shuffle) - why? why not?
65
+ opt.on( '--seed=NUM', Integer,
66
+ "Seed for random number generation / shuffle (default: #{opts.seed})"
67
+ ) do |num|
68
+ opts.seed = num
69
+ end
70
+
71
+ # note: remove -d alias (and --dir=DIR) why? why not?
72
+ opt.on( '-o', '--out=DIR', '--dir=DIR', '--outdir=DIR',
73
+ "Output directory (default: #{opts.outdir})"
74
+ ) do |dir|
75
+ opts.outdir = dir
76
+ end
77
+
78
+ ### todo/check: move option to -t/--tile command only - why? why not?
79
+ # desc "True Official Genuine CryptoPunks™ all-in-one composite image"
80
+ ## todo: add check that path is valid?? possible?
81
+ opt.on( '-f', '--file=FILE',
82
+ "All-in-one composite image (default: #{opts.file})"
83
+ ) do |file|
84
+ opts.file = file
85
+ end
86
+
87
+ # note - not used for now - always on
88
+ ## todo: use -w for short form? check ruby interpreter if in use too?
89
+ # opt.on( '--verbose',
90
+ # "(Debug) Show debug messages"
91
+ # ) do
92
+ # opts.verbose = true
93
+ # # ## LogUtils::Logger.root.level = :debug
94
+ # end
95
+ end
112
96
 
113
97
 
114
- desc "Flip (vertically) all punk characters in all-in-one punk series composite (#{opts.file})"
115
- command [:f, :flip] do |c|
116
- c.action do |g,o,args|
98
+ # command - f, flip
99
+ flip = CmdParse::Command.new('flip', takes_commands: false)
100
+ flip.short_desc( "Flip (vertically) all punk characters in all-in-one punk series composite (#{opts.file})" )
101
+ flip.action do
117
102
  puts "==> reading >#{opts.file}<..."
118
103
  punks = ImageComposite.read( opts.file )
119
104
 
120
105
  ## note: for now always assume 24x24
121
- cols = punks.width / 24
122
- rows = punks.height / 24
123
106
  tile_width = 24
124
107
  tile_height = 24
108
+ cols = punks.width / tile_width
109
+ rows = punks.height / tile_height
125
110
 
126
111
  phunks = ImageComposite.new( cols, rows,
127
112
  width: tile_width,
@@ -134,28 +119,28 @@ command [:f, :flip] do |c|
134
119
  ## make sure outdir exits (default is current working dir e.g. .)
135
120
  FileUtils.mkdir_p( opts.outdir ) unless Dir.exist?( opts.outdir )
136
121
 
137
- ## note: allways assume .png extension for now
122
+ ## note: always assume .png extension for now
138
123
  basename = File.basename( opts.file, File.extname( opts.file ) )
139
124
  path = "#{opts.outdir}/#{basename}-flipped.png"
140
125
  puts "==> saving phunks flipped one-by-one by hand to >#{path}<..."
141
126
 
142
127
  phunks.save( path )
143
128
  puts 'Done.'
144
- end # action
145
- end # command flip
129
+ end # action
146
130
 
147
131
 
148
- desc "Shuffle all punk characters (randomly) in all-in-one punk series composite (#{opts.file})"
149
- command [:s, :shuffle] do |c|
150
- c.action do |g,o,args|
132
+ # command - s, shuffle
133
+ shuffle = CmdParse::Command.new('shuffle', takes_commands: false)
134
+ shuffle.short_desc( "Shuffle all punk characters (randomly) in all-in-one punk series composite (#{opts.file})" )
135
+ shuffle.action do
151
136
  puts "==> reading >#{opts.file}<..."
152
137
  punks = ImageComposite.read( opts.file )
153
138
 
154
139
  ## note: for now always assume 24x24
155
- cols = punks.width / 24
156
- rows = punks.height / 24
157
140
  tile_width = 24
158
141
  tile_height = 24
142
+ cols = punks.width / tile_width
143
+ rows = punks.height / tile_height
159
144
 
160
145
  phunks = ImageComposite.new( cols, rows,
161
146
  width: tile_width,
@@ -171,7 +156,6 @@ command [:s, :shuffle] do |c|
171
156
  # seed 4142 ends in [..., 7566, 828, 8987, 9777]
172
157
  # 333 ends in [..., 6067, 9635, 973, 8172]
173
158
 
174
-
175
159
  indexes.each_with_index do |old_index,new_index|
176
160
  puts " ##{old_index} now ##{new_index}"
177
161
  phunks << punks[old_index]
@@ -190,26 +174,16 @@ command [:s, :shuffle] do |c|
190
174
 
191
175
  phunks.save( path )
192
176
  puts 'Done.'
193
- end # action
194
- end # command shuffle
195
-
196
-
197
-
198
-
177
+ end # action
199
178
 
200
179
 
201
-
202
- desc "Get punk characters via image tiles from all-in-one punk series composite (#{opts.file}) - for IDs use 0 to 9999"
203
- command [:t, :tile] do |c|
204
- c.action do |g,o,args|
205
-
206
- # puts "opts:"
207
- # puts opts.inspect
208
-
180
+ # command - t, tile
181
+ tile = CmdParse::Command.new('tile', takes_commands: false)
182
+ tile.short_desc( "Get punk characters via image tiles from all-in-one punk series composite (#{opts.file}) - for IDs use 0 to 9999" )
183
+ tile.action do |*args|
209
184
  puts "==> reading >#{opts.file}<..."
210
185
  punks = ImageComposite.read( opts.file )
211
186
 
212
-
213
187
  puts " setting zoom to #{opts.zoom}x" if opts.zoom != 1
214
188
 
215
189
  ## make sure outdir exits (default is current working dir e.g. .)
@@ -234,17 +208,16 @@ command [:t, :tile] do |c|
234
208
  punk.save( path )
235
209
  end
236
210
  puts 'Done.'
237
- end # action
238
- end # command tile
211
+ end # action
239
212
 
240
213
 
241
-
242
- desc 'Generate punk characters from text attributes (from scratch / zero) via builtin punk spritesheet'
243
- command [:g, :gen, :generate] do |c|
244
- c.action do |g,o,args|
245
-
214
+ # command - g, gen, generate
215
+ # note: shorten to gen
216
+ generate = CmdParse::Command.new('gen', takes_commands: false)
217
+ generate.short_desc( "Generate punk characters from text attributes (from scratch / zero) via builtin punk spritesheet" )
218
+ generate.action do |*args|
246
219
  puts "==> generating >#{args.join( ' + ' )}<..."
247
- punk = Image.generate( *args )
220
+ punk = Punk::Image.generate( *args )
248
221
 
249
222
  puts " setting zoom to #{opts.zoom}x" if opts.zoom != 1
250
223
 
@@ -265,17 +238,14 @@ command [:g, :gen, :generate] do |c|
265
238
 
266
239
  punk.save( path )
267
240
  puts 'Done.'
268
- end # action
269
- end # command generate
270
-
241
+ end # action
271
242
 
272
- desc 'Query (builtin off-chain) punk contract for punk text attributes by IDs - use 0 to 9999'
273
- command [:q, :query] do |c|
274
- c.action do |g,o,args|
275
243
 
276
- # puts "opts:"
277
- # puts opts.inspect
278
244
 
245
+ # command - q, query
246
+ query = CmdParse::Command.new('query', takes_commands: false)
247
+ query.short_desc( "Query (builtin off-chain) punk contract for punk text attributes by IDs - use 0 to 9999" )
248
+ query.action do |*args|
279
249
  args.each_with_index do |arg,index|
280
250
  punk_index = arg.to_i( 10 ) ## assume base 10 decimal
281
251
 
@@ -292,16 +262,16 @@ command [:q, :query] do |c|
292
262
  print "\n"
293
263
  end
294
264
  puts 'Done.'
295
- end
296
265
  end
297
266
 
298
267
 
299
-
300
- desc 'List all punk archetype and attribute names from builtin punk spritesheet'
301
- command [:l, :ls, :list] do |c|
302
- c.action do |g,o,args|
303
-
304
- # generator = Punk::Image.generator
268
+ # command - l, ls # (NOT) list
269
+ ## note: ls (alias) is NOT possible with cmdparse gem!!!!! - ask if workaround?
270
+ ## note: as a workaround use ls for now (not list)!!!
271
+ list = CmdParse::Command.new('ls', takes_commands: false)
272
+ list.short_desc( "List all punk archetype and attribute names from builtin punk spritesheet" )
273
+ list.action do
274
+ # was: generator = Punk::Image.generator
305
275
  sheet = Punk::Spritesheet.builtin
306
276
 
307
277
  puts "==> Archetypes"
@@ -330,54 +300,23 @@ command [:l, :ls, :list] do |c|
330
300
  puts ""
331
301
 
332
302
  puts 'Done.'
333
- end # action
334
- end # command list
303
+ end # action
335
304
 
336
305
 
306
+ parser.add_command(CmdParse::HelpCommand.new, default: true)
307
+ parser.add_command(CmdParse::VersionCommand.new)
308
+ parser.add_command( flip )
309
+ parser.add_command( shuffle )
310
+ parser.add_command( tile )
311
+ parser.add_command( generate )
312
+ parser.add_command( query )
313
+ parser.add_command( list )
337
314
 
338
- pre do |g,c,o,args|
339
- opts.merge_gli_options!( g )
340
- opts.merge_gli_options!( o )
341
-
342
- if opts.verbose?
343
- ## LogUtils::Logger.root.level = :debug
344
- end
345
-
346
- ## logger.debug "Executing #{c.name}"
347
- true
348
- end
349
-
350
- post do |global,c,o,args|
351
- ## logger.debug "Executed #{c.name}"
352
- true
353
- end
354
-
355
-
356
- on_error do |e|
357
-
358
- if opts.verbose?
359
- puts e.backtrace
360
- end
361
-
362
- if e.is_a?( SystemExit )
363
- puts
364
- puts "*** error: system exit with status code ( #{e.status} )"
365
- exit( e.status ) ## try exit again to make sure error code gets passed along!!!
366
- else
367
- puts
368
- puts "*** error: #{e.message}"
369
- end
370
-
371
- ## note: was false # skip default error handling
372
-
373
- ## note: try true - false WILL SWALLOW exit codes and such
374
- ## - looks like it's still returning 0 (e.g. on unknown option or such)!!!!
375
- true
376
- end
377
315
 
316
+ parser.parse( args )
317
+ end # method run
318
+ end # class Tool
319
+ end # moduule Punk
378
320
 
379
- ### exit run(ARGV) ## note: use Toolii.run( ARGV ) outside of class
380
- end # class Toolii
381
- end # module Punk
382
321
 
383
322
 
@@ -5,8 +5,8 @@ module Module
5
5
  module Cryptopunks
6
6
 
7
7
  MAJOR = 2024
8
- MINOR = 2
9
- PATCH = 29
8
+ MINOR = 3
9
+ PATCH = 2
10
10
  VERSION = [MAJOR,MINOR,PATCH].join('.')
11
11
 
12
12
  def self.version
data/lib/cryptopunks.rb CHANGED
@@ -6,7 +6,7 @@ require 'punks'
6
6
  ## extra stdlibs
7
7
  require 'digest' ## move/add to pixelart upstream - why? why not?
8
8
  require 'optparse'
9
- require 'gli' ## used for command line tool
9
+ require 'cmdparse' ## used for command line tool
10
10
 
11
11
 
12
12
 
@@ -15,7 +15,6 @@ require 'cryptopunks/version' # note: let version always go first
15
15
 
16
16
 
17
17
  require 'cryptopunks/attributes'
18
- require 'cryptopunks/composite'
19
18
  require 'cryptopunks/colors'
20
19
 
21
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptopunks
3
3
  version: !ruby/object:Gem::Version
4
- version: 2024.2.29
4
+ version: 2024.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-29 00:00:00.000000000 Z
11
+ date: 2024-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pixelart
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2024.2.29
41
41
  - !ruby/object:Gem::Dependency
42
- name: gli
42
+ name: cmdparse
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -86,9 +86,10 @@ dependencies:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '4.1'
89
- description: cryptopunks - generate your own 24×24 pixel punk images (off-chain) from
90
- the Official Genuine Matt & John' Punks sha256-verified original 10 000 unique
91
- character collection; incl. 2x/4x/8x zoom for bigger sizes
89
+ description: cryptopunks - generate your own 24×24 pixel punk images from text prompts
90
+ incl. 2x/4x/8x zoom for bigger sizes (or crop 'n' save tiles from all-in-one composites
91
+ incl. the True Official Matt & John's® Punks sha256-verified original 10 000 unique
92
+ character collection)
92
93
  email: wwwmake@googlegroups.com
93
94
  executables:
94
95
  - cryptopunk
@@ -108,7 +109,6 @@ files:
108
109
  - lib/cryptopunks.rb
109
110
  - lib/cryptopunks/attributes.rb
110
111
  - lib/cryptopunks/colors.rb
111
- - lib/cryptopunks/composite.rb
112
112
  - lib/cryptopunks/contract/punksdata-assets.rb
113
113
  - lib/cryptopunks/contract/punksdata-contract.rb
114
114
  - lib/cryptopunks/contract/punksdata-meta.rb
@@ -138,7 +138,8 @@ requirements: []
138
138
  rubygems_version: 3.4.10
139
139
  signing_key:
140
140
  specification_version: 4
141
- summary: cryptopunks - generate your own 24×24 pixel punk images (off-chain) from
142
- the Official Genuine Matt & John' Punks sha256-verified original 10 000 unique
143
- character collection; incl. 2x/4x/8x zoom for bigger sizes
141
+ summary: cryptopunks - generate your own 24×24 pixel punk images from text prompts
142
+ incl. 2x/4x/8x zoom for bigger sizes (or crop 'n' save tiles from all-in-one composites
143
+ incl. the True Official Matt & John's® Punks sha256-verified original 10 000 unique
144
+ character collection)
144
145
  test_files: []
@@ -1,38 +0,0 @@
1
- module Punk
2
- ## note: was Image::Composite
3
- class ImageComposite < Pixelart::ImageComposite
4
-
5
- PUNK_HASH = 'ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b'
6
-
7
- def self.sha256( data )
8
- ## todo/check: or just use Digest::SHA256.hexdigest - why? why not?
9
- Digest::SHA256.digest( data ).unpack( 'H*' )[0]
10
- end
11
-
12
-
13
- PUNK_HEIGHT = 24
14
- PUNK_WIDTH = 24
15
-
16
- def self.read( path='./punks.png', width: PUNK_WIDTH, height: PUNK_HEIGHT )
17
- data = File.open( path, 'rb' ) { |f| f.read }
18
-
19
- hexdigest = sha256( data ) ## check sha256 checksum
20
- if hexdigest == PUNK_HASH
21
- puts " >#{hexdigest}< SHA256 hash matching"
22
- puts " ✓ True Official Genuine Matt & John's® Punks verified"
23
- else
24
- puts " ✓ True Official Genuine Yes, You Can! Punk's Not Dead® verified"
25
- end
26
-
27
- img = ChunkyPNG::Image.from_blob( data )
28
- new( img, width: width, height: height )
29
- end
30
-
31
-
32
- def initialize( *args, width: PUNK_WIDTH,
33
- height: PUNK_HEIGHT )
34
- super
35
- end
36
-
37
- end ## class ImageComposite
38
- end ## module Punk