ComfyUI Node Runs on cloud

Vignette

The two-second way to make AI images look shot, not generated

By EllangoK·Created 3 years ago·Updated 2 years ago· 255
Vignette
  • image
  • IMAGE
vignette0.00

Real cameras vignette. Light hitting a cheap lens at the edges falls off, so the corners of a photo come out a bit darker than the middle. Diffusion models mostly don't bother reproducing that, which is one of those tiny tells that a picture was generated instead of captured. This node just adds the tell back - a darkening radial falloff around the frame - and it costs you exactly one wire and one slider. It's the laziest realism upgrade in the pack, and sometimes that's exactly what you want.

Vignette comes from EllangoK/ComfyUI-post-processing-nodes, a small collection of image-effect nodes (PixelSort, FilmGrain, KuwaharaBlur, and a couple dozen others) that has been quietly chugging along on GitHub since mid-2023. The author's README bolds a handful of favorites - Vignette isn't one of them, and that's fair: it's a supporting actor. It's the node you reach for when a render feels "too clean" and you want a little lens imperfection before you hit Save.

How it works

The mechanism is refreshingly honest. It builds a radial gradient across the image - center at 1, corners at 0 - and multiplies your image by it. Center pixels pass through untouched; pixels near the corners get scaled down toward black. Since the falloff is normalized to the image's diagonal, the darkening is always smooth and always fills the frame, no matter what resolution or aspect ratio you feed it. It's a couple of torch operations (linspace, meshgrid, sqrt, clamp) on a tensor that's already in memory, so it's effectively free and runs on whatever device your image is on.

There are only two inputs, and only one of them matters:

  • image (IMAGE) - any batch of images, straight from a VAE decode or an upscale pass.
  • vignette (FLOAT, default 0.0, min 0.0, max 10.0, step 0.01) - the strength. At 0 the node returns your image untouched.

The output is a single IMAGE of the same size, ready to feed a preview, another effect node, or Save Image.

One genuinely useful gotcha buried in the source: the slider claims to go to 10, but the strength is clamped to 1.0 internally. Past 1.0 the corners are fully black and nothing changes. Treat the practical range as 0–1; 0.1–0.3 is the "subtle photographic" zone, and 0.8–1.0 is heavy dramatic/cinematic mood. If you want a colored or light (white) vignette, this node can't do it - it only darkens toward black. It also has no softness/feather control; the falloff shape is what it is.

Where it goes in a workflow

Dead last, after VAE decode and any upscaling - it's a post-process, not a creative pass. Pair it with its pack-mate FilmGrain: grain plus a whisper of vignette is the classic "shot on film, not rendered" combo. (Note FilmGrain already bundles its own vignette control, so if you're using that node you don't need this one.) It's also a stock horror/cinematic tool when you want the frame to collapse into shadow.

Install

Via ComfyUI Manager: search "ComfyUI-post-processing-nodes" and install. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/EllangoK/ComfyUI-post-processing-nodes

Then restart ComfyUI. That's the whole install - this pack has no requirements.txt and no model files to download; it's pure PyTorch, so there's nothing to break or fight with. If a downloaded workflow complains that Vignette is missing, that's a fresh-install restart problem, not a dependency problem.

Troubleshooting

  • Node doesn't show up - you cloned it but didn't restart ComfyUI. Restart, then look under postprocessing/Effects in the node menu.
  • Turning the slider past 1 does nothing - expected, it saturates. It's not broken.
  • Want a bigger/smaller dark area - no control for that here. The falloff scales to the image diagonal, full stop. For shaped or feathered vignettes you'd be in another pack entirely.

The pack does keep old node versions in an old/ folder for backwards compatibility, but the main-repo Vignette is the one you want - it's what shows up in the node list and it works fine.

Categorypostprocessing/Effects

Inputs (2)

NameTypeDefaultDescription
imageIMAGE
vignetteFLOAT0.000–10

Outputs (1)

NameTypeDescription
IMAGEIMAGE