ComfyUI Node

Three-Stage Sampler

Negative conditioning at both ends of a Krea 2 run

By Auryg·Created 2 months ago·Updated about a month ago· 54
Three-Stage Sampler
  • stage1_model
  • stage2_model
  • positive
  • negative
  • latent_image
  • latent
seed0
handoff_percent16.67
stage3_handoff_percent83.33
stage1_steps52
stage1_cfg4.0
stage1_sampler_name
stage1_scheduler
stage2_steps12
stage2_cfg1.0
stage2_sampler_name
stage2_scheduler
final_width0
final_height0
upscale_methodbislerp

The recipe that most Krea 2 users end up on isn't Raw or Turbo alone - it's Raw with a Turbo LoRA, a handoff partway through denoising where a slow CFG-guided model sets the composition and a fast distilled model finishes the details. This node is that two-stage idea, plus a third act: a final pass that reuses all of stage 1's settings. Its reason to exist is giving you negative conditioning at both the start and the end of a generation, which a plain two-stage sampler can't do.

If you've seen the pack, you know the story: handoff_percent runs the first stage into the second, and stage3_handoff_percent runs the second into a third pass that is stage 1 again - same model, steps, CFG, sampler, scheduler. No fourth model input; stage 3 uses stage1_model. So the shape is: CFG-guided Raw up front, a turbo-finished middle, and a light Raw polish at the tail.

How the handoff actually works

It's a sigma-locked sampler, not three sequential KSamplers bolted together. The node builds a sigma schedule for each stage using that stage's sampler and scheduler, then finds the boundary sigma where stage 1's denoising should stop and locates the nearest matching point in stage 2's schedule - so the handoff happens at exactly the right noise level. Unless you're upscaling, the latent just keeps the leftover noise from the previous stage; no fresh noise is injected, which is why the same seed reproduces. If you do set final_width/final_height above the input latent's resolution, it upscales between stages and adds fresh high-res noise - at that point, seed reproducibility goes out the window, which is expected.

The inputs that matter

  • handoff_percent - where stage 1 hands to stage 2. Default 16.67, meaning stage 1 covers the first ~17% of denoising. 0% = stage 2 only, 100% = stage 1 only. This is the knob you'll tune.
  • stage3_handoff_percent - where stage 2 hands to stage 3 (default 83.33). Must be greater than or equal to handoff_percent, or the node raises an error. Set it to 100 and the node silently degrades to the plain two-stage behavior.
  • stage1_steps / stage1_cfg / stage1_sampler_name / stage1_scheduler - the Raw settings, reused by stage 3. Sane starting point: 52 steps, CFG 4, euler.
  • stage2_steps / stage2_cfg - the turbo pass. Defaults are 12 steps at CFG 1.0, which matches the community's Raw + Turbo LoRA config.
  • final_width / final_height - set to 0 to skip the mid-generation upscale, or give the target size to upscale before stage 2.

The single output is a latent, straight into a VAE decode. The rest - stage1_model, stage2_model, positive, negative, latent_image, seed - are plumbing.

Two details worth knowing

First, when stage 2 runs at CFG 1.0 (the turbo default), the node zeroes out the negative conditioning for that stage automatically. That's a feature, not a bug - a distilled model is guidance-baked and doesn't want a negative prompt fighting it. Your real negative conditioning applies in stages 1 and 3, which is precisely the beginning-and-end shape this node is for.

Second, Krea 2 at CFG 1 is picky about the negative slot itself. Even an empty negative prompt is required; the community learned the hard way that a ConditioningZeroOut node produces grainy output on this model. Give the three-stage sampler a real (or empty-but-present) negative and let it do the zeroing itself.

Installing and troubleshooting

It ships in the same pack, so one install covers it. No dependencies, no model downloads - it's plain Python over ComfyUI's sampler internals.

cd ComfyUI/custom_nodes
git clone https://github.com/Auryg/Krea-2-Two-Stage-Sampler

Or ComfyUI Manager → search "Two-Stage Sampler and Krea 2 Resolution Picker" → Install, then restart. It shows up under Ashen3 as "Three-Stage Sampler."

The failure modes are mostly self-explanatory because the author added tooltips and clear errors: an overlapping stage3_handoff_percent raises a ValueError rather than silently doing something weird, and the console prints the boundary sigma and noise mode for each run so you can see what it decided. If a two-stage workflow is all you need, the plain KreaTwoStageSampler from this pack is the simpler sibling - reach for the three-stage version specifically when you want conditioning on the tail, or you're exploring that bookend-prompting trick.

CategoryAshen3

Inputs (19)

NameTypeDefaultDescription
stage1_modelMODEL
stage2_modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
seedINT00–18446744073709550000
handoff_percentFLOAT16.670–100Point in the denoising process where stage 1 hands off to stage 2. 0% uses only stage 2; 100% uses only stage 1.
stage3_handoff_percentFLOAT83.330–100Point in the denoising process where stage 2 hands off to stage 3. Stage 3 reuses all stage 1 settings. This must be greater than or equal to handoff_percent.
stage1_stepsINT522–10000
stage1_cfgFLOAT4.00–100
stage1_sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
stage1_schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
stage2_stepsINT122–10000
stage2_cfgFLOAT1.00–100
stage2_sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
stage2_schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
final_widthINT00–16384
final_heightINT00–16384
upscale_methodCOMBObislerp5 options: nearest-exact, bilinear, area, bicubic, bislerp

Outputs (1)

NameTypeDescription
latentLATENT