Skip to content

Error Dither — twelve ways to be wrong on purpose

Twelve diffusion algorithms, one image. The error has to go somewhere — where each one pushes it is the whole character of the effect.

An image of figures in protective suits rendered entirely in hard black and white ink dots

Take an image with millions of tones and redraw it using two — black ink and no ink. Round each pixel to whichever is nearer and you get a muddy silhouette: every subtle gradient collapses to a flat field, and the picture's whole middle disappears.

Error diffusion is the fix, and it is almost embarrassingly simple. Round the pixel, then measure how wrong you were — the difference between the tone you wanted and the one you printed. That leftover is the error. Don't discard it. Push it into the neighbouring pixels you have not drawn yet, so they compensate. A pixel that was forced too dark leaves its neighbours a little lighter, and across a region the average comes out right even though every individual dot is wrong.

The error has to go somewhere. Which neighbours receive it, and in what proportions, is the entire character of the algorithm. That distribution is called the kernel, and it is the only thing separating the twelve options in this effect.

Eleven kernels, one image

Same source frame, same settings, only the kernel changed.

Atkinson
Sierra
Sierra Lite
Stucki
Jarvis-Judice-Ninke
Burkes
Ostromoukhov
Riemersma
Drip
Comb
Bend

Eleven, not twelve. Floyd-Steinberg is the reference implementation everyone starts from — the 1975 kernel that pushes error to four neighbours — and on this frame both of its rolls were cut in review. That is not a verdict on the algorithm. It is what happens when the most even-handed kernel meets an image whose interest is in its extremes.

The useful split is roughly this. Atkinson passes on only six eighths of the error and discards the rest — a quarter of every mistake is simply thrown away — which is why it reads cleaner and more contrasty than anything else here. It was built for a 1984 Macintosh and the sacrifice was the point. Stucki and Jarvis-Judice-Ninke spread error across twelve neighbours, so the noise becomes fine and even. Ostromoukhov changes its weights according to the input tone, which kills the worm-like artefacts fixed kernels leave in flat mid-greys. Riemersma abandons scan rows altogether and walks a Hilbert curve through the image, so its error travels along a space-filling path rather than left to right.

Then there are three that stop pretending to be reprographic tools. Every classic kernel is designed to avoid worming — visible streaks where error runs in one direction. Drip, Comb and Bend make the worming the result instead. Comb is the bluntest statement of it: seven eighths of the error goes sideways along the scan and one eighth goes down, so the picture smears into the direction it is being read.

Bend, all the way out

Bend keeps Floyd-Steinberg's four neighbour positions and hands you the four weights — signed. That sign is the whole idea. A positive weight passes error on the ordinary way; a negative one pushes that neighbour away from the tone this pixel just missed, so the error flips sign as it spreads and the quantiser starts to ring. The four are divided by their own sum, so the tone stays correct no matter how extreme the settings get.

A second control decides how much of the error travels at all. At 1.00 you have classic error diffusion. Lower it and the runs get long — the quantiser holds the source value until the reduced carried error finally crosses a level, which happens quickly in mid-grey and takes a very long way anywhere else. Above 1.00 it overshoots on purpose.

Legible
Weave
Coarse
Line screen
Gone

The last two are not failures. Two figures in a dead forest become a flat line-screen with a ghost in it, and then torn colour with no image left at all. If you want the picture back, that is what the first three are for — but the reason Bend exists is that the far end is reachable at all, and it is one slider away from the near end.

Dithering by depth

Here is the part that has no equivalent in a printing press.

Every effect in V3KTR can see the scene's inferred depth, and Error Dither uses it to run a different kernel in each depth band. Near, mid and far can each be dithered by a different algorithm. The subject gets one texture and the background another, from one pass, with no masking and no selection.

Riemersma is the one algorithm with no depth-plane option, and the reason is structural rather than an oversight: it has no scan rows to band. Its path is the curve.

Off
Near + Far
Near · Mid · Far

One kernel across the whole frame treats a crouching figure and the wall behind it as the same material. Split the planes and they separate — the figure holds its edge while the depth behind it breaks down differently, which is the thing a flat dither cannot do at any setting.

⚠️ Two planes is the weakest of the three, which surprised us. Splitting near from far gives you a hard seam with nothing to mediate it; the three-band split reads better precisely because the middle band does the work of a transition. If you are going to band by depth, band it three ways.

What a long run actually shows

This spotlight came out of a deliberate sweep: every kernel, every depth setting, across four source images, two rolls each — 272 rolls, then a human keep-or-drop pass on all of them.

Some of what came back was not what we expected:

  • Bend kept at 78%, Comb at 38% — the two that look most alike on paper are the furthest apart in practice.
  • Comb collapses specifically when banded by depth. Five of eight survived with Planes off; two of eight with either depth setting. Comb sends seven eighths of its error sideways along the scan, and depth bands cut across exactly that direction — which would explain it, though the numbers came first and the explanation after.
  • Three-band depth kept best overall (62%), two-band worst (45%), with no depth banding in between. See above.
  • The source image barely mattered. Four very different frames landed between 54% and 58%. Which kernel you pick matters more than which picture you feed it.

None of that is visible from one roll. It is the argument for rolling a lot and keeping little — and for keeping the discards, because the only way to know 38% is low is to have measured something at 78%.

Error Dither is in the degrade group, free like everything else, and runs entirely in your browser.