Nodes/DJZ-Nodes/Cathode Ray Effect
ComfyUI Node

Cathode Ray Effect

Animated CRT Looks for Video Batches

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 78
Cathode Ray Effect
  • images
  • IMAGE
presetstatic
custom_expressionsin(t/10) * 0.1 + 0.2
screen_curvature0.20
scanline_intensity0.30
glow_amount0.20
color_bleeding0.15
noise_amount0.05

Cathode Ray Effect is the animated cousin of DJZ's CRT_Effect_v1. Where that node gives you a static tube-TV look you can dial in on a single image, this one bakes time into the equation - and if you're making video, that's the difference between a filter and a vibe. Real CRT artifacts aren't constant; the screen flickers, the glow breathes, the noise swims. This node tries to reproduce that motion across a batch of frames.

The interesting part is the preset menu, which isn't just a quality setting - it's a behavior setting. static applies the effect uniformly. fluctuating adds a sine-wave wobble to every effect's intensity over time. degraded makes the effect get progressively worse across your batch, like a set that's dying. And custom lets you type your own math expression that controls the variation.

How it works

Each frame gets processed through the same chain: screen curvature (a barrel distortion via cv2.remap), a glow (Gaussian blur), per-channel color bleeding, additive noise, and scanlines that darken alternating rows. The preset mode controls a per-frame multiplier that scales those effect amounts, and the custom_expression is evaluated with a t variable that counts up per frame - the default sin(t/10) * 0.1 + 0.2 gives a slow breathing flicker.

One thing to note: that expression is run through eval(). It's your node in your ComfyUI, so it's not a security hole per se, but don't paste expressions from strangers. And if it throws, the node silently falls back to 1.0, so a typo just looks like the effect stopped varying.

The inputs that matter

  • preset - the behavior selector. fluctuating is the one most people land on for footage; degraded is great for horror and post-apocalypse.
  • custom_expression - only matters when preset is custom.
  • screen_curvature, scanline_intensity, glow_amount, color_bleeding, noise_amount - the five effect strengths, all 0–1. noise_amount tops out at 0.5 because anything more just becomes static.

Output is an IMAGE batch, same size, same frame count. Feed it into a video combiner and you've got your retro look.

Installing it

Cathode Ray Effect ships in DJZ-Nodes:

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

Restart ComfyUI, or install via Manager by searching "DJZ-Nodes". It needs OpenCV (in the pack's requirements) and nothing else special - no models to download.

Common issues

People mostly hit two things. First, the effect order matters: curvature is applied to the un-cropped frame first, then glow and bleeding, so cranking screen_curvature to 1.0 on a small image can make the edges smear weirdly with the later steps. Back it off to ~0.2–0.3 unless you want the extreme look. Second, since every effect is scaled by the per-frame variation, static preset is the mode to use when you just want a consistent still frame - if it looks like the effect "turns on and off," you're in fluctuating or degraded and that's the feature, not a bug. If you want a static CRT with more knobs (bloom, RGB offset, presets per TV type), that's CRT_Effect_v1 in the same pack.

Categoryimage/effects

Inputs (8)

NameTypeDefaultDescription
imagesIMAGE
presetCOMBOstatic4 options: static, fluctuating, degraded, custom
custom_expressionSTRINGsin(t/10) * 0.1 + 0.2
screen_curvatureFLOAT0.200–1
scanline_intensityFLOAT0.300–1
glow_amountFLOAT0.200–1
color_bleedingFLOAT0.150–1
noise_amountFLOAT0.050–0.5

Outputs (1)

NameTypeDescription
IMAGEIMAGE