Nodes/ComfyUI-Image-Effects/๐Ÿ“ผ VHS Glitch
ComfyUI Node

๐Ÿ“ผ VHS Glitch

Make Any Image Look Like a Degraded Rental Tape, and Never the Same Way Twice

By orion4dยทCreated about a year agoยทUpdated about a year agoยท 28
๐Ÿ“ผ VHS Glitch
  • image
  • IMAGE
โ—„glitch_intensity0.50โ–บ
โ—„color_shift0.30โ–บ
โ—„scan_linestrueโ–บ
โ—„noise_amount0.20โ–บ
โ—„tracking_errorstrueโ–บ
โ—„color_bleeding0.40โ–บ
โ—„frame_jitter0.10โ–บ

VHS Glitch is the "aged rental tape" button. Drop it on a clean render and you get horizontal tracking bands, per-channel color smearing, scan lines, static, and the occasional frame jump - the whole degraded-VHS aesthetic that's everywhere in cyberpunk and retro-horror thumbnails. It's pure vintage flavor, not a correction tool, so think of it as a finishing effect that goes at the end of your graph, right before save.

There are a lot of "glitch" nodes floating around ComfyUI, and most of them just shift a few color channels. This one is a genuine six-stage pipeline, which is what puts it above the average pack filler.

How it works

The node runs its effects as a sequence, and it's worth knowing the order because it shapes the result. First it slices the image into horizontal bands and shifts random strips sideways (that's the "tracking errors" - the classic VHS head-wrap skip). Then it blurs the red and blue channels independently with a horizontal kernel to fake color bleeding, rotates the hue through HSV for color shift, darkens every other row for scan lines, adds random noise, and finally nudges the whole frame a few pixels with a tiny affine warp for frame jitter.

Here's the thing nobody mentions: it uses np.random internally with no seed control. Every queue gives you a different glitch. That's great for one-off retro posters, and honestly it's period-appropriate - real VHS didn't repeat itself either. But don't expect a deterministic result you can reproduce by re-running.

The inputs that matter

  • glitch_intensity (0โ€“1, default 0.5) - how often and how hard the tracking bands hit. The single most important dial.
  • color_shift (0โ€“1, default 0.3) - hue rotation + saturation boost for that magenta-green misregister look.
  • scan_lines (on by default) - darkens odd rows; toggle off for a cleaner "glitch without CRT" look.
  • noise_amount (0โ€“1, default 0.2) - random static. Crank it only if you like your images crunchy.

Optional extras are tracking_errors (on by default), color_bleeding (0.4) and frame_jitter (0.1). Output is a single IMAGE socket.

Installing it

It's part of ComfyUI-Image-Effects (Orion4D, 32 nodes). Either use ComfyUI Manager โ†’ search "Image Effects", or:

cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/ComfyUI-Image-Effects
cd ComfyUI-Image-Effects
pip install -r requirements.txt

Restart ComfyUI; you'll find it under Add Node โ†’ Image Effects. No models to download - just OpenCV, NumPy, Pillow and SciPy. (The author's also behind the Orion4D_FXMax post-production suite, so the pedigree here is real image-processing work.)

Gotchas

Same pack-wide caveats apply: it only processes the first image of a batch (fine for a single render, annoying for video), and it's CPU NumPy so it's not built for 8K. If you use it on an animated sequence the per-frame randomness produces genuine temporal flicker, which looks suspiciously authentic - lean into it. One practical tip: keep glitch_intensity under ~0.7 unless you want the subject unrecognizable, and run it after any upscale so the artifacts read as intentional rather than as compression noise.

CategoryImage Effects

Inputs (8)

NameTypeDefaultDescription
imageIMAGEโ€”
glitch_intensityFLOAT0.500โ€“1โ€”
color_shiftFLOAT0.300โ€“1โ€”
scan_linesBOOLEANtrueโ€”
noise_amountFLOAT0.200โ€“1โ€”
tracking_errorsoptBOOLEANtrueโ€”
color_bleedingoptFLOAT0.400โ€“1โ€”
frame_jitteroptFLOAT0.100โ€“1โ€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEโ€”