ChromaDot
CHROMADOTretro dither
← All guides

GUIDE · 5 MIN READ

The best dithering algorithm for pixel art

The honest answer is that it depends on your image. Here is how to decide in about thirty seconds.

Floyd-Steinberg with the PICO-8 palette. A good default for soft, glowing subjects.
Floyd-Steinberg with the PICO-8 palette. A good default for soft, glowing subjects.

Start with Floyd-Steinberg

If you have no particular reason to choose otherwise, use Floyd-Steinberg. It is the most balanced of the error diffusion algorithms, it preserves detail well across palettes from two colours to fifty, and its fine grain suits most photographs. Every other choice on this list is a reaction to a specific problem with it.

Switch when the image tells you to

If your subject is high contrast and you want it graphic rather than photographic, use Atkinson. It discards a quarter of the error, which opens the highlights and deepens the shadows. This is the right choice for portraits with hard lighting, one-bit black and white, and the Game Boy palette.

If your image is mostly smooth gradient, sky, mist or skin, and Floyd-Steinberg is producing visible banding, use Jarvis. Its twelve-neighbour kernel spreads error so widely that banding essentially disappears. You pay for it with softness, so it is the wrong choice for fine detail.

If you want that gradient smoothness but cannot afford the softness, use Stucki, which weights the same wide footprint more tightly, or Sierra-3, which sits deliberately between Floyd-Steinberg and Jarvis.

If you want a visible repeating pattern, or your output will be animated, use ordered Bayer. It is the only option here whose texture is stable between frames.

Resolution matters more than the algorithm

People agonise over algorithm choice and then leave the dither scale at whatever it defaulted to. That slider usually matters more. It controls the resolution the dithering is computed at before the result is scaled back up, which is what actually determines how chunky the pixels look.

A low value gives big, obviously retro blocks and destroys fine detail. A high value keeps detail but makes the reduction subtle enough that people may not notice it happened. Set that first, then choose the algorithm, and you will get where you are going much faster.

The last variable is the palette. A four-colour palette forces the algorithm to work hard and every difference between algorithms becomes obvious. At fifty colours they all look broadly similar. If you are comparing algorithms, compare them in one-bit black and white where the differences are loudest.

More guides

What is image dithering?

A four-colour Game Boy could show a recognisable human face. Dithering is the trick that made that possible, and it still works.

Floyd-Steinberg vs Atkinson

Two algorithms, one deliberate act of throwing information away, and a completely different look as a result.

Ordered dithering vs error diffusion

One reacts to the picture. The other does not care what the picture is. That is the whole distinction, and it decides which one you want.

How to make a halftone effect from any photo

The newsprint look is not one setting. It is three, and getting them in the right order takes about a minute.