VideoModulation | GlitchNodes
The CRT dot-matrix monitor look
- images
- image
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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| scan_density | INT | 42–10 | — |
| rgb_shift | FLOAT | 0.0150–0.05 | — |
| brightness | FLOAT | 1.20.5–2 | — |
| dot_pattern | FLOAT | 0.150–1 | — |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |