Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2079 commits
Select commit Hold shift + click to select a range
b5393df
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
0cdec0e
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
ab897f0
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
6ffd3f1
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
bbd0ed3
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
ca7d62e
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
7b717b6
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
c063cf8
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
6feea7c
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
41fae00
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
7d66bf9
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
e73d999
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
ef96c0d
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
c76f90b
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
6a19f44
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
8a3e6da
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
265a403
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
464db0a
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
8944a94
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
7098616
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
2cadec3
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
a385f29
feat: 48-color traces + hue-rotate for all parts
radaghastly Feb 17, 2026
824895c
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
75d3cb6
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
52e581e
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
bb31a63
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
3513cb4
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
f5db64c
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
2d75275
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
f81ef89
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
44a0ff9
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
3f724df
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
340ba04
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
8233e5e
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
0ebb809
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
819a4bf
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
2614edf
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
fcb5842
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
4250c89
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
ca9bfda
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
694b7db
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
bb77a3c
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
5052c07
fix: revert heads/bodies to 5-placeholder recolor
radaghastly Feb 17, 2026
55850cf
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
20f84dc
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
b39082a
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
408e4df
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
203209b
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
0ddc053
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
32a4e23
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
f324358
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
d639619
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
9303ec9
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
e17e3d7
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
2fc1df9
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
febcdac
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
a7fa043
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
ad1d7ec
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
0b31b7e
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
a91c7bf
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
7ebcc78
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
5d112ce
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
8195100
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
c27299b
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
43b9352
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
76bd3c0
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
1cbb509
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
2d141df
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
520fdc4
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
b0964e3
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
2c00e91
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
767c77a
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
3d515bc
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
081d074
feat: max detail traces (3x lanczos, 128 colors)
radaghastly Feb 17, 2026
03cc9fc
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
b5dcc9f
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
571bc71
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
9d0adc3
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
623ce7f
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
4960ed8
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
187defd
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
dc6d6be
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
e05744c
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
7447c8b
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
3f949e6
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
9151702
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
6d7bd4e
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
8109d3b
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
e2347b2
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
8a560ee
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
6e50e1b
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
6348753
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
9cd1f8a
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
e9c0450
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
5c37f99
feat: 3x lanczos 128-color traces for heads/bodies + hue-rotate
radaghastly Feb 17, 2026
52cff17
fix: unique filter IDs per robot SVG
radaghastly Feb 17, 2026
033c0ae
Optimize accessory-0.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
dbc344b
Optimize accessory-1.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
92deec4
Optimize accessory-2.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
e022649
Optimize accessory-3.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
6a1bafb
Optimize accessory-4.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
eea1090
Optimize accessory-5.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
dd1b176
Optimize accessory-6.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
0e31929
Optimize accessory-7.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
7e9da9d
Optimize accessory-8.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
b683de3
Optimize accessory-9.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
67e6e24
Optimize body-0.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
7510f14
Optimize body-1.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
4aab935
Optimize body-2.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
3545d3e
Optimize body-3.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
fce428f
Optimize body-4.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
c667474
Optimize body-5.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
31f865e
Optimize body-6.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
5e29f7a
Optimize body-7.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
7b281f9
Optimize body-8.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
8b8c6fe
Optimize body-9.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
66d961e
Optimize eye-0.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
b3f57d1
Optimize eye-1.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
8e2d5ad
Optimize eye-2.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
cd00750
Optimize eye-3.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
3791b94
Optimize eye-4.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
0197039
Optimize eye-5.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
f9b0fe9
Optimize eye-6.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
2e03628
Optimize eye-7.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
12f3478
Optimize eye-8.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
dd2c33e
Optimize eye-9.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
db935ea
Optimize head-0.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
e2f01b6
Optimize head-1.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
ecfa05d
Optimize head-2.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
971d7a0
Optimize head-3.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
e4c9c6e
Optimize head-4.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
4d092fd
Optimize head-5.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
6b4a329
Optimize head-6.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
f099d49
Optimize head-7.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
e4a1321
Optimize head-8.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
36d2adc
Optimize head-9.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
4a09927
Optimize mouth-0.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
c2cee34
Optimize mouth-1.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
3b7ff9b
Optimize mouth-2.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
ef4245c
Optimize mouth-3.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
0a66949
Optimize mouth-4.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
9cbe16c
Optimize mouth-5.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
8a02e13
Optimize mouth-6.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
b0c88f2
Optimize mouth-7.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
56342c8
Optimize mouth-8.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
3ec0e88
Optimize mouth-9.svg (smoother trace + SVGO)
radaghastly Feb 17, 2026
c77365f
Add build script for SVG bundle
radaghastly Feb 17, 2026
baec1ca
Add build script to package.json
radaghastly Feb 17, 2026
a76f733
Gentle SVGO optimize accessory-0
radaghastly Feb 17, 2026
bd06ee8
Gentle SVGO optimize accessory-1
radaghastly Feb 17, 2026
9dde2c9
Gentle SVGO optimize accessory-2
radaghastly Feb 17, 2026
b0b81d6
Gentle SVGO optimize accessory-3
radaghastly Feb 17, 2026
aa6d0f3
Gentle SVGO optimize accessory-4
radaghastly Feb 17, 2026
af05efc
Gentle SVGO optimize accessory-5
radaghastly Feb 17, 2026
cd31260
Gentle SVGO optimize accessory-6
radaghastly Feb 17, 2026
0634f22
Gentle SVGO optimize accessory-7
radaghastly Feb 17, 2026
adad6f8
Gentle SVGO optimize accessory-8
radaghastly Feb 17, 2026
94a7cfe
Gentle SVGO optimize accessory-9
radaghastly Feb 17, 2026
865704e
Gentle SVGO optimize body-0
radaghastly Feb 17, 2026
b0401b5
Gentle SVGO optimize body-1
radaghastly Feb 17, 2026
569e929
Gentle SVGO optimize body-2
radaghastly Feb 17, 2026
1cab653
Gentle SVGO optimize body-3
radaghastly Feb 17, 2026
69c3bf4
Gentle SVGO optimize body-4
radaghastly Feb 17, 2026
0a231ea
Gentle SVGO optimize body-5
radaghastly Feb 17, 2026
56bbeea
Gentle SVGO optimize body-6
radaghastly Feb 17, 2026
2559fe8
Gentle SVGO optimize body-7
radaghastly Feb 17, 2026
8276aa5
Gentle SVGO optimize body-8
radaghastly Feb 17, 2026
ee1aec5
Gentle SVGO optimize body-9
radaghastly Feb 17, 2026
5087c51
Gentle SVGO optimize eye-0
radaghastly Feb 17, 2026
f55693c
Gentle SVGO optimize eye-1
radaghastly Feb 17, 2026
aa326aa
Gentle SVGO optimize eye-2
radaghastly Feb 17, 2026
f16fc45
Gentle SVGO optimize eye-3
radaghastly Feb 17, 2026
07f94c5
Gentle SVGO optimize eye-4
radaghastly Feb 17, 2026
20032c5
Gentle SVGO optimize eye-5
radaghastly Feb 17, 2026
bc64df5
Gentle SVGO optimize eye-6
radaghastly Feb 17, 2026
e86bdbf
Gentle SVGO optimize eye-7
radaghastly Feb 17, 2026
b2792ca
Gentle SVGO optimize eye-8
radaghastly Feb 17, 2026
d36173e
Gentle SVGO optimize eye-9
radaghastly Feb 17, 2026
f6b82f3
Gentle SVGO optimize head-0
radaghastly Feb 17, 2026
9d441d0
Gentle SVGO optimize head-1
radaghastly Feb 17, 2026
99bee05
Gentle SVGO optimize head-2
radaghastly Feb 17, 2026
e4c0326
Gentle SVGO optimize head-3
radaghastly Feb 17, 2026
dfa3ce1
Gentle SVGO optimize head-4
radaghastly Feb 17, 2026
382e49a
Gentle SVGO optimize head-5
radaghastly Feb 17, 2026
1f9ef2a
Gentle SVGO optimize head-6
radaghastly Feb 17, 2026
ff74c0a
Gentle SVGO optimize head-7
radaghastly Feb 17, 2026
e411577
Gentle SVGO optimize head-8
radaghastly Feb 17, 2026
cfbb4f6
Gentle SVGO optimize head-9
radaghastly Feb 17, 2026
42e99bb
Gentle SVGO optimize mouth-0
radaghastly Feb 17, 2026
55cb2e9
Gentle SVGO optimize mouth-1
radaghastly Feb 17, 2026
b2e3678
Gentle SVGO optimize mouth-2
radaghastly Feb 17, 2026
6e8451c
Gentle SVGO optimize mouth-3
radaghastly Feb 17, 2026
fc77997
Gentle SVGO optimize mouth-4
radaghastly Feb 17, 2026
9e42a9c
Gentle SVGO optimize mouth-5
radaghastly Feb 17, 2026
d2e28fd
Gentle SVGO optimize mouth-6
radaghastly Feb 17, 2026
58913f5
Gentle SVGO optimize mouth-7
radaghastly Feb 17, 2026
0d6a81f
Gentle SVGO optimize mouth-8
radaghastly Feb 17, 2026
14b50e5
Gentle SVGO optimize mouth-9
radaghastly Feb 17, 2026
2d1d823
Update scripts/build-svg.js
radaghastly Feb 17, 2026
759eb0e
Update package.json
radaghastly Feb 17, 2026
ccb1056
feat: retrace head-0.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
677a2e5
feat: retrace head-1.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
8dcfa6d
feat: retrace head-2.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
a206fc7
feat: retrace head-3.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
c3986a8
feat: retrace head-4.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
0215a48
feat: retrace head-5.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
50020e1
feat: retrace head-6.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
5313b1a
feat: retrace head-7.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
2f4a832
feat: retrace head-8.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
7dceb2e
feat: retrace head-9.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
9284f53
feat: retrace body-0.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
140af21
feat: retrace body-1.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
e005c30
feat: retrace body-2.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
ae2646d
feat: retrace body-3.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
ea4d9cc
feat: retrace body-4.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
933520d
feat: retrace body-5.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
f5d78dd
feat: retrace body-6.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
363fffc
feat: retrace body-7.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
557afaf
feat: retrace body-8.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
a5f21ca
feat: retrace body-9.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
45da4cb
feat: retrace eye-0.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
69de7a4
feat: retrace eye-1.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
55e2ade
feat: retrace eye-2.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
b7e5e4c
feat: retrace eye-3.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
cc261bd
feat: retrace eye-4.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
8271c62
feat: retrace eye-5.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
49df267
feat: retrace eye-6.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
4ca7fe1
feat: retrace eye-7.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
d9f0d4d
feat: retrace eye-8.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
6f23065
feat: retrace eye-9.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
0d04105
feat: retrace mouth-0.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
dea5f60
feat: retrace mouth-1.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
77a97ff
feat: retrace mouth-2.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
f22fe2d
feat: retrace mouth-3.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
a437f7f
feat: retrace mouth-4.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
5b620ab
feat: retrace mouth-5.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
2cd7f67
feat: retrace mouth-6.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
0e4c6a3
feat: retrace mouth-7.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
7e82f19
feat: retrace mouth-8.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
d51f993
feat: retrace mouth-9.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
689ee17
feat: retrace accessory-0.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
9a17d69
feat: retrace accessory-1.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
aebe358
feat: retrace accessory-2.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
c837d41
feat: retrace accessory-3.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
73f3186
feat: retrace accessory-4.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
9ba7df7
feat: retrace accessory-5.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
867b07b
feat: retrace accessory-6.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
6a9452b
feat: retrace accessory-7.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
ab4351a
feat: retrace accessory-8.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
dd5c1dd
feat: retrace accessory-9.svg with potrace (smooth bezier curves)
radaghastly Feb 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions SVG_SPEC.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# RoboJS SVG Spec — Bit Allocation

## Overview

128 bits from MD5 hash → deterministic robot avatar rendered as SVG.

Single color scheme per robot. SVG templates with fill/outline/highlight driven by hash bits.

## Bit Allocation (128 bits total)

### Color Scheme (16 bits)
| Bits | Field | Range | Description |
|------|-------|-------|-------------|
| 0-7 | `hue` | 0-255 | Base hue (mapped to 0-360°) |
| 8-11 | `saturation` | 0-15 | Saturation modifier (60-100%) |
| 12-15 | `lightness` | 0-15 | Lightness modifier (40-65%) |

**Derived colors (computed, not stored):**
- **Fill:** `hsl(hue, sat%, light%)`
- **Outline:** same hue, 15% saturation, 20% lightness (dark, nearly black-brown)
- **Highlight:** same hue, sat-10%, light+20% (lighter accent)
- **Accent color** (eyes, teeth, details): see bits 80-95

### Part Selection — v1 (20 bits, 10 variations each)
| Bits | Field | Range | Description |
|------|-------|-------|-------------|
| 16-19 | `headShape` | 0-9 | Head template (10 shapes) |
| 20-23 | `bodyShape` | 0-9 | Body template |
| 24-27 | `eyeShape` | 0-9 | Eye template |
| 28-31 | `mouthShape` | 0-9 | Mouth template |
| 32-35 | `accessoryShape` | 0-9 | Accessory template |

### Part Selection — v2 expansion (use full 4 bits = 16 variations)
Same bit positions, but `0-15` range when we have 16 templates per part.

### Accent / Secondary Color (16 bits)
| Bits | Field | Range | Description |
|------|-------|-------|-------------|
| 80-87 | `accentHue` | 0-255 | Accent hue (eyes, teeth, antenna tips) |
| 88-91 | `accentSat` | 0-15 | Accent saturation |
| 92-95 | `accentLight` | 0-15 | Accent lightness (biased brighter: 55-85%) |

### Surface Details (20 bits)
| Bits | Field | Range | Description |
|------|-------|-------|-------------|
| 36-39 | `rivetStyle` | 0-15 | Rivet/bolt pattern on head |
| 40-43 | `panelLines` | 0-15 | Panel line pattern on body |
| 44-47 | `eyeSize` | 0-15 | Eye scale modifier (80-120%) |
| 48-51 | `mouthWidth` | 0-15 | Mouth scale modifier |
| 52-55 | `accPlacement` | 0-15 | Accessory position offset |

### Transforms (16 bits)
| Bits | Field | Range | Description |
|------|-------|-------|-------------|
| 56-59 | `headTilt` | 0-15 | Slight head rotation (-8° to +7°) |
| 60-63 | `eyeAsymmetry` | 0-15 | Left/right eye size difference |
| 64-67 | `bodyWidth` | 0-15 | Body scale X (90-110%) |
| 68-71 | `accRotation` | 0-15 | Accessory rotation |

