Cathode Ray Effect
Animated CRT Looks for Video Batches
- images
- IMAGE
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.fluctuatingis the one most people land on for footage;degradedis great for horror and post-apocalypse.custom_expression- only matters when preset iscustom.screen_curvature,scanline_intensity,glow_amount,color_bleeding,noise_amount- the five effect strengths, all 0–1.noise_amounttops 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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| preset | COMBO | static | 4 options: static, fluctuating, degraded, custom |
| custom_expression | STRING | sin(t/10) * 0.1 + 0.2 | — |
| screen_curvature | FLOAT | 0.200–1 | — |
| scanline_intensity | FLOAT | 0.300–1 | — |
| glow_amount | FLOAT | 0.200–1 | — |
| color_bleeding | FLOAT | 0.150–1 | — |
| noise_amount | FLOAT | 0.050–0.5 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |