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.

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.
