VHS Effect V3
VHS v3 — the tape is dying and it knows it
- images
- IMAGE
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.
count0 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.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| tape_speed | COMBO | 3 options: SP, LP, EP | |
| composite_preemphasis | FLOAT | 4.00–8 | — |
| noise_line_intensity | FLOAT | 0.80–1 | — |
| noise_line_thickness | INT | 21–10 | — |
| noise_line_count | INT | 10–5 | — |
| distortion_bands | INT | 30–10 | — |
| max_band_offset | INT | 100–30 | — |
| color_bleed_strength | FLOAT | 0.30–1 | — |
| color_bleed_offset | INT | 21–5 | — |
| sharpen_amount | FLOAT | 1.51–3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |