ApplyStableDelight
Removing specular reflections from photos in ComfyUI
- model
- images
- image
StableDelight is the model that strips specular reflections out of photos - the glare across a glossy product shot, the window reflection wrecking an otherwise good picture, the hot spot on a car hood that hides the paint underneath. ApplyStableDelight is where that actually happens in ComfyUI: you feed it an image and it hands back a cleaned-up one. It's the second half of the two-node lldacing/ComfyUI_StableDelight_ll pack, which wraps the Stable-X/StableDelight research release (announced September 2024 as real-time reflection removal). You need LoadStableDelightModel wired in first to feed it the model.
How it works
Mechanically this is a ControlNet model doing one diffusion-style pass, not a long generation. The image you feed in gets encoded into latent space with the VAE, then a single ControlNet+UNet step runs at timestep zero - the "YOSO" in the model name stands for you only sample once. The input photo is the ControlNet condition, so the model uses it as structure while trying to redraw it without the specular highlights, then decodes the result back to pixels and normalizes it into the usual 0-to-1 image range.
That one-step design is why it's near-real-time, and also why it has limits. The pack's author is admirably honest about it in the README: objects change quite a bit, and semi-transparent things - lightbulbs, glass - are the worst offenders. There's no multi-step denoising loop holding the original structure together. Think of it as "remove the glare, possibly pay a little in fidelity," not as a lossless fix.
The inputs that matter
Most of the four inputs are preprocessor knobs, and two of them are the ones you'll actually touch:
- images (
IMAGE) - your photo. Batchable; it processes each frame in the batch. - strength (default
1.0, range 0.01–5) - this maps directly to the ControlNet conditioning scale. Turn it up if the glare is stubborn; turn it down toward 0.3–0.5 if the model is changing the object more than you like. - resolution (default
1024, range 0–4096) - the preprocess resolution: the longer side of your image gets resized to this before the model runs. The author's tooltip says it plainly: set it to0to use the image's original size. It's your main speed/VRAM lever - drop to 768 or 512 on a small card, crank up if the output looks soft. - upscale_method (default
bilinear) - how the image is resampled down to that resolution and back up after. The alternatives (nearest-exact,area,bicubic,lanczos) are there for the usual resampling trade-offs; bilinear is a fine default.
The output is a single image (IMAGE) - wire it straight into PreviewImage or SaveImage, or on into an upscaler if you want the final result bigger than the processing resolution.
Getting it running
Install the pack (ComfyUI Manager, search "StableDelight", or git clone https://github.com/lldacing/ComfyUI_StableDelight_ll.git into custom_nodes), restart, then add LoadStableDelightModel and ApplyStableDelight. The model is a diffusers folder, not a checkpoint, so it lives in models/diffusers:
cd ComfyUI/models/diffusers
huggingface-cli download Stable-X/yoso-delight-v0-4-base --local-dir Stable-X--yoso-delight-v0-4-base
No pip installs beyond what ComfyUI bundles - the loader builds the whole pipeline from the diffusers and transformers ComfyUI already ships.
Common issues
- "local_files_only" / empty model dropdown errors. You skipped the download above. The loader deliberately refuses to fetch the model for you, so nothing runs until those files are in
models/diffusers/Stable-X--yoso-delight-v0-4-base. - Semi-transparent objects come out mangled. That's the model, not you. The README calls it out, so don't sink an afternoon into tweaking strength trying to fix it.
- Nothing changes. Strength is too low, or the glare is subtle enough that the single pass ignored it. Bump strength and re-run.
- OOM at high resolution. Drop
resolutionto 768/512 or set it to0for the native size, and let xformers do its thing.
It's a niche tool with a real limit, but for product shots and photographed reflections there's genuinely nothing else that does this in one node.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | DelightMODEL | — | |
| images | IMAGE | — | |
| strength | FLOAT | 1.00.01–5 | — |
| resolution | INT | 10240–4096 | Preprocess the resolution of the image, if eq 0, using image original size |
| upscale_method | COMBO | bilinear | 5 options: nearest-exact, bilinear, area, bicubic, lanczos |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |