Nodes/DJZ-Nodes/VGA Effect v1
ComfyUI Node

VGA Effect v1

VGA scanlines, bleed, and sync jitter

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 78
VGA Effect v1
  • images
  • IMAGE
horizontal_resolution640
vertical_resolution480
refresh_rate60
scan_line_intensity0.15
phosphor_persistence0.20
color_bleed0.30
signal_noise0.05
horizontal_sync_jitter0.5
vertical_sync_jitter0.2

VGA Effect v1 makes your image look like it's being displayed on a mid-90s CRT monitor - the pixelated 640×480 resolution, the scanlines, the phosphor glow, the signal noise, and the drifting sync that makes the whole frame shiver. It's a sibling of the pack's VHS nodes, aimed at the monitor aesthetic instead of the tape aesthetic. If synthwave, retro-computing, or "hacked mainframe" is your vibe, this is the node.

How it works

The pipeline is the interesting part, because the resolution handling is smarter than a naive downscale:

  1. Resize to VGA - the frame is downscaled to your horizontal_resolution × vertical_resolution (default 640×480), then upscaled back to the original size with nearest-neighbor. That round-trip is what produces the chunky pixels: you keep your canvas dimensions but get true VGA blockiness instead of a tiny image in a big frame.
  2. Color bleed - channel offsets simulate the imperfect beam convergence of a real CRT.
  3. Sync jitter - horizontal_sync_jitter and vertical_sync_jitter shift the image randomly per frame, reproducing that unstable-signal wobble. These are the inputs that make it feel alive on video and just "wrong" on a still.
  4. Phosphor persistence - a subtle smear/trail effect (phosphor_persistence, 0–1) that mimics the slow decay of a phosphor screen.
  5. Signal noise - signal_noise (0–0.5) adds the video-snow.
  6. Scanlines - scan_line_intensity (0–1) lays the dark scanline pattern over everything, matching the original canvas size.

Everything is per-frame, so it runs on batches and video without special handling.

Inputs and outputs

  • images - the batch to process
  • horizontal_resolution / vertical_resolution - the VGA target (320×240 up to 1024×768, step 8). Lower = chunkier
  • refresh_rate (30–75, default 60) - sets the vibe more than anything visual; it's part of the "this is a monitor" fiction
  • scan_line_intensity, phosphor_persistence, color_bleed, signal_noise, horizontal_sync_jitter, vertical_sync_jitter - the texture and instability stack

Output: IMAGE, same dimensions as the input.

Where you'd use it

It slots right next to the pack's other retro effects - run a clip through VGA Effect for a "surveillance monitor" scene, or apply it to a still for an instant desktop-window flashback. It's also a great layering effect: because the output keeps your original resolution, you can composite the "monitor" version over a CRT frame or a screen bezel without resolution math.

Install

Part of DJZ-Nodes by Drift Johnson. ComfyUI Manager → "DJZ-Nodes", or:

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

Restart ComfyUI. numpy/torch/cv2 only - all in ComfyUI.

Gotchas

The jitter inputs are the double-edged sword: on a video they sell the effect, but they're random per call, so the same frame run twice gets a different wobble - don't expect frame-identical reproducibility here. And keep horizontal_resolution/vertical_resolution in the standard 4:3 pairings (640×480, 800×600) or the "VGA look" reads as just "pixelated." Push sync jitter too high and you get a torn, headache-inducing image - which, to be fair, is also authentic.

Categoryimage/effects

Inputs (10)

NameTypeDefaultDescription
imagesIMAGE
horizontal_resolutionINT640320–1024
vertical_resolutionINT480240–768
refresh_rateINT6030–75
scan_line_intensityFLOAT0.150–1
phosphor_persistenceFLOAT0.200–1
color_bleedFLOAT0.300–1
signal_noiseFLOAT0.050–0.5
horizontal_sync_jitterFLOAT0.50–5
vertical_sync_jitterFLOAT0.20–2

Outputs (1)

NameTypeDescription
IMAGEIMAGE