Source
Preview at every size
Presets
Download
HTML snippet
site.webmanifest
Why step-downscaling matters
- Single-step downscale to 16×16 is blurry. The browser's default
drawImage()uses bilinear interpolation, and going from 512 → 16 in one pass throws away too much signal between source pixels. - Halving repeatedly preserves edges. 512 → 256 → 128 → 64 → 32 → 16. Each halve averages 4 source pixels into 1, which is the cleanest possible filter. Final tiny image keeps its character.
- Test it visually. Try a text preset, then drop the chain length by editing
downscaleStepsto return[target]directly. Reload, look at 16×16. The difference is severe.