🪠️ WWAA Dither Image
Retro dithering on images or video, with 12 algorithms and GPU speed
- image
- IMAGE
The WWAA Dither Image node applies that grainy, halftone, retro-computer look to images - and, crucially, to video - with a dozen dithering algorithms and a handful of knobs. It's one of the more popular nodes in the WWAA-CustomNodes pack from WeirdWonderfulAI.Art, and the author's own Reddit thread on it (posted early 2025) drew a genuinely enthusiastic response - including a knowledgeable commenter who checked whether it had fallen into the known Python-Pillow dithering bug, and confirmed it hadn't, because it ships a custom implementation.
That's the deep-cut detail worth knowing: Pillow's built-in dithering has a longstanding bug, so this node implements error diffusion itself (vectorized on the GPU). The same thread announced GPU support making video processing about 10× faster, and the pack ships a ready-made "Dither Node - Video Transform" workflow example.
How it works
Feed it an image (works per-frame on a batch, so a video batch just works) and pick dither_type from 12 options: Floyd-Steinberg, Atkinson, Ordered, Bayer, Random, Jarvis-Judice-Ninke, Stucki, Burkes, Sierra, Two-Row Sierra, Sierra Lite, and Halftone. Error-diffusion types (Floyd-Steinberg, Atkinson, and friends) scatter quantization error to neighbors; Ordered/Bayer use fixed threshold patterns (Bayer is the fastest and gives that classic computer look); Halftone does the print-style dot pattern.
The controls: contrast (0–2) pre-stretches values before dithering, threshold (0–255, default 128) is the quantization cutoff, invert flips black/white, scale (1–10) downscales by an integer factor before dithering and back up after - the quick way to get chunky pixel blocks. use_gpu (default on) routes the vectorized ops to CUDA when available; the pack's image nodes need OpenCV in ComfyUI's Python environment, so if the menu's missing, that's the first thing to check.
Inputs that matter
dither_type- the algorithm; Bayer is fast and retro, Atkinson nails the VGA look.threshold- the main look-shaping knob.scale- integer downscale for chunky pixels.use_gpu- leave on for video.
Installing it
It's in the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/hgabha/WWAA-CustomNodes
Restart ComfyUI. Or ComfyUI Manager → search "WWAA Custom Nodes" → install → restart. It's under 🪠️ WWAA/image. No models to download.
Gotchas
The threshold default of 128 assumes your values are already on the 0–255 scale the algorithm quantizes against - if your output looks wrong or washed out, play with contrast and threshold together. scale downscales by integer factors only, so you can't request a fractional scale. And for very large video batches, even with GPU you may want to test one frame first, since error diffusion is inherently sequential per row. For a retro look that's actually fast, Bayer + a moderate scale is the sweet spot - the combo the author demos on video.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| dither_type | COMBO | 12 options: Floyd-Steinberg, Atkinson, Ordered, Bayer, Random, Jarvis-Judice-Ninke, +6 | |
| contrast | FLOAT | 1.00–2 | — |
| scale | INT | 11–10 | — |
| threshold | INT | 1280–255 | — |
| invert | BOOLEAN | false | — |
| use_gpu | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |