Denoise Selector
The 0-to-1 dial, on a wire instead of in a box
- denoise
Denoise is the most-swept setting nobody plans a sweep for. You get a good image, you send it back through a KSampler to tidy it up, and then you spend twenty minutes nudging one box between 0.35 and 0.55 trying to find the point where it sharpens the detail without replacing the face. Twenty minutes, twenty runs, one number. That's the case for pulling denoise out of the widget.
This node is the DemonAlone pack's version of that move, and it's about as small as a node can be.
The mechanism, all of it
def run(self, denoise):
return (denoise,)
A FLOAT in, the same FLOAT out. There is no sampling here, no math, no hidden state, no clamping beyond the widget range. Denoise Selector doesn't denoise anything - it's a value source. Its job is to be the one place in the graph where the number lives, so that when you want to try a different number you edit one node instead of hunting for four nodes that each have their own denoise field.
To use it, right-click the denoise field on your KSampler and choose Convert widget to input. The field becomes a socket; wire this node in. Same trick works on any node with a denoise field - upscale nodes and hires-fix-style second passes included.
Inputs and outputs
There's exactly one of each. Input denoise: FLOAT, default 1.0, range 0 to 1, step 0.01. Output denoise: FLOAT, same name, ready for any converted denoise socket. That 0.01 step is the right granularity - the useful decision here is usually "0.42 or 0.45", not "0.4 or 0.5".
What the number means
Denoising strength is how much of the input image the sampler is allowed to throw away before rebuilding it. The conventional bands:
- 0.0-0.2 - barely touches it. Good for clean-up on an already-good image, and useless for changing anything you can see.
- 0.3-0.5 - the detail-enhancement sweet spot. Composition survives, texture and micro-detail get regenerated.
- 0.5-0.7 - the model starts reinterpreting. Works when you want a restyle, surprises you when you didn't.
- 0.7-1.0 - near-total regeneration with vague structural hints. On an upscale that's "make me a new image at this size."
The trap that catches everyone once: denoise below about 0.9 on an empty latent does nothing you want. You're asking the sampler to stop before it has finished removing noise, so you get grey mush. Denoise is a knob for image-to-image, for upscales, for inpainting at a controlled strength - not for text-to-image. If your txt2img output looks like fog, check which node the denoise wire ended up on.
The other thing worth knowing: the "right" denoise is not portable. Inpainting recipes in this ecosystem routinely land under 0.55 because past that the model stops honouring the masked region's context, and upscale passes usually want less than people guess. There's no universal value, which is precisely why making it a variable pays off.
Install
No model downloads, no heavy dependencies - the pack's only pip requirement is piexif, and that's for its EXIF-reading image nodes, not this one.
ComfyUI Manager: search DemonAlone-nodes-ComfyUI, install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/DemonAlone/DemonAlone-nodes-ComfyUI
cd DemonAlone-nodes-ComfyUI
pip install -r requirements.txt
Restart ComfyUI and look for Denoise Selector under utils.
Things that go wrong
The pack installs "successfully" and no nodes appear. Almost always the missing piexif. The pack imports it at module level in image_utilites.py, so an uninstalled requirement takes the entire package down, not just the image nodes, and the traceback names a library that has nothing to do with denoise. Run the pip line above and restart.
The denoise slider disappeared from your KSampler. That's convert-widget-to-input working as designed - the widget is now a socket and takes its value from upstream. If nothing is connected, ComfyUI complains at queue time rather than silently using 1.0, which is the good failure mode.
A denoise sweep looks like noise instead of a trend. Normalise the rest of the graph first: fixed seed, converging sampler (Euler or DPM++ 2M, not anything _ancestral), same steps throughout. Ancestral samplers re-randomise at every step, so a denoise ladder run on one of them conflates two variables and reads as scramble. Do that and the ladder becomes the cleanest diagnostic in ComfyUI - it tells you where your upscale stops being an upscale and starts being a repaint.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| denoise | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| denoise | FLOAT | — |