### Reserved (24 bits)
| Bits | Field | Description |
|------|-------|-------------|
| 72-79 | `reserved1` | Future use (antenna style? background?) |
| 96-103 | `reserved2` | Future use |
| 104-111 | `reserved3` | Future use |
| 112-119 | `reserved4` | Future use |
| 120-127 | `reserved5` | Future use |

## SVG Template Structure

Each part is an SVG `<g>` element with CSS classes:

```svg
<g id="head-3" class="part head">
<path class="outline" d="M..."/> <!-- dark outline stroke -->
<path class="fill" d="M..."/> <!-- main body fill -->
<path class="highlight" d="M..."/> <!-- lighter accent/reflection -->
<circle class="rivet" .../> <!-- optional rivets -->
</g>
```

At render time, CSS variables inject colors:
```css
:root {
--fill: hsl(120, 80%, 50%);
--outline: hsl(120, 15%, 20%);
--highlight: hsl(120, 70%, 70%);
--accent: hsl(45, 90%, 65%);
}
.fill { fill: var(--fill); }
.outline { fill: var(--outline); stroke: var(--outline); }
.highlight { fill: var(--highlight); }
.accent { fill: var(--accent); }
```

## Rendering Pipeline

1. Hash input string → MD5 (128 bits)
2. Extract bit fields per allocation table
3. Compute color scheme from hue/sat/light bits
4. Select part templates from shape bits
5. Apply transforms (tilt, scale, asymmetry)
6. Compose SVG: body → head → mouth → eyes → accessory (back to front)
7. Inject CSS color variables
8. Output as SVG string or render to canvas via `<img>` or inline SVG

## Backward Compatibility

v1 maintains same part selection as current sprite sheet (10 variations per part).
`getBuckets()` output can map to v1 SVG parts for visual parity.

## File Structure

```
svg/
parts/
heads/ # head-0.svg through head-9.svg (v1) or head-15.svg (v2)
bodies/
eyes/
mouths/
accessories/
render.js # SVG composition + color injection
```
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"set1.png"
],
"scripts": {
"build": "node scripts/build-svg.js",
"test": "vitest run",
"test:watch": "vitest",
"lint": "eslint src/",
Expand All @@ -36,7 +37,9 @@
},
"homepage": "https://github.com/monteslu/robojs#readme",
"dependencies": {
"blueimp-md5": "^2.19.0"
"blueimp-md5": "^2.19.0",
"sharp": "^0.34.5",
"svgo": "^4.0.0"
},
"devDependencies": {
"eslint": "^9.0.0",
Expand Down
Loading