Vignette
A fast, tweakable dark-edge filter that won't fight the GPU
- image
- ui_widget
- image
- image_list
Vignettes are the oldest trick in the photo book: darken the corners, and suddenly the center of the image looks punchier and more intentional. LF_Vignette is the ComfyUI-native version, and unlike doing it in an external editor, you can drop it into the middle of a workflow and tune it per run - or run a whole batch through it without touching an image program once.
The mechanism is classic image processing, done on the CPU in numpy/Pillow rather than the GPU. It builds a distance map from the image center - elliptical by default, which corrects for aspect ratio so wide images don't get weirdly dark sides - then creates a gradient mask from your radius outward and multiplies the image toward a target color. Gaussian blur on the mask keeps the transition soft instead of a hard ring.
The inputs that matter:
intensity(0–1, default 0.5) - how dark the edges get. Higher = darker.radius(0–1, default 0.75) - how far from the center the darkening starts. Lower = the vignette hugs the middle.shape-elliptical(default) orcircular.color- the hex tint the edges fade toward, default000000(black).
The output is the filtered image as both image and image_list, so it slots into single-image or batched pipelines equally well. It's not an output node, so chain it anywhere - into a save, an upscaler, a face detailer pass.
Where you'd actually use this: portrait shots that need the background pushed back, product-style renders that want the subject to pop, or just adding a cinematic feel before a final upscale. The KUL_COMPARE widget shows before/after so you can see what you're doing as you slide intensity - which is the one control that reads backwards the first time (0.5 is already noticeably dark, so start low).
Installing LF Nodes - same pack, same steps:
- ComfyUI Manager → search "LF Nodes" → install → restart, or
cd ComfyUI/custom_nodes && git clone https://github.com/lucafoscili/comfyui-lfthen restart.
The usual LF caveats apply: the repo is in legacy mode (frozen, migrated to lucafoscili/lf-nodes) and this node carries over unchanged. It needs no models. The one real gotcha is that the filter's a frontend-driven process - the node pushes results to its compare widget via a websocket event, so if the Ketchup Lite UI didn't load you'll still get the filtered image on the output but no before/after view. Output's the source of truth; treat the widget as gravy.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Input image tensor or a list of image tensors. | |
| intensity | FLOAT | 0.500–1 | Controls the darkness of the vignette effect. Higher values mean darker edges. |
| radius | FLOAT | 0.750–1 | Controls the size of the vignette effect. Lower values mean a smaller vignette. |
| shape | COMBO | elliptical | Selects the shape of the vignette effect. |
| color | STRING | 000000 | Color to use for padding if 'pad' mode is selected (hexadecimal). |
| ui_widgetopt | KUL_COMPARE | [object Object] | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| image_list | IMAGE | — |