KSampler Advanced (Dual Output)
Both denoise states from one sampler pass
- model
- positive
- negative
- latent_image
- latent
- latent_denoised
Stock ComfyUI's KSamplerAdvanced has a return_with_leftover_noise widget: enable it and you get the still-noisy latent partway through denoising, disable it and you get the fully clean result - but you have to pick one per node. If you actually want both states - say, to compare them, or to feed the leftover-noise latent into a second sampling stage while also keeping the fully-denoised version as a reference - the normal move is running two separate KSamplerAdvanced nodes with identical settings except that one toggle. KSampler Advanced (Dual Output) collapses that into a single node: same sampler, both outputs, no duplicate configuration to keep in sync.
How it works
It's the standard advanced-sampler machinery - steps, CFG, sampler, scheduler, a start/end step window for partial denoising - but instead of the return_with_leftover_noise toggle deciding which single result you get, the node computes both states and exposes them as two separate outputs. Per the node's own description, one output is "the leftover-noise latent" and the other is "the fully denoised latent" - you get both from one node, one configuration, one place to change your settings instead of two.
The classic use for exactly this leftover-noise pattern is a two-stage sampler chain - SDXL's base+refiner setup is the textbook example, where the base model runs most of the steps and hands off a still-noisy latent to a refiner for the last stretch. Worth being honest about that pattern's reputation, though: SDXL's dual-model base+refiner pipeline is one "most users ended up skipping because the quality gain wasn't worth the complexity." This node doesn't force you into that workflow - having both outputs available is just as useful for A/B comparing a partial versus a full denoise, or for chaining sampler stages in a video pipeline, which is squarely where this WAN/VACE-heavy pack's other tools point.
The inputs and outputs that matter
The bulk of the required inputs are the same as stock KSamplerAdvanced: model (MODEL), add_noise (enable/disable), noise_seed, steps (default 20), cfg (default 8), sampler_name (44 choices - euler, dpm variants, and more), scheduler (9 choices - karras, sgm_uniform, beta, etc.), positive/negative (CONDITIONING), latent_image (LATENT), and start_at_step/end_at_step for partial denoise windows.
Worth flagging on a model-specific note: the default cfg of 8 is a leftover from the SD1.5/SDXL era. If you're running this against a flow-matching video model like Wan - which this pack is clearly oriented around - that default is too high. Community-settled practice there is CFG 1.0 when you're stacking a speed LoRA (CausVid, LightX2V) and CFG 3.5 or higher only if you're running full-quality without one. Leaving CFG at 8 on Wan will just over-cook the output.
Two outputs, each carrying its own tooltip from the author: latent - "Latent that may include leftover noise (force_full_denoise=False)" - and latent_denoised - "Fully denoised latent (force_full_denoise=True)." Wire latent into a second sampling stage if you're chaining; wire latent_denoised straight to your VAE decode if you just want the finished result.
How to install it
ComfyUI Manager: search "Link Comfy Nodes," install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Mister-Link/link-comfy-nodes
pip install -r link-comfy-nodes/requirements.txt
Restart ComfyUI afterward.
Common issues & troubleshooting
Running it and only using one output. If you only ever need latent_denoised, this node is doing slightly more work than the plain stock sampler for no benefit - reach for it specifically when you actually need both states, not as a default replacement for KSamplerAdvanced.
CFG left at the SD-era default on a flow-matching model. As above - if output looks burnt, oversaturated, or over-sharpened on a Wan or similar model, check cfg before anything else; 8 is very likely too high.
start_at_step/end_at_step misconfigured for a chained setup. If you're feeding the leftover-noise latent into a second sampling pass, that second pass needs add_noise set to disable and its own start_at_step picking up where this one's end_at_step left off - mismatched step ranges between the two stages is the most common reason a chained two-stage sampler produces double-denoised or under-denoised results.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| add_noise | COMBO | 2 options: enable, disable | |
| noise_seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| start_at_step | INT | 00–10000 | — |
| end_at_step | INT | 100000–10000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | Latent that may include leftover noise (force_full_denoise=False). |
| latent_denoised | LATENT | Fully denoised latent (force_full_denoise=True). |