๐ผ VHS Glitch
Make Any Image Look Like a Degraded Rental Tape, and Never the Same Way Twice
- image
- IMAGE
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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | โ | |
| glitch_intensity | FLOAT | 0.500โ1 | โ |
| color_shift | FLOAT | 0.300โ1 | โ |
| scan_lines | BOOLEAN | true | โ |
| noise_amount | FLOAT | 0.200โ1 | โ |
| tracking_errorsopt | BOOLEAN | true | โ |
| color_bleedingopt | FLOAT | 0.400โ1 | โ |
| frame_jitteropt | FLOAT | 0.100โ1 | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |