Nodes/CRT-Nodes/Lens FX (CRT)
ComfyUI Node

Lens FX (CRT)

Chromatic aberration, vignette, and film grain in one node

By PGCRT·Created 2 years ago·Updated a day ago· 132
Lens FX (CRT)
  • image
  • IMAGE
chromatic_aberration1.65
vignette0.60
grain_amount0.35
grain_scale1.0
seed0

AI images are too clean. Sharp edges everywhere, perfect exposure, zero of the optical noise that makes a photograph read as photographed. Lens FX (CRT) is the one-stop fix: chromatic aberration, vignette, and film grain, all in a single node, all running as pure tensor math on the GPU. Feed it an image, get back something that looks like it came off a real lens instead of a denoiser.

It's part of the CRT-Nodes FX category and it's the most "set and forget" node in that family - the defaults are already a tasteful film-look preset. Most of the time you'll leave chromatic_aberration at 1.65, vignette at 0.6, and just adjust the grain.

How it works

Three effects, applied in order:

  • Chromatic aberration shifts the red channel inward and the blue channel outward from the image center - the fringing real lenses show on contrast edges. chromatic_aberration (0–20) scales the shift; the effect is radial, so it's strongest at the corners.
  • Vignette darkens the corners based on distance from center - vignette (0–2) controls how much. That slight falloff at the edges is what gives a frame its "lens" weight.
  • Film grain adds seeded random noise, interpolated up to the full frame size. grain_amount (0–20) is the strength, grain_scale (0.5–20) is the grain size - and because it's seeded, the same seed gives you the same grain every run.

Everything is clamped to [0,1] at the end, so no blown channels leaking out of the node.

Inputs

  • image - the IMAGE to process.
  • chromatic_aberration (default 1.65) - leave near default for realism; crank it for a glitchy, obvious-fringe look.
  • vignette (default 0.6) - subtle at the default; above ~1.2 the corners start to crush.
  • grain_amount (default 0.35) - fine at the default; above ~5 it's heavy noise.
  • grain_scale (default 1) - 1 is fine film grain; larger values make chunky, visible grain like old high-ISO stock.
  • seed - locks the grain pattern so batches stay consistent.

Output is a single IMAGE, ready for preview or your save node.

The moves that matter

  • Video: lock the seed and every frame gets identical grain - no shimmer between frames. This is the node's superpower.
  • Stack with Lens Distort FX for the full "shot on a lens" pipeline: distort the geometry, then add aberration/vignette/grain on top.
  • Batch consistency: same seed = same look across a whole folder of renders.

Gotchas

  • The three effects add up. If you push all three high you'll get a muddy, noisy mess - the defaults are well chosen for a reason, and you're usually adjusting one slider, not all three.
  • Grain is generated and interpolated at the full frame size, so at high grain_amount on big images it's a real cost. Keep it modest on long video runs.
  • It's a look node, not a fixer - it won't correct anything, only degrade it cinematically.

Install is pack-level: ComfyUI Manager → search CRT-Nodes → install and restart, or clone the repo into custom_nodes. Same heavy-suite story as the rest of CRT-Nodes, with graceful fallback when optional deps are missing.

CategoryCRT/FX

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
chromatic_aberrationFLOAT1.650–20
vignetteFLOAT0.600–2
grain_amountFLOAT0.350–20
grain_scaleFLOAT1.00.5–20
seedINT00–18446744073709550000

Outputs (1)

NameTypeDescription
IMAGEIMAGE