ComfyUI Node

Dither

Ordered dithering for that retro color-depth look

By Scorpiosis0·Created 10 months ago·Updated 2 months ago· 3
Dither
  • image
  • IMAGE
dither_method
r_levels8
g_levels8
b_levels8
dither_scale1.00
apply_type

Reduce an image to 8 levels per channel and the result is banding, unless you add noise that fools the eye into seeing smooth gradients. That trick - distributing quantization error as a pattern instead of letting it clump into bands - is dithering, and it's the reason old 16-color games and 256-color web art still read as smooth. Dither from WtlNodes is a proper ordered dithering implementation: pick a method, set per-channel levels, and out comes a reduced-color image with deliberate, reproducible texture.

It's a niche look, but a real one. If your pipeline touches pixel-art, retro-game styling, print-prep, or any aesthetic that wants visible color quantization without banding, this is the node.

The inputs

  • dither_method - none, bayer, arithmetic_add, or blue_noise. The method is the character of the texture:
    • bayer - the classic ordered matrix dither, regular and geometric. The "retro game" look, and the default you'll want for most pixel art.
    • arithmetic_add - a simpler additive pattern; coarser and more uniform.
    • blue_noise - randomly distributed, organic texture, less geometric than Bayer. Better for photographic images, closer to how film grain breaks up tone.
  • r_levels / g_levels / b_levels - color depth per channel, 2 to 256, default 8. This is where the "retro" lives: 8 levels per channel is that classic low-color look; higher levels (32, 64) give a subtler, film-like quantization. Because they're per-channel, you can keep skin tones fine (g/b at 32) while crushing the red channel for an effect.
  • dither_scale - 0.25 to 5: scales the dither pattern's amplitude. Lower = subtler, higher = more visible texture.
  • apply_type - the pack-wide live-preview dropdown.

One IMAGE out.

How to use it well

The look is entirely in the levels and the method. For pixel-art: bayer, levels around 8–16 per channel, and a dither_scale of 1 - that's the clean, authentic crunch. For a photographic "printed" feel: blue_noise with levels 32–64 keeps gradients smooth while adding a printable texture that hides banding. The two methods aren't interchangeable in character; matching method to intent is most of the skill.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Scorpiosis0/ComfyUI-WtlNodes.git

Restart ComfyUI, or install via ComfyUI Manager (search "WtlNodes"). No models, no heavy deps.

Gotchas

  • Dithering reduces color depth on purpose. If the output looks "crushed," that's the point - check the per-channel levels, not the node. Levels of 256 per channel is essentially no reduction.
  • dither_scale up = texture, not detail. Crank it to 5 and you get aggressive noise, not finer shading. The texture IS the aesthetic here.
  • Bayer has a direction. Its matrix pattern is geometric and can produce moiré on fine repeating detail in the source. If you see weird interference patterns on fabric or foliage, switch to blue_noise.
CategoryWtlNodes/image

Inputs (7)

NameTypeDefaultDescription
imageIMAGE
dither_methodCOMBO4 options: none, bayer, arithmetic_add, blue_noise
r_levelsINT82–256
g_levelsINT82–256
b_levelsINT82–256
dither_scaleFLOAT1.000.25–5
apply_typeCOMBO3 options: none, auto_apply, apply_all

Outputs (1)

NameTypeDescription
IMAGEIMAGE