artbase 0.2.0 → 0.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d2702ba1ca72c303474ee868074e5fc244d1a510d240cb7b533813b85f07bdd
4
- data.tar.gz: 46591b009738fc8c45bd777b56b74dab8195f2fee6f967efa3a05b1c5efbe92b
3
+ metadata.gz: 549b31d6f628fcb714c22fd03f179b75fd9b99e9c2bbe8532b1e79660e4f1ade
4
+ data.tar.gz: aadb6b67430375da20a83e94362562405dfca370dac2b8cfe514086a926ff2df
5
5
  SHA512:
6
- metadata.gz: 7a1a11ce316e7de3ec11b001262eb614b34cb0b53f9237357c60026fabddafd8b38839ba1ab77221f5062044aced9df44d082fe7146e68dc9dca4ee40dc5d1d0
7
- data.tar.gz: 12dacbd59d727be09dbb626156a79e54dbc10a52ed13ed9b3963ee731dffcad45c08d23b812494780ff86bba51ea34fb3205258663759835ce94384229229b76
6
+ metadata.gz: c7d1a745322df0250841c03975135d35f0f4ab4a9b8258e36482258e14b1847cece236b09755fd8962b6e942b21ed1ee5b28449c0d0b4d32f9f3c7c08e508533
7
+ data.tar.gz: 735c9079a101dd5aea55d5cb8458256082864e07bcaef81dff178cdeabb583df381ff9880d6aca7871c094a7f529342a9a206f4a4d877efe9c9b6b6b2600c27f
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # artbase ("right-clicker") command line tool & scripts - download complete pixel art collections - yes, you can! - automate "right-click 'n' download" and much more
1
+ # artbase ("right-clicker") command line tool & scripts - download complete pixel art collections - yes, you can! - automate "right-click 'n' save" and much more
2
2
 
