NIKOLA KISEL
← BLOG

The icon generator: pixel art canvas with a median blur upscaler

dev tools design

Most icon generators on the internet are either AI-assisted guesswork or vector editors with too many panels. Neither of those is what I wanted when building quick icons for project dashboards, CLI tools, or token metadata.

What I wanted was a pixel art canvas that exported a clean, upscaled PNG. No login. No credits. No “AI-generated suggestions.”

The result is at nikl.one/apps/icon-generator.

The canvas is 32×32 pixels — the standard grid for favicons, app icons, and most chain metadata. Four tools: draw, erase, flood fill, and an eyedropper. Keyboard shortcuts for everything: B to draw, E to erase, F to fill, I to pick, G to toggle the grid. The palette is the site’s own color system — void blacks, cyan, magenta, acid green — plus a full custom color input for anything outside those sixteen.

The interesting part is the export pipeline. Naive upscaling — just scaling a 32×32 image to 640×640 with nearest-neighbor interpolation — produces perfectly hard pixel edges. That’s often fine. But “neo-pixel” output, where the edges soften slightly while preserving the blocky character of the original, requires something different.

The tool runs a percentile-based median blur over the nearest-neighbor upscale. For every pixel in the 640×640 output, it samples a neighborhood of configurable radius, builds a histogram of channel values, then selects the value at a configurable percentile instead of the strict median. At the 50th percentile you get a true median — edges soften symmetrically. Push the percentile up and lighter values win; pull it down and the image goes darker. Radius controls how wide the neighborhood is: small radius for subtle softening, large radius for a heavily smoothed watercolor effect.

The blur runs in a Web Worker so the main thread stays unblocked during computation. A 640×640 image with a large radius takes a couple of seconds — the worker handles it, the UI stays responsive, and the result drops onto the preview canvas when it’s done.

Export is a single PNG download. 640 pixels — large enough for any platform that accepts raster icons.

The tool doesn’t handle SVG export, animation, or any kind of asset management. It’s a canvas, four tools, a palette, and a filter. Scope is intentional.

The keyword I was going after: free icon generator for developers. The differentiated angle: median blur upscaling with adjustable percentile — not just nearest-neighbor, not AI.