Nodes/radiance/Anamorphic Streaks
ComfyUI Node

Anamorphic Streaks

Make it look shot on glass, not generated

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
Anamorphic Streaks
  • image
  • image
  • streak_pass
◄threshold1.00►
◄streak_length64►
◄streak_color_r0.00►
◄streak_color_g0.50►
◄streak_color_b1.00►
◄intensity1.00►
◄streak_directionHorizontal►
◄streak_falloff3.0►

What it is

The horizontal blue flare you get off a bright highlight through a real anamorphic lens. Point lights, car headlights, practicals in a night scene, the sun poking past a doorway - those put a horizontal smear across the frame in anamorphic footage, and generated images almost never have it, because diffusion models have learned the look of the frame and not the optics that made it.

This node adds that streak. Bright-pass, directional smear, add it back.

It's a lens-artefact pass, which puts it in the same family as chromatic aberration and grain: the small physical tells that make a frame read as captured. The KB's line on that whole category is that it's the standard de-AI move - one of the top reasons-AI-video-looks-fake threads ended with a poster listing "motion blur + camera shake + grain + red channel aberration + vignetting" as their stack. This is one of those five, and arguably the most cinematic of them.

How it works

Highlights above threshold are isolated - only the excess over the threshold produces a streak, so raising it doesn't dim the streak, it restricts which pixels feed it. The bright pass is then blurred directionally in a series of cascaded passes. The pass count scales with log2(streak_length), so a 64-pixel streak gets 6 passes, and the kernel is built from an exponential decay whose shape is set by streak_falloff. The result is added back onto the original at intensity.

The colour is a per-channel multiplier, not a tint applied afterward - which is why values above 1.0 are allowed. Going over 1 means the streak carries real HDR energy and can bloom further downstream.

Inputs that matter

streak_color_r/g/b is where the character lives. The default is (0, 0.5, 1) - the cool blue-cyan that anamorphic lenses are known for, because their coatings and the flare path push blue. Classic lens flares (the J.J. Abrams look) go harder and brighter; a subtler streak for a moody interior might drop intensity to 0.3 and pull streak_color_b back.

threshold at 1.0 means "SDR white and above". Feed the node a scene-linear image and you get a much better result, because highlights can genuinely sit at 4.0 or 8.0 and the streak will be driven by them rather than by a clipped white patch. This is one of the few nodes in this pack where working in HDR actually changes the creative result rather than the technical correctness.

streak_length is the tail in pixels: 64 is a clean, restrained star-wars-adjacent streak; 200+ on a 1024-wide image is a statement. streak_falloff controls how quickly it decays - higher is tighter and shorter, lower gives you a longer, softer tail. streak_direction picks Horizontal, Vertical or either diagonal, which lets you fake a vertical smear or a star filter arrangement by running the node more than once.

Outputs

Two, and the second one is the good idea: image (the original with the streak composited on, add blend) and streak_pass (the isolated flare before it was added). The pass lets you composite it yourself - different blend, a mask, a lower opacity, or feeding it into another node's blend input. Anyone who's done this in Nuke will recognise the shape: you don't always want the flare baked in.

Install

ComfyUI Manager → search Radiance → install → restart → refresh. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt

Windows portable users should use ComfyUI's bundled python_embeded\python.exe. This node is torch convolution work; no models. It's a 3.5.0 rewrite of an earlier version that rebuilt its kernel on every pass - the current one builds it once, so if you read older notes complaining about speed, they're out of date.

Gotchas

  • A dark image with no highlights gets nothing. The threshold defines the input; if nothing crosses it, no streak. Raise the exposure or lower the threshold.
  • Streaks that look pasted on. Usually intensity too high, or a threshold so low that mid-tones are feeding the flare. It should read as coming from the source, not sitting on top of it.
  • Applying it to an already-clipped image. In an 8-bit display-encoded frame, every blown highlight is the same value 1.0, so they all streak equally. Scene-linear avoids this.
  • Forgetting the second output exists. If you want control, take streak_pass and composite it yourself.
  • It is not a bloom. Bloom is a soft glow; this is a directional line. Different artefact, different node.
CategoryFXTD STUDIOS/Radiance/VFX

Inputs (9)

NameTypeDefaultDescription
imageIMAGEImage to add streaks to, ideally scene-linear so that highlights above 1.0 drive the flare.
thresholdFLOAT1.000–10Per-channel value above which highlights generate streaks; only the excess over it is streaked. 1.0 = SDR white.
streak_lengthINT641–512Maximum streak tail length in pixels.
streak_color_rFLOAT0.000–5Red component of the anamorphic streak colour. Values > 1.0 produce HDR-energy streaks.
streak_color_gFLOAT0.500–5Green component of the anamorphic streak colour.
streak_color_bFLOAT1.000–5Streak color tint. Default is the cool blue-cyan typical of anamorphic lenses.
intensityFLOAT1.000–10Vignette or streak intensity. Values > 1.0 add HDR energy.
streak_directionCOMBOHorizontalDirection of streak propagation.
streak_falloffFLOAT3.00.5–20Exponential decay rate of the streak kernel. Higher = tighter falloff (shorter effective tail). Lower = longer, softer streak.

Outputs (2)

NameTypeDescription
imageIMAGEOriginal image with streaks composited (add blend).
streak_passIMAGEIsolated streak pass for manual compositing (pre-add).