VGA Effect v1
VGA scanlines, bleed, and sync jitter
- images
- IMAGE
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:
- 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. - Color bleed - channel offsets simulate the imperfect beam convergence of a real CRT.
- Sync jitter -
horizontal_sync_jitterandvertical_sync_jittershift 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. - Phosphor persistence - a subtle smear/trail effect (
phosphor_persistence, 0–1) that mimics the slow decay of a phosphor screen. - Signal noise -
signal_noise(0–0.5) adds the video-snow. - 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.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| horizontal_resolution | INT | 640320–1024 | — |
| vertical_resolution | INT | 480240–768 | — |
| refresh_rate | INT | 6030–75 | — |
| scan_line_intensity | FLOAT | 0.150–1 | — |
| phosphor_persistence | FLOAT | 0.200–1 | — |
| color_bleed | FLOAT | 0.300–1 | — |
| signal_noise | FLOAT | 0.050–0.5 | — |
| horizontal_sync_jitter | FLOAT | 0.50–5 | — |
| vertical_sync_jitter | FLOAT | 0.20–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |