XWAVE Posterize
Posterize with the dithering options you actually wanted
- image
- IMAGE
Plain posterize - crush the color levels down and watch gradients turn to bands - is a one-trick node in most toolkits. XWAVE Posterize does the trick properly, and what earns it a spot is the dithering section: four methods including real Floyd–Steinberg and Atkinson error diffusion, plus a choice of which color space the quantization happens in. If you want the classic retro print look with smooth gradients instead of ugly banding, this is the node.
How it works
levels (2–256) sets how many steps each channel gets; the step size is 255 / (levels - 1), and every pixel is quantized to the nearest step. Then:
- none - straight quantization. Maximum banding, maximum retro.
- floyd-steinberg - classic error diffusion: the rounding error from each pixel is smeared onto its neighbors (7/16, 3/16, 5/16, 1/16). Best for gradients.
- atkinson - Apple's sharper variant; error is divided by 8 and spread wider. High-contrast, crisp dither.
- ordered - a tiled 4×4 Bayer matrix adds a regular checker pattern instead of diffusing. That's the halftone-ish look.
color_space (rgb, hsv, lab) decides what you quantize. RGB is the plain version; HSV quantizes hue/saturation/value separately which gives wilder, more artistic color steps; LAB aims for perceptually uniform steps (the implementation is a simplified conversion, not color-managed, but it does change the character of the bands).
Inputs: levels, dither, color_space, plus the image. Output: a single IMAGE into Preview/Save.
Setting it up
- 2–4 levels: extreme poster. 8–16: the classic retro/comic look. 32–64: subtle reduction that still kills banding.
- Gradients +
floyd-steinbergis the "make it look like an old print" combo. orderedwhen you want a visible, regular texture rather than a smooth diffused one.hsvcolor space for poster art that pops - hue steps create bold color fields.
Installing it
It's in ComfyUI XWAVE Nodes. ComfyUI Manager → search "XWAVE" → install ComfyUI XWAVE Nodes → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/XWAVEart/comfyui-xwave-xlitch-nodes
cd comfyui-xwave-xlitch-nodes
pip install -r requirements.txt
Pillow, numpy, scipy - no models, no keys. One install covers the pack.
Gotchas
- Floyd–Steinberg and Atkinson are slow. They're pure-Python per-pixel loops with no numpy vectorization. On a big image they'll take real seconds; on a video batch, don't. Use
orderedornonefor anything time-sensitive. levels = 256is a no-op. Step becomes 1, so nothing visibly changes. It's the "off" switch.- HSV/LAB modes run the dither in that space, then convert back - the conversions are simplified, so you may see slightly different hues than a color-managed pipeline would give. Fine for art, wrong if you need exact color.
- Default dither is
none. Expect banding on the first run and don't panic - flip to floyd-steinberg and the image transforms.
The pack is new with zero community signal, so there's no shared settings wisdom - but posterize is deterministic math and easy to eyeball. If you've been making do with a basic posterize and ugly banding, the dither options here are a genuine upgrade.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| levels | INT | 82–256 | — |
| dither | COMBO | 4 options: none, floyd-steinberg, atkinson, ordered | |
| color_space | COMBO | 3 options: rgb, hsv, lab |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |