FL Dither
Floyd-Steinberg, Bayer, and the other retro color-reduction algorithms
- images
- IMAGE
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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| dither_method | COMBO | 4 options: Floyd-Steinberg, Random, Ordered, Bayer | |
| num_colors | INT | 22–256 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |