AddNoise
Add noise to a latent by hand — the manual version of what samplers do silently
- model
- noise
- sigmas
- latent_image
- LATENT
Every diffusion run starts with the same hidden step: the latent is filled with noise at the schedule's starting level, and then the sampler spends its steps cleaning it up. Normally you never see that step - KSampler and SamplerCustom both do it for you. AddNoise is the node that drags it out into the open so you control it.
It's marked experimental in the code, and it shows in how it's pitched: it exists for the custom-workflow builders who want to hand-noise a latent, stash it, combine it with other latents, or inject a specific noise object before a pass - the kind of thing you reach for when a standard workflow can't express what you're trying to do.
How it works
Give it a noise object, a sigmas schedule, and a latent, and it produces a noised latent in one step. The scale is derived from the schedule: scale = |sigmas[0] - sigmas[-1]| (or just sigmas[0] for a single-value schedule) - i.e., how much noise gets added tracks the gap between the top and bottom of your schedule. It then applies the model's own noise_scaling so the latent is at exactly the right level for the sampler to pick it up.
A couple of guardrails are worth knowing: if sigmas is empty, it returns the latent untouched, and it deliberately skips shifting an all-zeros (empty) latent.
The inputs and output
model(MODEL) - used for its noise-scaling math, so it must be the same model that will sample the latent.noise(NOISE) - from RandomNoise or DisableNoise.sigmas(SIGMAS) - any scheduler's output.latent_image(LATENT) - what you're noising.- Output: a single LATENT, ready for whatever pass you're building.
Where it fits
The clean mental model: SamplerCustom = "add noise + denoise" bundled; SamplerCustomAdvanced = noise, guider, sampler, sigmas all separate ports; AddNoise = just the "add noise" step, exposed. If you've ever wanted to pre-noise a latent, run one sampler on the top of the schedule, then hand the half-noised result somewhere else - that's this node's home turf.
Common issues
- Double noising. If you use AddNoise and leave
add_noiseon in your sampler, you're noising twice and your image will come out garbage. This node is for when you're doing the noise yourself - don't also let the sampler do it. - Wrong model. The scaling math is model-specific. Feed it a different model than the one sampling, and the noise level won't match what the sampler expects.
- Misreading the empty-sigmas branch. Feed it an empty schedule and you get your latent back with no error - which is fine if intended, baffling if not.
It's not a daily driver. It's the "lift up the hood" node for people building hybrid, reference, or multi-pass workflows - and once you need it, nothing else in the box does the job quite as directly.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| noise | NOISE | — | |
| sigmas | SIGMAS | — | |
| latent_image | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |