Actual Denoise Inverse
Keep your familiar denoise numbers, let this translate them
- model
- scheduler
- actual_denoise
- model
The sibling node in this pack, Actual Denoise, makes you think in actual_denoise - a scheduler-independent number for "how much noise is actually added." It's a better number, but your muscle memory isn't calibrated to it. You've spent months knowing that 0.3 is a light touch and 0.55 is the sweet spot on your usual scheduler. Actual Denoise Inverse is the translator: feed it the denoise value you already trust and the scheduler you've always used, and it returns what that actually corresponds to in real noise.
How the chain works
This is the pack's headline workflow, and it's cleverer than it looks. You keep typing your familiar numbers forever, and only the second node's scheduler ever changes:
Actual Denoise Inverse- set the scheduler you've already tuned on (the "reference" curve) and your usualdenoise.Actual Denoise- set the scheduler you actually want to use right now.- Wire the resulting
denoiseinto KSampler as normal.
The Inverse node computes step_fraction = 1 − denoise on the reference scheduler's 1000-point sigma curve, reads the sigma at that fraction, and returns sigma_at_fraction / max_sigma as actual_denoise. Then the second node maps that same actual noise back to a denoise for the new scheduler. You get the exact look you tuned, no matter which scheduler the second node is on. Switch from simple to kl_optimal and the noise lands where you expect instead of coming up short.
The inputs and outputs that matter
model- your checkpoint; defines the sigma curve being read.scheduler- the reference scheduler, i.e. the one yourdenoisehabits were built on. This choice is the definition of your translation, so pick the one you actually tuned with.denoise- 0 to 1, step 0.01. Same value you'd feed KSampler directly.
Outputs: scheduler (pass-through), actual_denoise (FLOAT - this is what feeds the Actual Denoise node), and model (pass-through).
Installing it
Same pack, same zero-dependency story: no model downloads, no Python packages. ComfyUI Manager → search "Actual Denoise" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/mozhaa/ComfyUI-Actual-Denoise
Restart ComfyUI and it appears under sampling/custom_sampling/schedulers.
Gotchas
The one thing to get right: the scheduler you set on the Inverse node is the reference, not the one you're running. If you flip it around you're translating against the wrong curve and the whole point evaporates. Also expect a hair of rounding - the mapping goes through a 1000-step discretization, so a round trip of 0.5 → 0.499 is normal and invisible in output. And if you're already on KSampler (Advanced) thinking in step ranges, use Actual Denoise Inverse (step) instead - this node speaks denoise, that one speaks steps. For everyone else, this is the node that makes the pack's fix feel like no change at all, which is exactly what you want from a translator.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 1.000–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | — |
| actual_denoise | FLOAT | — |
| model | MODEL | — |