$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.
| Method | Host / Path | Content-Type | State |
|---|---|---|---|
| GET | avatar.waldrand.dev/{seed}.svg | image/svg+xml | online |
| GET | image.waldrand.dev/{w}x{h} | image/webp | planned |
| GET | qr.waldrand.dev/{data}.svg | image/svg+xml | planned |
| GET | color.waldrand.dev/palette | application/json | planned |
$waldrand try avatar
<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 →