Dithering
Reduce an image to a handful of colours without it turning into flat bands. Three error-diffusion kernels, two ordered Bayer matrices, and a plain threshold so you can see what the dithering is actually doing.
Drag & drop a file here, Ctrl+V to paste, oror
Error diffusion
Floyd–Steinberg pushes the rounding error into four neighbours (7/16, 3/16, 5/16, 1/16). Atkinson passes on only six eighths of it, which is why it blows out highlights. Jarvis–Judice–Ninke spreads across twelve neighbours over three rows for a smoother, softer grain.
Ordered (Bayer)
Bayer 4×4 and 8×8 bias the threshold by a fixed screen pattern instead of carrying error forward. The result tiles and stays stable frame to frame, which is why ordered dithering is what old games and printer screens used.
100% private
Your image never leaves your device. Every algorithm runs on the Canvas API in your browser and the PNG is built locally. No upload, no storage, no account.
How it works
What dithering actually does
Reducing an image to two or four colours by rounding each pixel to the nearest one produces flat bands, because every pixel in a gradient rounds the same way. Dithering keeps the rounding error instead of discarding it. Error-diffusion algorithms push that error into neighbouring pixels that have not been processed yet, so a region that is 30% grey ends up with roughly 30% of its pixels black — the eye averages them back into the tone that was lost. Ordered algorithms do it differently: they add a fixed per-position bias from a matrix before rounding, so the same tone always breaks up in the same repeating pattern. Both are exact arithmetic on pixel values, which is why this page can print the numbers it uses rather than describe them.
The exact kernels this tool uses
Floyd–Steinberg distributes the error to four neighbours as 7/16 right, 3/16 below-left, 5/16 below and 1/16 below-right. Atkinson sends 1/8 to each of six neighbours, so only six eighths of the error survives — the deliberate loss is what gives it that high-contrast, blown-highlight look from early Macintosh screens. Jarvis–Judice–Ninke spreads over twelve neighbours across three rows with a divisor of 48. Bayer 4×4 and 8×8 are the standard recursive threshold matrices containing every value from 0 to 15 and 0 to 63 exactly once. The plain threshold option carries no error at all and is there as a control: switch to it and you are looking at what the image would be without any dithering.
Levels, palette and pixel size
Output levels sets how many evenly spaced values each channel is allowed. Two levels in grayscale is classic 1-bit black and white. Four or eight levels in colour mode gives the reduced-palette look of old indexed-colour graphics while keeping recognisable hues. Pixel size shrinks the image before dithering and scales the result back with nearest-neighbour, so the dither pattern itself becomes visible as chunky pixels rather than being smoothed away. The download is a PNG on purpose — JPEG would re-smear the flat exact values the dither just produced. To reduce colours without a dither pattern, use the Color Palette extractor; to resize before or after, use the Image Resizer.
Where it runs
Everything happens in your browser through the Canvas API. The image is never uploaded, nothing is stored, and no account is needed. Large images are worked at up to 2048px on the long edge for speed; the source is never scaled up, because upscaling would invent detail before the transform reduced it. This is a transform, not an analysis — it changes how the image looks and reports nothing about it.