Nodes/MKRShift_Nodes/Vignette Pro
ComfyUI Node

Vignette Pro

Vignettes that don't wreck your highlights — a Pro-grade falloff

By criskb·Created 7 months ago·Updated 5 months ago· 0
Vignette Pro
  • image
  • mask
  • image
  • mask
  • vignette_info
settings_json{"amount":0.42,"midpoint":0.58,"feather":0.24,"roundness":0.78,"center_x":0.5,"center_y":0.5,"highlight_protect":0.35,"saturation_shift":-0.06,"mix":1.0,"mask_feather":12.0,"invert_mask":false}

A vignette is the cheapest single move for making an image read as "photographed" - corner falloff is what real lenses do, and the corpus is clear that it's part of the standard de-AI kit (motion blur + grain + vignetting shows up in more than one realism thread). But a bad vignette is worse than none: the kind that just darkens everything clips your shadows and puts a muddy ring in the frame. Vignette Pro is the version that does it properly - with shape control, highlight protection, and a saturation shift - so the edges fall off like glass instead of a flashlight with a hole cut in it.

How it works

The vignette is built as a radial falloff field with amount (how strong), midpoint (where the falloff starts), and feather (how soft the transition is) - those three are the classic shape controls. Then the two Pro knobs: roundness lets you push the falloff from circular toward rectangular so it respects a 16:9 or 3:2 frame, and center_x/center_y offset it if your composition wants an off-center falloff. highlight_protect is the one that matters in practice: it reduces how hard the vignette crushes bright regions, so a glowing sky doesn't turn into a gray smudge at the edges. saturation_shift lets you desaturate the darkened corners slightly, which is what gives a vignette that "lens" feel rather than "shade over the frame" feel. mix is the master blend.

Optional mask with mask_feather/invert_mask restricts where the vignette applies. Outputs: image, mask (the falloff field - handy if you want to inspect it), and vignette_info.

The inputs that matter

  • amount - strength (0.42 default; can go negative for an inverse/light vignette)
  • roundness - circular (lower) vs. rectilinear (higher) falloff
  • highlight_protect - keep skies and bright edges from going muddy (0.35 default)
  • saturation_shift - the lens-like corner desaturation (default −0.06)

Installing it

Ships in MKRShift Nodes from criskb. ComfyUI Manager → "MKRShift Nodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart ComfyUI; it's under MKRShift Nodes → VFX → Photo. No models or extra deps - numpy/Pillow/torch.

Common gotchas

New pack, no community lore, so the code is ground truth. Standard MKRShift JSON traps: broken settings_json silently reverts to defaults, out-of-range values clamp silently. The grading gotcha: a vignette should be felt, not seen. At the default amount 0.42 you'll notice it; for most AI images the tasteful setting is lower, around 0.2–0.3, especially if you're also adding tone_fade from the Tone node - stacking both washes the corners out fast. And if you're working on a wide frame, raise roundness or the corners will darken before the edges do, which looks like a spotlight, not a lens.

CategoryMKRShift Nodes/VFX/Photo

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"amount":0.42,"midpoint":0.58,"feather":0.24,"roundness":0.78,"center_x":0.5,"center_y":0.5,"highlight_protect":0.35,"saturation_shift":-0.06,"mix":1.0,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
vignette_infoSTRING