Lens FX (CRT)
Chromatic aberration, vignette, and film grain in one node
- image
- IMAGE
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 sameseedgives 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_amounton 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| chromatic_aberration | FLOAT | 1.650–20 | — |
| vignette | FLOAT | 0.600–2 | — |
| grain_amount | FLOAT | 0.350–20 | — |
| grain_scale | FLOAT | 1.00.5–20 | — |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |