@@ -6,7 +6,7 @@ The crate starts conservative: validated avatar dimensions, bounded identity inp
66
77## Current Status
88
9- The current crate version is ` 0.12 .0 ` .
9+ The current crate version is ` 0.13 .0 ` .
1010
1111Implemented now:
1212
@@ -25,8 +25,8 @@ Implemented now:
2525- Avatar families through ` AvatarKind ` : animals, characters, fantasy/sci-fi
2626 faces, playful objects, and symbols. Current labels are listed in the public
2727 option catalog below.
28- - Background modes through ` AvatarBackground ` : ` themed ` , ` white ` , ` black ` ,
29- ` dark ` , ` light ` , and ` transparent ` .
28+ - Background modes through ` AvatarBackground ` : fixed, transparent, patterned ,
29+ gradient, and star-field canvas treatments .
3030- Visual layers through ` AvatarAccessory ` , ` AvatarColor ` ,
3131 ` AvatarExpression ` , and ` AvatarShape ` .
3232- In-memory ` WebP ` encoding through ` AvatarOutputFormat ` ; ` PNG ` , ` JPEG ` , and
@@ -37,7 +37,8 @@ Implemented now:
3737- No public path-writing helpers; callers own their storage and filesystem boundary.
3838- ` #![forbid(unsafe_code)] ` in library code.
3939- Golden visual regression fingerprints.
40- - Isolated fuzz harness for avatar identities, families, backgrounds, SVG rendering, and PNG encoding.
40+ - Isolated fuzz harness for avatar identities, families, backgrounds, SVG
41+ rendering, default WebP encoding, and feature-gated encoder paths.
4142- Local release gates for formatting, clippy, tests, docs, dependency policy, RustSec advisories, package contents, SBOM generation, reproducible build checks, and crates.io publish dry runs.
4243
4344Planned or intentionally external:
@@ -74,29 +75,29 @@ future release has a concrete image-generation reason to split it.
7475
7576``` toml
7677[dependencies ]
77- hashavatar = " 0.12 .0"
78+ hashavatar = " 0.13 .0"
7879```
7980
8081Optional identity hash modes and extra raster encoders are disabled by default.
8182Hash modes are mutually exclusive, so enable at most one of ` blake3 ` or ` xxh3 ` :
8283
8384``` toml
8485[dependencies ]
85- hashavatar = { version = " 0.12 .0" , features = [" blake3" ] }
86+ hashavatar = { version = " 0.13 .0" , features = [" blake3" ] }
8687```
8788
8889Enable additional raster formats explicitly:
8990
9091``` toml
9192[dependencies ]
92- hashavatar = { version = " 0.12 .0" , features = [" png" , " jpeg" , " gif" ] }
93+ hashavatar = { version = " 0.13 .0" , features = [" png" , " jpeg" , " gif" ] }
9394```
9495
9596Or enable every optional raster encoder at once:
9697
9798``` toml
9899[dependencies ]
99- hashavatar = { version = " 0.12 .0" , features = [" all-formats" ] }
100+ hashavatar = { version = " 0.13 .0" , features = [" all-formats" ] }
100101```
101102
102103Combine these as needed, for example ` features = ["blake3", "png"] ` .
@@ -143,7 +144,7 @@ in caller code.
143144| Enum | Controls | Values |
144145| --- | --- | --- |
145146| ` AvatarKind ` | Base avatar family | ` cat ` , ` dog ` , ` robot ` , ` fox ` , ` alien ` , ` monster ` , ` ghost ` , ` slime ` , ` bird ` , ` wizard ` , ` skull ` , ` paws ` , ` planet ` , ` rocket ` , ` mushroom ` , ` cactus ` , ` frog ` , ` panda ` , ` cupcake ` , ` pizza ` , ` icecream ` , ` octopus ` , ` knight ` , ` bear ` , ` penguin ` , ` dragon ` , ` ninja ` , ` astronaut ` , ` diamond ` , ` coffee-cup ` , ` shield ` |
146- | ` AvatarBackground ` | Canvas/background treatment | ` themed ` , ` white ` , ` black ` , ` dark ` , ` light ` , ` transparent ` |
147+ | ` AvatarBackground ` | Canvas/background treatment | ` themed ` , ` white ` , ` black ` , ` dark ` , ` light ` , ` transparent ` , ` polka-dot ` , ` striped ` , ` checkerboard ` , ` grid ` , ` sunrise ` , ` ocean ` , ` starry ` |
147148| ` AvatarAccessory ` | Optional accessory layer | ` none ` , ` glasses ` , ` hat ` , ` headphones ` , ` crown ` , ` bowtie ` , ` eyepatch ` , ` scarf ` , ` halo ` , ` horns ` |
148149| ` AvatarColor ` | Optional accent palette | ` default ` , ` neon-mint ` , ` pastel-pink ` , ` crimson ` , ` gold ` , ` deep-sea-blue ` |
149150| ` AvatarExpression ` | Optional expression overlay | ` default ` , ` happy ` , ` grumpy ` , ` surprised ` , ` sleepy ` , ` winking ` , ` cool ` , ` crying ` |
@@ -380,7 +381,7 @@ your namespace style version when intentionally migrating output.
380381
381382``` toml
382383[dependencies ]
383- hashavatar = { version = " 0.12 .0" , features = [" blake3" ] }
384+ hashavatar = { version = " 0.13 .0" , features = [" blake3" ] }
384385```
385386
386387``` rust
@@ -408,7 +409,7 @@ assert!(svg.contains("alien avatar"));
408409
409410``` toml
410411[dependencies ]
411- hashavatar = { version = " 0.12 .0" , features = [" xxh3" ] }
412+ hashavatar = { version = " 0.13 .0" , features = [" xxh3" ] }
412413```
413414
414415``` rust
@@ -625,23 +626,24 @@ For style-aware rendering, the deterministic tuple also includes
625626` accessory ` , ` color ` , ` expression ` , and ` shape ` . Existing ` AvatarOptions `
626627entry points keep those extra layer choices at ` none ` , ` default ` , ` default ` ,
627628and ` square ` , so explicitly selected ` AvatarOptions ` output remains stable
628- unless the selected family renderer changes. ` 0.12 .0 ` adds new ` AvatarKind `
629- values, so automatic style derivation can map some identities to different
630- families than ` 0.11 .0 ` ; services that need the old automatic distribution
631- should keep their existing namespace style version until they intentionally
632- migrate. Some family/layer combinations are deterministic no-ops when the
633- layer has no sensible anchor for that family.
629+ unless the selected family renderer changes. ` 0.13 .0 ` adds new
630+ ` AvatarBackground ` values, so automatic style derivation can map some
631+ identities to different backgrounds than ` 0.12 .0 ` ; services that need the old
632+ automatic distribution should keep their existing namespace style version until
633+ they intentionally migrate. Some family/layer combinations are deterministic
634+ no-ops when the layer has no sensible anchor for that family.
634635
635636Frame shapes are applied as masks in raster output and as SVG clip paths in SVG
636637output. Non-square shapes therefore trim the background, avatar body, color
637638accent, accessory layer, and expression layer consistently before drawing the
638639frame border.
639640
640- The renderer uses floating-point geometry internally. The project tests golden
641- fingerprints on the release platform, but it does not yet claim formal
641+ The renderer still uses floating-point geometry in family-specific drawing
642+ paths. Frame-shape raster hit-testing uses integer arithmetic as of ` 0.13.0 ` ,
643+ which reduces one source of platform rounding variance. The project tests
644+ golden fingerprints on the release platform, but it does not yet claim formal
642645bit-identical raster output across every CPU architecture, compiler backend,
643- and optimization mode. Future core-boundary work tracks fixed-point geometry
644- as the path to a stricter cross-platform determinism contract.
646+ and optimization mode.
645647
646648The procedural cat renderer seeds its internal RNG from bytes ` 32..64 ` of the
647649identity digest and uses the lower digest bytes for direct visual parameters.
0 commit comments