Lens Distort FX (CRT)
Barrel, pincushion, anamorphic — fake the lens, keep the film look
- image
- IMAGE
AI output is optically sterile. Real footage has character baked into the lens - wide-angle bulge at the edges, that stretched anamorphic widescreen look, a hint of color fringing. Lens Distort FX (CRT) is the node that fakes all three in one GPU pass, and it's the one to reach for when your video or render needs to stop looking like it was born inside a tensor.
It sits in the CRT-Nodes FX category, a set of post nodes that are all "feed an image, get a look" - no samplers, no models, just deterministic pixel math on the GPU. This one does geometry: it bends the image.
How it works
The node builds a normalized coordinate grid and pushes the pixels around it:
- distortion applies a radial polynomial warp - positive values give you the barrel look (edges bulge out, wide-angle GoPro style), negative values pinch toward pincushion (telephoto compression).
- anamorphic_squeeze stretches the vertical axis of the warp, which is what gives that classic 2.35:1 anamorphic look where things are wider than the lens really captured.
- chromatic_radius shifts the red and blue channels slightly apart from green near the edges - the color fringing that cheap real lenses show and that reads instantly as "shot on a lens."
All of it runs through grid_sample on the GPU, so it's fast and batch-friendly.
Inputs
- image - the IMAGE to distort.
- distortion (−1 to 1, default 0) - the warp amount; negative pins, positive bulges. Start around ±0.2 and look; it gets extreme fast.
- anamorphic_squeeze (1 to 2, default 1) - 1 is none; 1.33 is the classic anamorphic squeeze. Past ~1.5 it starts to look cartoonish.
- chromatic_radius (−0.2 to 0.2, default 0) - sign flips which channel leads. Tiny values. 0.01–0.05 is usually plenty.
Output is a single IMAGE, ready for a preview or a save node.
Where it earns its keep
- Video workflows: give generated clips a convincing lens character frame-by-frame - it's deterministic, so no flicker between frames.
- Film-emulation stacks: run Lens Distort → Lens FX (vignette/grain) → your favorite grade, and you've got a "shot on a camera" pipeline.
- Fixing real distortion: shot a video with a wide-angle phone lens and want it flattened? A negative
distortioncounteracts the barrel.
Gotchas
- The distortion scale is aggressive - the range goes to ±1 but the image starts to look broken well before that. Work in small steps.
- It's pure geometry: no light, no film grain, no color grade. The companion
Lens FXnode handles the rest of the film look, and they're designed to be stacked. - Because the warp is aspect-aware (it normalizes by width/height), it behaves correctly on both landscape and portrait frames - but very extreme aspect ratios will push edges toward the clamp, so preview before you commit a long batch.
Install is the shared CRT-Nodes story: ComfyUI Manager → search CRT-Nodes → install and restart, or clone the repo into custom_nodes. Big dependency footprint, graceful degradation on optional imports.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| distortion | FLOAT | 0.00-1–1 | — |
| anamorphic_squeeze | FLOAT | 1.001–2 | — |
| chromatic_radius | FLOAT | 0.000-0.2–0.2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |