Universal Noise Sampler Advanced (Nukun)
Multi-stage denoising with colored noise, without the handoff headaches
- guider
- sampler
- sigmas
- latent_image
- output
- denoised_output
- seed
The base Universal Noise Sampler is great until you need to split a denoise into passes - the classic hires-fix or multi-stage handoff problem. Then you reach for KSampler Advanced semantics: start at step 5, stop at 18, hand the latent to the next pass. Universal Noise Sampler Advanced (Nukun) is the same colored-noise sampler with those step-range controls bolted on, so you can run ranged passes without leaving the 29-profile noise menu behind.
How it works
It takes the exact same inputs as the non-advanced version - guider, sampler, sigmas, latent_image, plus add_noise, noise_seed, noise_device, noise_profile, noise_strength, detail_bias - and adds three KSampler Advanced-style knobs. Reading the source, it slices the incoming SIGMAS directly: start_at_step is inclusive, end_at_step = 10000 means "run to the end", and return_with_leftover_noise = enable keeps the nonzero final sigma when you stop early. That last bit is the whole game - a mid-trajectory handoff only works if the next pass inherits the right amount of remaining noise.
The inputs you'll actually set
The three new ones do all the work:
start_at_step- first sigma step to sample (inclusive).end_at_step- the boundary;10000= continue to the end.return_with_leftover_noise-disableforces full denoise when ending early;enablepreserves leftover noise for a later pass.
For a clean continuity handoff that stays close to a single full pass, the README's recipe is: pass 1 runs 0..N with leftover noise enabled, pass 2 runs N..M with add_noise = false, pass 3 runs M..10000 with add_noise = false and leftover noise disabled. Two traps bite people here. First, don't set the next pass to previous end_at_step + 1 - that skips the shared handoff sigma and changes the trajectory. Second, history-sensitive multistep samplers like deis_2m restart their internal history at each ranged pass, so a split pass isn't bit-identical to a single pass; a small warmup overlap (0..20, 18..30, 28..10000) gets you closer if that matters.
What it's for
Honestly: partial denoise passes, multi-stage workflows, and any experiment that would normally force you to use KSampler (Advanced) and give up on custom noise. Reinjecting noise on a later pass is still useful as a creative texture shift - just don't pretend it's an equivalence test against a single full pass, because it isn't.
Outputs match the family: output (decode this), denoised_output, and seed.
Installing it
Part of Nukun_ComfyUI_Nodes. ComfyUI Manager (search "Nukun"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/OnekoSL/Nukun_ComfyUI_Nodes
Restart ComfyUI. Only numpy, Pillow, scipy, and PyWavelets are required. If your split-pass result drifts from the single-pass reference, that's usually the sampler's step history restarting, not a bug - try the warmup overlap before filing it under "broken."
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| guider | GUIDER | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| latent_image | LATENT | — | |
| add_noise | BOOLEAN | true | Generate noise from the selected Nukun profile. Disable this to sample with zero noise. |
| noise_seed | INT | 00–18446744073709550000 | Seed used for the selected noise profile. |
| noise_device | COMBO | auto | auto uses CPU for ComfyUI-core-like reproducibility. cuda falls back to CPU when unavailable. |
| noise_profile | COMBO | gaussian | Basic noise type or composite Nukun profile. |
| noise_strength | FLOAT | 1.000–5 | Final noise multiplier. For gaussian + auto, 1.0 keeps ComfyUI-core-like behavior. |
| detail_bias | FLOAT | 0.350–1 | Only affects composite profiles. Lower values emphasize larger forms; higher values emphasize details. |
| start_at_step | INT | 00–10000 | First sigma step to sample, matching KSampler Advanced start_at_step semantics. |
| end_at_step | INT | 100000–10000 | Last sigma step boundary. 10000 means continue to the end of the incoming sigmas. |
| return_with_leftover_noise | COMBO | disable | Disable forces full denoise when ending early. Enable preserves leftover noise for a later pass. |
| preview_method | COMBO | default | Per-node latent preview override. default follows ComfyUI; latent2rgb is lightweight; none disables previews. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| output | LATENT | — |
| denoised_output | LATENT | — |
| seed | INT | — |