DonutSampler (Advanced) (DEPRECATED)
The CFG-curve sampler, pinned to full control
- model
- positive
- negative
- latent_image
- nag_negative
- latent
- cfg_progression_info
DonutSampler (Advanced) is the older, heavier version of the pack's CFG-curve sampler, and it's DEPRECATED - but the deprecation is the useful kind. The current DonutSampler absorbed it as the mode = advanced setting, and this node is now a thin alias that pins the shared engine to that mode and keeps the original input signature (same widget names, same order) so saved workflows deserialize without breaking. If you've got an old graph, it just works. If you're building new, you're missing nothing by using DonutSampler with advanced mode - you're actually gaining the simple and multi_model modes on the same node.
The advanced mode exists for one reason: control over the sampling window. Where the simple mode just runs start-to-finish, advanced lets you say which slice of denoising this sampler handles, with start_at_step and end_at_step, explicit add_noise, and return_with_leftover_noise - the machinery you need for staged sampling (a fast structural pass, then a detail pass over the tail).
How it works
All the advanced samplers route through the shared _DonutSamplerEngine: per-step CFG values computed from cfg_start → cfg_halfway (at halfway_step) → cfg_end along the selected cfg_curve, injected into the sampling loop via a DynamicCFGGuider. The cfg_curve choices run linear, exponential, sine, cosine, smooth_step, circular and friends - the default is linear. Outputs are latent and cfg_progression_info, the ASCII chart of CFG-per-step that's the pack's built-in diagnostic.
The inputs that matter
Beyond the standard model / positive / negative / latent_image / steps / sampler_name / scheduler, the advanced knobs are:
- add_noise (enable/disable) - turn off the initial noise if you're continuing a latent from a previous stage.
- noise_seed - the seed for that initial noise.
- start_at_step / end_at_step - slice the run.
- return_with_leftover_noise (disable/enable) - whether the output latent keeps residual noise for a following sampler (img2img-style chaining).
- cfg_start / cfg_halfway / halfway_step / cfg_end / cfg_curve - the guidance curve.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/DonutsDelivery/ComfyUI-DonutNodes.git donutnodes
cd donutnodes
python -m pip install -r requirements.txt
or ComfyUI Manager → "DonutNodes," restart.
The honest take
If you're mid-migration and saw "(Advanced)" in your workflow and panicked: don't. This node isn't going anywhere and its alias guarantees old graphs keep loading. The only real question is whether you need the window controls at all - if you're just replacing a KSampler to get the CFG curve, the simple mode is all you want, and this is the version that adds footguns (a wrong end_at_step leaves you with an undenoised latent that VAE-decodes to gray soup). Use advanced when you're explicitly staging passes; use DonutSampler in simple mode otherwise. And the KB's sampler pair rule applies regardless: match your scheduler to your architecture, and on distilled/Turbo models keep the conservative schedules.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| add_noise | COMBO | 2 options: enable, disable | |
| noise_seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg_start | FLOAT | 8.00–100 | — |
| cfg_halfway | FLOAT | 4.00–100 | — |
| cfg_end | FLOAT | 1.00–100 | — |
| halfway_step | INT | 101–10000 | — |
| 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 | — |
| return_with_leftover_noise | COMBO | 2 options: disable, enable | |
| cfg_curve | COMBO | linear | 20 options: linear, exponential, logarithmic, ease_in, ease_out, ease_in_out, +14 |
| nag_enabledopt | BOOLEAN | false | Apply Krea2 NAG inside sampling (requires krea2-nag). Uses CFG 1; Turbo negative conditioning stays zeroed. |
| nag_negativeopt | CONDITIONING | Unzeroed negative prompt for NAG. Defaults to edit_negative_prompt in edit mode, otherwise negative. | |
| nag_phiopt | FLOAT | 4.00–20 | — |
| nag_tauopt | FLOAT | 2.500.01–20 | — |
| nag_alphaopt | FLOAT | 0.250–1 | — |
| nag_sigma_startopt | FLOAT | 1000.00–1000 | — |
| nag_sigma_endopt | FLOAT | 0.00–1000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| cfg_progression_info | STRING | — |