Convert photos to classic 1-bit dithered art in seconds. Floyd-Steinberg, Atkinson, Bayer, all in your browser, no upload needed.
Dithering is the trick that lets an image with two colours pretend it has hundreds. Instead of rounding every pixel to the nearest available shade and getting flat, banded blocks, a dither algorithm scatters the rounding error into neighbouring pixels so the eye blends them back into a tone. It is how newspapers printed photographs for a century, how the original Macintosh drew greyscale on a one-bit screen, and why a dithered image still reads as a photograph when you step back from it.
Every dither algorithm belongs to one of two families, and they fail in completely different ways.
Error diffusion works pixel by pixel. It picks the nearest available colour, measures how wrong that choice was, and pushes the leftover error onto pixels it has not visited yet. Floyd-Steinberg, the best known of these, spreads the error across four neighbours with weights of 7, 3, 5 and 1 sixteenths. The result is organic and grainy, with no visible repeating structure, which is why it holds up on faces and soft gradients.
Ordered dithering compares each pixel against a fixed threshold map instead. A Bayer matrix is the classic one: an 2x2, 4x4 or 8x8 grid of thresholds arranged so that the pattern stays evenly distributed at every density. Because the same matrix repeats across the whole image, ordered dithering produces a visible crosshatch texture. That texture is a feature, not a defect. It is what makes an image read as deliberately screened rather than merely low quality, and it is stable under animation because the pattern does not crawl between frames.
Bitgrain ships fourteen dither algorithms, and the practical differences come down to grain size, contrast handling and how much of the original detail survives.
Floyd-Steinberg is the default for a reason. It preserves the most tonal detail and produces the least structured noise, so use it when you want the photograph to stay legible.
Atkinson, written by Bill Atkinson for the first Macintosh, only diffuses three quarters of the error rather than all of it. The missing quarter is simply discarded, which blows out highlights and crushes shadows. That loss is exactly why Atkinson output looks like an early Mac screenshot: high contrast, open whites, and clean separation between subject and background. Reach for it when you want the image to look printed rather than reproduced.
Sierra and its lighter variants sit between the two, with a wider diffusion kernel that softens the grain without going as flat as Atkinson. Burkes and Stucki spread error further still and suit large prints where the grain would otherwise disappear.
Bayer 2, 4 and 8 give you progressively finer ordered patterns. Bayer 2 is coarse and unmistakably digital. Bayer 8 is fine enough to read as texture at normal viewing distance.
The single biggest mistake with dithering is running it at full resolution. A 4000 pixel wide photo dithered at native size produces grain so fine it vanishes into a grey smear when you view it at any sensible scale.
Dithering is resolution dependent by nature: the pattern is measured in pixels, not in millimetres. Bitgrain exposes a resolution control that downsamples the working grid before the algorithm runs, so you set how big a single dithered dot should be relative to the image. Lower resolution means chunkier, more visible grain. Higher resolution means finer, more photographic grain.
Set that first, then adjust contrast. Dithering has almost no tonal headroom, so lifting contrast before the algorithm runs usually does more for the result than anything you do afterwards.
Dithering is not limited to black and white. Point the same algorithms at a constrained colour palette and you get the look of an indexed-colour display: Game Boy greens, CGA magenta and cyan, Commodore 64, Teletext, or a two-ink riso pairing. Bitgrain includes twenty four hardware and print palettes, and the error diffusion runs in colour space so the blending stays correct.
Because the output is a grid of hard-edged dots rather than a continuous image, it vectorises cleanly. Export as PNG for screen, or as SVG when the artwork needs to scale to a poster or drive a pen plotter. The SVG carries real vector paths, one per dot cluster, so a print shop can enlarge it without a resampling step.
The whole pipeline runs in your browser. Nothing is uploaded, and because every algorithm is deterministic, the same image with the same settings gives you the same pixels every time you open the project.
Posterising rounds every pixel to the nearest available colour and stops there, which produces flat bands. Dithering rounds the same way but redistributes the rounding error into nearby pixels, so the eye reconstructs the missing tones. Same palette, very different result.
Floyd-Steinberg preserves the most detail and is the safest starting point. Switch to Atkinson if you want the high contrast, blown highlight look of early Macintosh graphics, or to a Bayer matrix if you want a visible, repeating screen pattern.
Almost always because it is being dithered at too high a resolution. Drop the resolution control so each dot covers more pixels, then raise contrast before the dither runs. Dithered images need more contrast going in than you would expect.
Yes. Dither output is made of hard-edged dots, so it converts to real SVG paths rather than an embedded bitmap. That matters for large format printing and for pen plotters.