3
3
  * home :: [github.com/pixelartexchange/artbase](https://github.com/pixelartexchange/artbase)
4
4
  * bugs :: [github.com/pixelartexchange/artbase/issues](https://github.com/pixelartexchange/artbase/issues)
@@ -43,7 +43,7 @@ meta_slugify: /^Blocky Doge #(?<num>[0-9]+)$/,
43
43
  ```
44
44
 
45
45
  Sorry for the "magic" config format for now -
46
- see the [**opensea.sandbox**](https://github.com/pixelartexchange/opensea.sandbox) for many more "real-world" examples.
46
+ see the [**artbase.sandbox**](https://github.com/pixelartexchange/artbase.sandbox) for many more "real-world" examples.
47
47
 
48
48
 
49
49
 
@@ -66,11 +66,11 @@ Let's try:
66
66
  $ artbase blockydoge meta
67
67
  ```
68
68
 
69
- Note: All meta data files get stored by convention in `blockydoge/meta`.
69
+ Note: All token meta data files get stored by convention in `blockydoge/token`.
70
70
  Resulting in a file tree like:
71
71
 
72
72
  ```
73
- blockydoge/meta/
73
+ blockydoge/token/
74
74
  0.json
75
75
  1.json
76
76
  2.json
@@ -87,20 +87,18 @@ blockydoge/meta/
87
87
  ...
88
88
  ```
89
89
 
90
- Example - `blockydoge/meta/0.json`:
90
+ Example - `blockydoge/token/0.json`:
91
91
 
92
92
  ``` json
93
93
  {
94
94
  "id": 52224520,
95
95
  "token_id": "154226446513437...7290852067901441",
96
- "num_sales": 1,
97
96
  "image_url": "https://lh3.googleusercontent.com/fIQQ0A7...gTlbgMTQ",
98
97
  "image_preview_url": "https://lh3.googleusercontent.com/fIQQ0A7...gTlbgMTQ=s250",
99
98
  "image_thumbnail_url": "https://lh3.googleusercontent.com/fIQQ0A7...gTlbgMTQ=s128",
100
99
  "image_original_url": null,
101
100
  "name": "Blocky Doge #1",
102
101
  "description": "Blocky Doge ... 100 unique pixelated Doge avatars...",
103
- "external_link": null,
104
102
 
105
103
  ...
106
104
 
@@ -116,7 +114,7 @@ Example - `blockydoge/meta/0.json`:
116
114
 
117
115
 
118
116
 
119
- ### Download all referenced images in the meta data file
117
+ ### Download all referenced images in the token meta data file
120
118
 
121
119
  Let's try:
122
120
 
@@ -125,11 +123,11 @@ $ artbase blockydoge img
125
123
  ```
126
124
 
127
125
  Note: All referenced images (in the source format e.g. 512x512)
128
- get stored by convention in `blockydoge/i`.
126
+ get stored by convention in `blockydoge/token-i`.
129
127
  Resulting in a file tree like:
130
128
 
131
129
  ```
132
- blockydoge/i/
130
+ blockydoge/token-i/
133
131
  0.png
134
132
  1.png
135
133
  2.png
@@ -146,7 +144,7 @@ blockydoge/i/
146
144
  ...
147
145
  ```
148
146
 
149
- Example - `blockydoge/i/0.png` (512x512):
147
+ Example - `blockydoge/token-i/0.png` (512x512):
150
148
 
151
149
  ![](i/blockydoge0-512x512.png)
152
150
 
@@ -163,29 +161,29 @@ $ artbase blockydoge px
163
161
  ```
164
162
 
165
163
  Note: All referenced images pixelated down to the orginal format (e.g. 60x60)
166
- get stored by convention in `blockydoge/ii`.
164
+ get stored by convention in `blockydoge/60x60`.
167
165
  Resulting in a tree like:
168
166
 
169
167
  ```
170
- blockydoge/ii/
171
- 000001.png
172
- 000002.png
173
- 000003.png
174
- 000004.png
175
- 000005.png
176
- 000006.png
177
- 000007.png
178
- 000008.png
179
- 000009.png
180
- 000010.png
181
- 000011.png
182
- 000012.png
183
- 000013.png
168
+ blockydoge/60x60/
169
+ 1.png
170
+ 2.png
171
+ 3.png
172
+ 4.png
173
+ 5.png
174
+ 6.png
175
+ 7.png
176
+ 8.png
177
+ 9.png
178
+ 10.png
179
+ 11.png
180
+ 12.png
181
+ 13.png
184
182
  ...
185
183
  ```
186
184
 
187
185
 
188
- Example - `blockydoge/ii/000001.png` to `000013.png` (60x60):
186
+ Example - `blockydoge/60x60/1.png` to `13.png`:
189
187
 
190
188
  ![](i/blockydoge000001.png)
191
189
  ![](i/blockydoge000002.png)
@@ -271,4 +269,4 @@ Use it as you please with no restrictions whatsoever.
271
269
 
272
270
  ## Questions? Comments?
273
271
 
274
- Post them on the [CryptoPunksDev reddit](https://old.reddit.com/r/CryptoPunksDev). Thanks.
272
+ Post them on the [D.I.Y. Punk (Pixel) Art reddit](https://old.reddit.com/r/DIYPunkArt). Thanks.
data/Rakefile CHANGED
@@ -26,7 +26,9 @@ Hoe.spec 'artbase' do
26
26
  self.history_file = 'CHANGELOG.md'
27
27
 
28
28
  self.extra_deps = [
29
+ ['cocos', '>= 0.1.2'],
29
30
  ['webclient', '>= 0.2.2'],
31
+ ['pixelart', '>= 1.3.6'],
30
32
  ]
31
33
 
32
34
  self.licenses = ['Public Domain']
@@ -3,6 +3,36 @@ module Artbase
3
3
  class Base ## "abstract" Base collection - check -use a different name - why? why not?
4
4
 
5
5
 
6
+ def convert_images( overwrite: )
7
+ image_dir = "./#{slug}/token-i"
8
+ Image.convert( image_dir, from: 'jpg', to: 'png', overwrite: overwrite )
9
+ Image.convert( image_dir, from: 'gif', to: 'png', overwrite: overwrite )
10
+ Image.convert( image_dir, from: 'svg', to: 'png', overwrite: overwrite )
11
+ end
12
+
13
+
14
+
15
+ def make_strip
16
+ composite_count = @count - @excludes.size
17
+
18
+ composite = ImageComposite.new( 9, 1,
19
+ width: @width,
20
+ height: @height )
21
+
22
+ i = 0
23
+ each_image do |img, id|
24
+ puts "==> [#{i+1}/9] #{id}"
25
+ composite << img
26
+
27
+ i += 1
28
+ break if i >= 9
29
+ end
30
+
31
+
32
+ composite.save( "./#{@slug}/tmp/#{@slug}-strip.png" )
33
+ end
34
+
35
+
6
36
 
7
37
  def make_composite
8
38
  ### use well-known / pre-defined (default) grids
@@ -16,14 +46,22 @@ def make_composite
16
46
  when 314 then [15, 21]
17
47
  when 500 then [25, 20]
18
48
  when 1000 then [25, 40]
49
+ when 2200 then [50, 44]
50
+ when 2222 then [50, 45]
51
+ when 2469 then [50, 50]
19
52
  when 3000 then [100, 30] ## or use 50*60 - why? why not?
20
53
  when 3500 then [100, 35] ## or use 50*x ??
21
54
  when 3979 then [100, 40]
22
55
  when 4000 then [100, 40] ## or use 50x80 - why? why not?
56
+ when 4444 then [100, 45] ## or use 50x??
23
57
  when 5000 then [100, 50] ## or use 50x100 - why? why not?
24
58
  when 5555 then [100, 56] # 5600 (45 left empty)
59
+ when 6666 then [100, 67] # 6700 (34 left empty)
60
+ when 6688 then [100, 67] # 6700 (12 left empty)
25
61
  when 6969 then [100, 70] # 7000 (31 left empty)
26
- when 10000 then [100, 100]
62
+ when 8888 then [100, 89]
63
+ when 9969 then [100,100]
64
+ when 10000 then [100,100]
27
65
  else
28
66
  raise ArgumentError, "sorry - unknown composite count #{composite_count}/#{@count} for now"
29
67
  end
@@ -17,9 +17,13 @@ class Meta
17
17
 
18
18
 
19
19
  def name
20
- @name ||= _normalize( @data['name'] )
20
+ ## note: name might be an integer number e.g. 0/1/2 etc.
21
+ ## e.g. see crypto pudgy punks and others?
22
+ ## always auto-convert to string
23
+ @name ||= _normalize( @data['name'].to_s )
21
24
  end
22
25
 
26
+
23
27
  def description
24
28
  @description ||= _normalize( @data['description'] )
25
29
  end
@@ -323,19 +327,25 @@ end
323
327
 
324
328
  ## note: default to direct true if image_base present/availabe
325
329
  ## otherwise to false
330
+ ## todo/check: change/rename force para to overwrite - why? why not?
326
331
  def download_images( range=_range, force: false,
327
332
  direct: @image_base ? true : false )
328
333
  start = Time.now
329
334
  delay_in_s = 0.3
330
335
 
331
336
  range.each do |id|
332
- ## note: for now assumes only .png format!!!
333
- ## todo - check for more format - why? why not?
334
- outpath = "./#{@slug}/token-i/#{id}.png"
335
- if !force && File.exist?( outpath )
336
- next ## note: skip if file already exists
337
- end
338
337
 
338
+ ## note: skip if (downloaded) file already exists
339
+ skip = false
340
+ if !force
341
+ ['png', 'gif', 'jgp', 'svg'].each do |format|
342
+ if File.exist?( "./#{@slug}/token-i/#{id}.#{format}" )
343
+ skip = true
344
+ break
345
+ end
346
+ end
347
+ end
348
+ next if skip
339
349
 
340
350
  image_src = image_url( id: id, direct: direct )
341
351
 
@@ -10,7 +10,8 @@ end
10
10
 
11
11
 
12
12
 
13
-
13
+ =begin
14
+ moved/ use Image.convert !!! remove here
14
15
  def convert_images( collection, from: 'jpg',
15
16
  to: 'png',
16
17
  dir: 'i',
@@ -45,7 +46,7 @@ def convert_images( collection, from: 'jpg',
45
46
  end
46
47
  end
47
48
  end
48
-
49
+ =end
49
50
 
50
51
 
51
52
 
data/lib/artbase/tool.rb CHANGED
@@ -93,12 +93,16 @@ class Tool
93
93
  download_meta( offset: options[ :offset] )
94
94
  elsif ['i', 'img', 'image', 'images'].include?( command )
95
95
  download_images( offset: options[ :offset] )
96
+ elsif ['conv', 'convert'].include?( command )
97
+ convert_images
96
98
  elsif ['a', 'attr', 'attributes'].include?( command )
97
99
  dump_attributes
98
100
  elsif ['x', 'exp', 'export'].include?( command )
99
101
  export_attributes
100
102
  elsif ['c', 'composite'].include?( command )
101
103
  make_composite
104
+ elsif ['strip'].include?( command )
105
+ make_strip
102
106
  elsif ['t', 'test'].include?( command )
103
107
  puts " testing, testing, testing"
104
108
  else
@@ -113,6 +117,18 @@ class Tool
113
117
  @collection.make_composite
114
118
  end
115
119
 
120
+ def self.convert_images
121
+ puts "==> convert images"
122
+ @collection.convert_images( overwrite: false )
123
+ end
124
+
125
+
126
+ def self.make_strip
127
+ puts "==> make strip"
128
+ @collection.make_strip
129
+ end
130
+
131
+
116
132
  def self.dump_attributes
117
133
  puts "==> dump attributes"
118
134
  @collection.dump_attributes
@@ -1,10 +1,9 @@
1
1
 
2
2
 
3
3
  module Artbase
4
-
5
4
  MAJOR = 0
6
5
  MINOR = 2
7
- PATCH = 0
6
+ PATCH = 1
8
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
8
 
10
9
  def self.version
data/lib/artbase.rb CHANGED
@@ -1,42 +1,16 @@
1
- require 'pp'
2
- require 'time'
3
- require 'date'
1
+ require 'cocos'
4
2
 
5
- require 'uri'
6
- require 'net/http'
7
- require 'net/https'
8
- require 'cgi'
9
- require 'fileutils'
10
3
 
11
- require 'json'
12
4
 
13
- require 'optparse'
14
-
15
-
16
-
17
-
18
- ##################
19
- #### commons convenience helpers
20
- ### - move read_json( path ) to shared commons/prolog/... or such - why? why not?
21
-
22
- def read_json( path )
23
- txt = File.open( path, 'r:utf-8' ) { |f| f.read }
24
- data = JSON.parse( txt )
25
- data
26
- end
27
-
28
-
29
-
30
-
31
- ## our own gems
5
+ ## 3rd party gems
32
6
  require 'pixelart'
33
7
 
34
8
 
35
9
 
36
10
 
37
-
38
11
  ## our own code
39
- require 'artbase/version' # note: let version always go first
12
+ require_relative 'artbase/version' # note: let version always go first
13
+
40
14
 
41
15
  ### add (shared) "global" config
42
16
  module Artbase
@@ -60,17 +34,18 @@ def self.config() @config ||= Configuration.new; end
60
34
  end # module Artbase
61
35
 
62
36
 
63
- require 'artbase/image'
37
+ require_relative 'artbase/image'
38
+
64
39
 
40
+ require_relative 'artbase/helper'
41
+ require_relative 'artbase/retry' ## (global) retry_on_error helper
65
42
 
66
- require 'artbase/helper'
67
- require 'artbase/retry' ## (global) retry_on_error helper
43
+ require_relative 'artbase/collection'
44
+ require_relative 'artbase/attributes'
68
45
 
69
- require 'artbase/collection'
70
- require 'artbase/attributes'
71
46
 
47
+ require_relative 'artbase/tool'
72
48
 
73
- require 'artbase/tool'
74
49
 
75
50
 
76
51
  ######
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-26 00:00:00.000000000 Z
11
+ date: 2022-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cocos
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: webclient
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: 0.2.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: pixelart
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.6
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.6
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rdoc
29
57
  requirement: !ruby/object:Gem::Requirement