Nodes/ComfyUI-Actual-Denoise/Actual Denoise Inverse
ComfyUI Node

Actual Denoise Inverse

Keep your familiar denoise numbers, let this translate them

By mozhaa·Created 7 months ago·Updated 6 months ago· 20
Actual Denoise Inverse
  • model
  • scheduler
  • actual_denoise
  • model
scheduler
denoise1.00

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:

  1. Actual Denoise Inverse - set the scheduler you've already tuned on (the "reference" curve) and your usual denoise.
  2. Actual Denoise - set the scheduler you actually want to use right now.
  3. Wire the resulting denoise into 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 your denoise habits 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.

Categorysampling/custom_sampling/schedulers

Inputs (3)

NameTypeDefaultDescription
modelMODEL
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1

Outputs (3)

NameTypeDescription
schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal
actual_denoiseFLOAT
modelMODEL