Nodes/KarmaNodes/Karma Lens FX
ComfyUI Node

Karma Lens FX

The imperfections that make AI images look photographed

By KarmaSwint·Created about a year ago·Updated 5 months ago· 1
Karma Lens FX
  • image
  • image
chromatic_aberration0.0
vignette_strength0.00
vignette_falloff2.0
distortion0.00
halation_strength0.00
halation_threshold0.80
halation_radius10

Real lenses are flawed, and that's precisely why they look real. Perfectly clean images - no fringing, no edge darkening, no bloom on bright lights - are one of the quickest tells that something was rendered rather than shot. Karma Lens FX is this pack's answer: a node that adds the four classic optical imperfections - chromatic aberration, vignetting, barrel/pincushion distortion, and halation - each independently controllable, all on a single IMAGE in, IMAGE out.

The four effects are what the name says, and each works the way it does on a real lens. Chromatic aberration offsets the color channels slightly so you get that color fringing at the edges of contrasty subjects (lateral CA grows toward image edges, just like real optics). Vignetting darkens the corners radially, with a falloff control that decides how tight the bright center is. Distortion remaps the geometry - positive values bow outward in the barrel direction, negative values pinch inward like pincushion. Halation is the glow that blooms off bright highlights, which is the effect behind CineStill 800T's neon look and, more generally, how light scatters in film emulsions.

Important default-check before you get confused: every effect defaults to 0 except halation_threshold (0.8) and halation_radius (10), so the node is inert until you dial something in. That's intentional - nothing happens until you ask it to. The inputs are chromatic_aberration (0–20, in pixels), vignette_strength (0–1) with vignette_falloff (0.5–5, higher = tighter center), distortion (-1 to +1), and the halation trio of halation_strength (0–1), halation_threshold (0–1, the brightness above which bloom kicks in), and halation_radius (1–50 px, how far the glow spreads).

Installing it

Search "KarmaNodes" in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/KarmaSwint/ComfyUI-KarmaNodes
cd ComfyUI-KarmaNodes
pip install -r requirements.txt

Restart ComfyUI. No model downloads - this is all pure pixel math.

Getting the look right

Where beginners get burned is cranking the values. Chromatic aberration below about 2–3 pixels is invisible (the README says so outright), but once it's visible it goes "oh, that's a lens artifact" fast - 5–10 is already a strong vintage-lens character. Subtle realism lives at CA 1–3 with vignette 0.1–0.2. Halation is the one to be careful with on the other side: halation_strength 0.3–0.5 with a low threshold (0.6–0.7) gives that dreamy bloom over everything, while 0.2–0.4 with a high threshold (0.85–0.95) limits the glow to actual light sources - the right choice for night scenes where you don't want the whole image fogged.

The context this node earns its keep in: it's the middle of the pack's suggested camera pipeline - tone curves, then color, then lens FX, then grain last. That ordering mimics how a real capture happens (the lens imposes its character before the film records it), and it's why stacking these in sequence sells photorealism more convincingly than any single filter. Like the rest of the pack, it won't rescue a bad image - but as the final optical character pass on a clean render, it's the difference between "AI picture" and "photo."

CategoryKarmaNodes/Post-Processing

Inputs (8)

NameTypeDefaultDescription
imageIMAGEInput image to apply lens effects to
chromatic_aberrationFLOAT0.00–20Strength of color fringing at image edges (in pixels)
vignette_strengthFLOAT0.000–1Intensity of edge darkening (0 = none, 1 = maximum)
vignette_falloffFLOAT2.00.5–5Controls how gradually the vignette fades (higher = tighter center)
distortionFLOAT0.00-1–1Lens distortion: positive = barrel, negative = pincushion
halation_strengthFLOAT0.000–1Intensity of highlight bloom/glow effect
halation_thresholdFLOAT0.800–1Brightness threshold above which halation is applied
halation_radiusFLOAT101–50Spread radius of the halation glow (in pixels)

Outputs (1)

NameTypeDescription
imageIMAGE