Three-Stage Sampler
Negative conditioning at both ends of a Krea 2 run
- stage1_model
- stage2_model
- positive
- negative
- latent_image
- latent
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 tohandoff_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.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| stage1_model | MODEL | — | |
| stage2_model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| handoff_percent | FLOAT | 16.670–100 | Point in the denoising process where stage 1 hands off to stage 2. 0% uses only stage 2; 100% uses only stage 1. |
| stage3_handoff_percent | FLOAT | 83.330–100 | Point 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_steps | INT | 522–10000 | — |
| stage1_cfg | FLOAT | 4.00–100 | — |
| stage1_sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| stage1_scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| stage2_steps | INT | 122–10000 | — |
| stage2_cfg | FLOAT | 1.00–100 | — |
| stage2_sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| stage2_scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| final_width | INT | 00–16384 | — |
| final_height | INT | 00–16384 | — |
| upscale_method | COMBO | bislerp | 5 options: nearest-exact, bilinear, area, bicubic, bislerp |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |