ComfyUI Node

FL Dither

Floyd-Steinberg, Bayer, and the other retro color-reduction algorithms

By filliptm·Created 3 years ago·Updated about 17 hours ago· 628
FL Dither
  • images
  • IMAGE
dither_method
num_colors2

Feed it an image, tell it how many colors you want left, and it quantizes down using one of four classic dithering algorithms instead of just flattening to the nearest color and calling it done. This is the node for Game Boy palettes, newspaper-print halftone looks, or the deliberately crunchy low-color aesthetic that shows up a lot in AI-art edits.

The mechanism

Dithering is an old trick - older than digital art, in some of its forms - for faking more colors than you actually have by scattering the error from each quantized pixel into its neighbors, so the eye blends adjacent pixels into an apparent in-between shade. Floyd-Steinberg is the classic: it diffuses quantization error forward into neighboring pixels in a specific weighted pattern, and it's what most people mean when they say "dithering." Ordered and Bayer use a fixed threshold matrix instead of error diffusion, giving you the recognizable crosshatch or checkerboard dot pattern rather than Floyd-Steinberg's more organic noise. Random just adds noise before quantizing - the crudest of the four, and it looks it.

Inputs and outputs that matter

There are exactly three fields. images is the input. dither_method picks the algorithm: Floyd-Steinberg, Random, Ordered, or Bayer. num_colors (2-256, default 2) sets the palette size - at 2 you get a pure black-and-white newspaper-halftone look regardless of method, and it's worth pushing up into the 8-32 range for a proper retro-palette look before the quantization gets fine enough that dithering stops being visually necessary.

Output: a single IMAGE.

Installing it

ComfyUI Manager: search Fill-Nodes, install, restart. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/filliptm/ComfyUI_Fill-Nodes, then restart. Nothing extra to download - it's a self-contained image filter.

Where people get burned

This reduces palette size on whatever color diversity your source already has - it doesn't know or care what that diversity is. Running it on an already near-monochrome image at a high num_colors does basically nothing visible, and running it at num_colors=2 on a busy, colorful source can produce something unreadable rather than stylish.

The method choice matters more than people expect on the first try, too: Floyd-Steinberg reads as "artistic," Ordered and Bayer read as "intentionally retro/CRT," and if you're going for one and land on the other, swap the enum before you start fighting num_colors to compensate - it's the wrong knob for that problem.

Category🏵️Fill Nodes/VFX

Inputs (3)

NameTypeDefaultDescription
imagesIMAGE
dither_methodCOMBO4 options: Floyd-Steinberg, Random, Ordered, Bayer
num_colorsINT22–256

Outputs (1)

NameTypeDescription
IMAGEIMAGE