Nodes/GlitchNodes/Scanz | GlitchNodes
ComfyUI Node

Scanz | GlitchNodes

Every CRT artifact, stacked in one node

By pxl-pshr·Created 2 years ago·Updated 3 months ago· 73
Scanz | GlitchNodes
  • image
  • image
glitch_amount0.50
channel_shift0.20
pixel_sorting0.30
wave_amplitude0.00
wave_frequency0.5
wave_speed1.0
scan_lines0.00
scan_drift0.00
scan_curve0.20
color_drift0.00
static_noise0.00
edge_stretch0.00
seed0

Scanz is the all-in-one CRT-and-compression node: scanlines, wave distortion, RGB channel shift, compression artifacts, pixel sorting, static noise, color drift, and edge stretching, all stacked with individual intensity sliders. Where DataBend goes for data-bend chaos, Scanz goes for broadcast - the look of a TV being tortured by a weak antenna. If you want to build a "vintage monitor" treatment from one node instead of a chain of six, this is the one.

It's a stack of independent OpenCV/NumPy passes that add up in a predictable order: glitch_amount first (JPEG-like compression blocking), then channel shifting for chromatic aberration, then pixel sorting, then wave distortion, scanlines, and the color/static extras. Each effect has its own slider and defaults to off where it's disruptive - so you can compose the exact recipe you want rather than taking whatever the node gives you. The scanline pass is notably smart: it modulates scanline intensity with brightness so the pattern doesn't nuke bright areas, and scan_curve gives that subtle CRT barrel look.

The inputs that matter

  • glitch_amount (0–1, default 0.5) - compression-artifact intensity. This is the baseline "broken" factor.
  • channel_shift (0–1, default 0.2) - RGB channel displacement, i.e. chromatic aberration ghosting. Keep it under ~0.4 for subtle, higher for full color bleed.
  • scan_lines (0–1) - CRT scanlines. Off by default, which is a good call; when you turn it on, pair it with scan_drift for moving bands.
  • scan_curve (0–1, default 0.2) - screen curvature. A little gives that authentic convex-CRT vibe.
  • wave_amplitude (0–1), wave_frequency (0.1–5), wave_speed (0.1–5) - the wave distortion trio. Off by default; this is your "signal wobble" effect.
  • pixel_sorting (0–1, default 0.3) - brightness-based sorting threshold; adds the streaky interference texture.
  • color_drift / static_noise / edge_stretch - the extras. static_noise specifically concentrates noise in darker areas, which reads as analog rather than digital.
  • seed - required, so your exact artifact recipe is reproducible.

Output is image (IMAGE) → PreviewImage/SaveImage, with batch support for animating the drift and waves.

Installing it

Standard GlitchNodes install:

cd ComfyUI/custom_nodes
git clone https://github.com/pxl-pshr/GlitchNodes
# restart ComfyUI

or ComfyUI Manager → Install Custom Nodes → search "GlitchNodes". Deps: numpy, torch, Pillow, opencv-python, scipy. No models.

Gotchas

The trap with Scanz is stacking too much: with channel_shift, waves, scanlines, static, and edge_stretch all nonzero, you get a fully unreadable frame and no idea which effect ruined it. Build it up one slider at a time - that's the whole point of the design. Also, wave_speed and scan_drift only matter if you're animating; for a still, they just freeze mid-drift and can look arbitrary. And pack warning stands: "highly experimental and may break or even error" - though Scanz is one of the more complete, stable nodes, given it's basically a curated stack of classic effects.

CategoryGlitchNodes

Inputs (14)

NameTypeDefaultDescription
imageIMAGE
glitch_amountFLOAT0.500–1
channel_shiftFLOAT0.200–1
pixel_sortingFLOAT0.300–1
wave_amplitudeFLOAT0.000–1
wave_frequencyFLOAT0.50.1–5
wave_speedFLOAT1.00.1–5
scan_linesFLOAT0.000–1
scan_driftFLOAT0.000–1
scan_curveFLOAT0.200–1
color_driftFLOAT0.000–1
static_noiseFLOAT0.000–1
edge_stretchFLOAT0.000–1
seedINT00–18446744073709550000

Outputs (1)

NameTypeDescription
imageIMAGE