Dither

Apply dithering to reduce value precision while preserving perceived density.

What it does

Dither reduces an image to a small number of value levels per channel while holding the impression of the original gradient, trading smooth tonal steps for fine noise that reads as continuous at a distance. Two families of method are available: ordered patterns (Bayer, Blue Noise, White Noise) threshold each pixel against a repeating tile, and error-diffusion methods (Floyd-Steinberg through Sierra-Lite) carry each pixel's rounding error forward into its neighbours for a softer result.

Ordered methods can borrow a halftone or line pattern shape instead of the Bayer grid, and can pixelate the source into blocks before dithering. Dither also runs on a Collection's per-point colour or scalar attribute, using each point's position to drive the same threshold pattern.

When to use it

ParameterTypeDefaultWhat it does
content_inRaster or Collection or GPU Geometry or Geometries——
methodString"Bayer"Ordered (Bayer/Blue Noise/White Noise): fast per-pixel dither. \ Error Diffusion (Floyd-Steinberg ... Sierra-Lite): wavefront-parallel \ residual diffusion (slower, higher quality). One of: Bayer, Blue Noise, White Noise, Floyd-Steinberg, Atkinson, Jarvis-Judice-Ninke, Stucki, Burkes, Sierra3, Sierra2, Sierra-Lite.
levelsNumber4Number of discrete levels per channel (2 = binary, 256 = no reduction)
matrix_sizeString"4x4"Size of the Bayer threshold matrix (larger = finer pattern). One of: 2x2, 4x4, 8x8.
strengthNumber1Intensity of the dithering effect (0 = no dither, 1 = full)
patternString"Bayer"Threshold pattern shape. One of: Bayer, Halftone Dot, Halftone Diamond, Halftone Ellipse, Line Horizontal, Line Vertical, Line Diagonal, Cross-hatch.
pattern_scaleNumber1Size of the pattern tile in pixels. 1.0 = 1:1 pixel grid, larger = coarser pattern.
pattern_angleNumber0Rotate the dither pattern (degrees).
pixelate_inputBooleanfalseSnap the source sample to each pattern_scale block so the output is chunky/pixelated instead of letting full-resolution detail show through.
pattern_textureRaster—Custom threshold pattern image. Luminance becomes the dither threshold.
threshold_biasNumber0.500Shift quantization center. 0.5 = neutral. Lower = brighter, higher = darker.
per_channelBooleanfalseEnable separate dither strength per RGB channel.
strength_rNumber1Dither strength for red channel
strength_gNumber1Dither strength for green channel
strength_bNumber1Dither strength for blue channel
mixNumber1Blend between original (0) and dithered (1).
temporal_modeString"Static"Static: same pattern every frame. Animated: pattern varies per frame. Stable: content-aware coherence. One of: Static, Animated, Stable.
attributeString"Cd"Attribute to dither when the input is a Collection. Search or pick from the input's float/colour/vector attributes, or type a name.
attribute_typeString"Color"Channel layout of the attribute being dithered. Color dithers RGB (e.g. Cd); Scalar dithers a single float (e.g. density, alpha). Collection attribute widths aren't known at build time, so this is explicit. One of: Color, Scalar.
spatial_strengthField—Spatial field controlling where the effect applies (0=bypass, 1=full)

Gotchas

Ordered methods (Bayer, Blue Noise, White Noise) and error-diffusion methods (Floyd-Steinberg, Atkinson, Jarvis-Judice-Ninke, Stucki, Burkes, Sierra3, Sierra2, Sierra-Lite) work differently. Pattern, Pattern Scale, Pattern Angle, Pixelate Input and Temporal Mode apply to ordered methods only, and are ignored once an error-diffusion method is selected.

On a Collection input, points or a mesh, error-diffusion methods have no scanline to diffuse across and fall back to Bayer silently. Pixelate Input is raster-only as well: each point carries only its own attribute value, so there is no neighbouring pixel to snap to.

Per-channel strength pushes the dither harder on one colour channel than another, which keeps shadows or a dominant colour clean while the rest roughens. Threshold Bias is separate: it shifts the rounding centre rather than the strength, down to bias the result brighter, up to bias it darker.

Worked example

  1. Add a Dither node and feed it an image.

  2. Drop Levels to 2–4 for a strong posterised look, or keep it higher for a subtler reduction in value precision.

  3. Try Bayer first for a fast, regular pattern, then switch Method to Floyd-Steinberg for a softer stipple.

  4. With an ordered method selected, raise Pattern Scale for a coarser tile, or switch Pattern to Halftone Dot for a print-style look.

  5. Enable Pixelate Input to snap the source to the pattern grid for a chunky, low-res result.

  6. Bring Mix down from 1 to blend the dithered result back with the original image.

See also

Quantize · Levels · Colour Correct · Rasters (images)