Nodes/GlitchNodes/VideoModulation | GlitchNodes
ComfyUI Node

VideoModulation | GlitchNodes

The CRT dot-matrix monitor look

By pxl-pshr·Created 2 years ago·Updated 3 months ago· 73
VideoModulation | GlitchNodes
  • images
  • image
scan_density4
rgb_shift0.015
brightness1.2
dot_pattern0.15
seed0

VideoModulation makes your image look like it's being viewed on an old CRT monitor: scanlines, a subtle dot-matrix (aperture-grille) texture, a touch of RGB channel separation, and a brightness lift for that screen-glow feel. It's the pack's gentlest node - where TvGlitch emulates the whole analog signal chain and Scanz stacks every artifact, this one just adds a tasteful monitor layer. Use it as a finishing touch on "this is being watched through a screen" shots, or to prep an image that should look like a security-camera / arcade display.

The mechanism is a clean torch-based pattern stack. It builds a scanline pattern from a sine wave (scan_density controls the line frequency), multiplies in a dot-matrix pattern (dot_pattern sets the intensity of the aperture-grille dots), applies an RGB channel shift via torch.roll (rgb_shift in pixels, small range 0–0.05), and multiplies overall brightness (brightness) for the glow. Because the patterns are generated mathematically rather than sampled from a texture, it stays perfectly clean at any resolution - no moiré surprises.

The inputs that matter

  • scan_density (2–10, default 4) - scanline frequency. 2–4 reads as "arcade monitor," 8+ gets into fine, subtle screen texture.
  • dot_pattern (0–1, default 0.15) - dot-matrix intensity. Low is a whisper of texture; high makes the aperture-grille dots obvious.
  • rgb_shift (0–0.05, default 0.015) - channel separation in pixels. Keep it small; the range is deliberately narrow because a little goes a long way on a clean monitor look.
  • brightness (0.5–2, default 1.2) - the glow boost. 1.2 is that "screen is emitting light" lift.
  • seed - required, though it matters less here than in the random-tear nodes; the pattern is deterministic, the seed mostly affects any per-frame jitter.

Output is image (IMAGE) → PreviewImage/SaveImage. Batch support means you can run a full video through it for a consistent "filmed off a CRT" sequence.

Installing it

Part of the GlitchNodes pack:

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 model downloads.

Gotchas

The main mistake is overdoing dot_pattern - above ~0.4 the dots stop reading as "screen texture" and start looking like you embossed a stipple filter over the whole image. Keep it under 0.3 and let scan_density carry the CRT feel. Also, rgb_shift is capped at 0.05 for a reason: it's measured in screen-fraction pixels, so at 0.05 on a 1080p image you're already getting noticeable ghosting. This node is stable and predictable relative to the pack - the "highly experimental, may break" README warning applies to the pack as a whole, but VideoModulation is one of the calmest of the bunch. Good first node to try if you're easing into GlitchNodes.

CategoryGlitchNodes

Inputs (6)

NameTypeDefaultDescription
imagesIMAGE
scan_densityINT42–10
rgb_shiftFLOAT0.0150–0.05
brightnessFLOAT1.20.5–2
dot_patternFLOAT0.150–1
seedINT00–18446744073709550000

Outputs (1)

NameTypeDescription
imageIMAGE