Nodes/ComfyUI-DonutNodes/DonutSampler (Advanced) (DEPRECATED)
ComfyUI Node

DonutSampler (Advanced) (DEPRECATED)

The CFG-curve sampler, pinned to full control

By DonutsDelivery·Created about a year ago·Updated about 16 hours ago· 25
DonutSampler (Advanced) (DEPRECATED)
  • model
  • positive
  • negative
  • latent_image
  • nag_negative
  • latent
  • cfg_progression_info
add_noise
noise_seed0
steps20
cfg_start8.0
cfg_halfway4.0
cfg_end1.0
halfway_step10
sampler_name
scheduler
start_at_step0
end_at_step10000
return_with_leftover_noise
cfg_curvelinear
nag_enabledfalse
nag_phi4.0
nag_tau2.50
nag_alpha0.25
nag_sigma_start1000.0
nag_sigma_end0.0

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_startcfg_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.

Categorydonut/sampling

Inputs (24)

NameTypeDefaultDescription
modelMODEL
add_noiseCOMBO2 options: enable, disable
noise_seedINT00–18446744073709550000
stepsINT201–10000
cfg_startFLOAT8.00–100
cfg_halfwayFLOAT4.00–100
cfg_endFLOAT1.00–100
halfway_stepINT101–10000
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
start_at_stepINT00–10000
end_at_stepINT100000–10000
return_with_leftover_noiseCOMBO2 options: disable, enable
cfg_curveCOMBOlinear20 options: linear, exponential, logarithmic, ease_in, ease_out, ease_in_out, +14
nag_enabledoptBOOLEANfalseApply Krea2 NAG inside sampling (requires krea2-nag). Uses CFG 1; Turbo negative conditioning stays zeroed.
nag_negativeoptCONDITIONINGUnzeroed negative prompt for NAG. Defaults to edit_negative_prompt in edit mode, otherwise negative.
nag_phioptFLOAT4.00–20
nag_tauoptFLOAT2.500.01–20
nag_alphaoptFLOAT0.250–1
nag_sigma_startoptFLOAT1000.00–1000
nag_sigma_endoptFLOAT0.00–1000

Outputs (2)

NameTypeDescription
latentLATENT
cfg_progression_infoSTRING