Kaspicon hashes any string — a Kaspa wallet address, a handle, a whispered secret — into a unique pixel avatar as a portable, self-contained SVG. Same input ⇒ same pixels, on any machine, in any browser, in any year. Determinism isn't a feature here; it's the whole contract.
Kaspicon is a pure function of (input, options). To prove it, we render your current input three independent times and compare the SVG byte streams:
<desc> tag.The big preview above is the best case. Wallets and explorers actually render
avatars small — 24–32px, inline in a transaction or address list.
Here's the same 14 addresses at that size, once with the default kaspa palette and
once with spectrum — same grid: 7, halo and backplate off (the
{ preset: "list" } bundle), palette is the only thing that changes.
kaspa (default)narrow hue rangespectrumrecommended for listsReal Kaspa addresses, famous strings, and one empty void. Click any face to summon it in the playground — it will look like this everywhere, forever.
// 1 · render an avatar (returns an SVG string) const svg = Kaspicon.svg("kaspa:qpauqsvk7yf9unex…"); // 2 · drop it straight into an <img> img.src = Kaspicon.toDataURL(addr, { palette: "spectrum" }); // 3 · every knob is part of the deterministic input Kaspicon.svg(addr, { grid: 9, // 7 · 9 · 11 shape: "auto", // auto · square · round · circle · diamond palette: "kaspa", // kaspa · spectrum · ember · mono halo: true, // 32-bit hash-trace ring background: true // rounded backplate }); // small inline avatar (list rows, 20-32px)? use the preset: Kaspicon.svg(addr, { preset: "list" }); // same as: { grid: 7, palette: "spectrum", halo: false, background: false } // extras Kaspicon.seed(addr) // → 256-bit fingerprint hex Kaspicon.epithet(addr) // → deterministic creature name Kaspicon.element(addr) // → live SVG DOM node
| option | values | effect |
|---|---|---|
| grid | 7 · 9 · 11 | mirrored pixel matrix resolution — use 7 for ≤32px, 9 for 48–96px, 11 for ≥96px |
| shape | auto · square · round · circle · diamond | pixel glyph (auto is hash-chosen) |
| palette | kaspa · spectrum · ember · mono | hue family — spectrum for lists, kaspa for single large-format use |
| halo | true · false | 32-bit fingerprint trace around the grid |
| background | true · false | rounded backplate & inner rim |
| preset | "list" | tuned bundle for small inline avatars; explicit options still override it |
kaspa: are case-folded (bech32 rule); everything else stays byte-exact.seed = SHA-256(utf8(input)) — your 256-bit identity.SHA-256(seed ‖ counter), counter = 0, 1, 2…