waldrand.dev

$waldrand ls --free

4 endpoints. 0 keys. 0 €.

Everything here is a GET away. Rate limiting is per IP at 60/min — no account to create, nothing to forget to rotate.

avatar.waldrand.dev is live now. image.waldrand.dev, qr.waldrand.dev, and color.waldrand.dev are planned — the shape below is settled, the implementation follows.

MethodHost / PathContent-TypeState
GETavatar.waldrand.dev/{seed}.svgimage/svg+xmlonline
GETimage.waldrand.dev/{w}x{h}image/webpplanned
GETqr.waldrand.dev/{data}.svgimage/svg+xmlplanned
GETcolor.waldrand.dev/paletteapplication/jsonplanned

$waldrand try avatar

Avatar for ada
<img src="https://avatar.waldrand.dev/ada.svg?size=96" width="96" height="96" alt="">

$curl -I https://avatar.waldrand.dev/ada.svg

HTTP/2 200
x-ratelimit-limit: 60
x-ratelimit-remaining: 239
cache-control: public, max-age=2592000, immutable

Any string works as a seed, and the same seed always returns the same image — so the URL is all you store.

Own a use case I haven't built?

open an issue →