Nodes/DJZ-Nodes/VHS Effect V3
ComfyUI Node

VHS Effect V3

VHS v3 — the tape is dying and it knows it

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 80
VHS Effect V3
  • images
  • IMAGE
tape_speed
composite_preemphasis4.0
noise_line_intensity0.8
noise_line_thickness2
noise_line_count1
distortion_bands3
max_band_offset10
color_bleed_strength0.3
color_bleed_offset2
sharpen_amount1.5

v2 of the VHS node gives you a clean, realistic tape look. v3 takes that same signal-chain core and then breaks the tracking. This is the "I found this tape in a flooded basement" node - horizontal noise lines slicing through the frame, horizontal bands of the image shoved sideways, and color bleeding on top of the standard VHS degradation. If your clip is supposed to be a horror-tape or a glitched archival recording, this is the one.

What it layers on

V3 inherits the v2 foundation: the YIQ processing, the tape-speed profiles (SP/LP/EP, which set luma/chroma cutoffs and chroma delay), and composite_preemphasis. Then it adds the v3-only layer on top:

  • noise_line_intensity (0-1), noise_line_thickness (1-10), noise_line_count (0-5) - the horizontal bands of static that roll through the frame like a head clog. count 0 turns them off entirely.
  • distortion_bands (0-10) - how many horizontal slices of the image get physically shifted sideways.
  • max_band_offset (0-30) - how far those slices can jump. This is your "the tracking knob is broken" effect; higher values get properly chaotic.
  • color_bleed_strength (0-1) + color_bleed_offset (1-5) - the chroma smear, applied separately from the base signal processing.
  • sharpen_amount (1-3) - final sharpen so the banding reads as video detail rather than blur.

So the mental model is: v2 makes it look like VHS; v3 makes it move like VHS. The distortion and noise lines are what turn a still-feeling image into a jittering, alive tape.

The inputs that matter

  • tape_speed - EP + distortion is the maximum-lore setting.
  • noise_line_count - one line is subtle, 3-5 is "the tape is about to snap."
  • max_band_offset - keep under ~15 for tasteful tracking wobble; above that it's glitch art.
  • distortion_bands with max_band_offset 0 is pointless - they only do something together.

Output: an IMAGE batch at source resolution, same as the other VHS nodes.

Installing

Part of DJZ-Nodes (Drift Johnson / MushroomFleet):

cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt

Or "DJZ-Nodes" in ComfyUI Manager. Like v2 it uses scipy.signal.lfilter for the ringing path - not in the pack's requirements.txt explicitly, but present in any real torch environment; pip install scipy if it trips.

Which VHS node for which job

Quick decision guide: v1 for simple, no-thought tape cosplay; v2 for a realistic-but-clean archival look (SP/LP tape speed); v3 when you want visible tracking artifacts, noise lines, and band distortion - the "this tape has been through hell" aesthetic. The one thing v3 inherits from v2 that's still annoying: no seed input, so the noise and line placement change every run. Bake your output once you've got the look.

Categoryimage/effects

Inputs (11)

NameTypeDefaultDescription
imagesIMAGE
tape_speedCOMBO3 options: SP, LP, EP
composite_preemphasisFLOAT4.00–8
noise_line_intensityFLOAT0.80–1
noise_line_thicknessINT21–10
noise_line_countINT10–5
distortion_bandsINT30–10
max_band_offsetINT100–30
color_bleed_strengthFLOAT0.30–1
color_bleed_offsetINT21–5
sharpen_amountFLOAT1.51–3

Outputs (1)

NameTypeDescription
IMAGEIMAGE