Two-Stage Sampler
Run Krea 2 Raw, finish with Turbo, no seam in between
- stage1_model
- stage2_model
- positive
- negative
- latent_image
- latent
One sampler, two models, no restart
If you've spent any time with Krea 2 you've heard the recipe: let the undistilled Raw base do the early denoising for better variation, then finish with a Turbo-distilled pass for speed - the community favorite being Raw plus the Turbo LoRA at ~0.6 weight, around 12 steps, CFG 1. The Two-Stage Sampler turns that recipe into a single node with a handoff that's "sigma-locked": both stages agree exactly on how much noise is left, so there's no seam where the swap is visible.
It's a drop-in KSampler replacement. Instead of one model and one set of steps you give it two of everything - a stage1_model, a stage2_model, and separate steps, CFG, sampler and scheduler for each. Wiring is identical to a normal sampler: two MODEL inputs, positive/negative conditioning, a latent from EmptyLatentImage, a seed, and a single latent output that goes straight into VAE Decode.
How the handoff actually works
This is the part worth understanding, because it's the difference between this node and lazily stacking two KSamplers (which double-applies noise and looks like a jump cut). Each stage builds its own sigma schedule from its own model, steps, sampler and scheduler. handoff_percent picks the boundary in stage 1's schedule - say 25% means stage 1 does the first quarter of denoising - then the node finds the matching sigma in stage 2's schedule and overwrites stage 2's first sigma with it. Stage 2 literally continues from the exact noise level stage 1 reached.
Two details make it behave. If you're not upscaling, the original seed noise carries through to stage 2 untouched, so seed-to-seed behavior stays consistent. And if you set a different final_width/final_height, stage 1's latent gets upscaled first and stage 2 runs on fresh high-resolution noise - your low-res composition, high-res finish. One nice touch buried in the source: when stage2_cfg is 1.0, the node zeroes out your negative conditioning automatically, the same trick as ConditioningZeroOut but without the grainy-output trap that node is famous for.
The inputs that actually matter
handoff_percent- the main knob (default 16.67). 0% means stage 2 does everything, 100% means stage 1 does. The author is upfront that there's no right answer; start at the default and move it like you'd tune a denoise value.stage1_steps/stage1_cfg- defaults 52 and 4.0, which is basically Raw's official 52-steps-at-CFG-3.5 home turf.stage2_steps/stage2_cfg- defaults 12 and 1.0, matching the raw-plus-Turbo-LoRA config the community converged on.final_width/final_height- leave both at 0 to keep stage 1's resolution, or set them (feeding the pack's Dual Resolution Selector) for a two-resolution pass.- The sampler/scheduler pairs - default to
euler+simplefrom the bundled example, then experiment once it works.
Installing it
ComfyUI Manager → search "Two-Stage Sampler and Krea 2 Resolution Picker", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Auryg/Krea-2-Two-Stage-Sampler
# restart ComfyUI
No Python dependencies (pyproject lists dependencies = []), so the node itself is a two-second install. The real download cost is what you feed it: Krea 2 Raw, Krea 2 Turbo (or the Turbo LoRA from Comfy-Org/Krea-2), plus the Qwen3-VL text encoder (~8GB) and the Qwen-Image VAE (~250MB) that every Krea 2 workflow needs. Raw in BF16 is ~25GB; grab the community FP8 conversion to fit a 16–24GB card.
Where people trip up
- Stage 2 at CFG 1.0 isn't a suggestion. Distilled models want guidance off; cranking
stage2_cfgup is how you get that over-cooked, contrasty look. - The handoff only works inside one latent space. Raw and Turbo share a VAE, so swapping between them is seamless. Feed an SDXL model in and a Flux model out and the node will happily produce nonsense - it doesn't check.
- Not seeing a handoff at all? Double-check
handoff_percent- the 0% and 100% ends are "single stage" shortcuts, not dial positions. - If
stage2_cfgis exactly 1.0, your negative input is ignored by design (zeroed out internally). Don't panic that your negative prompt "isn't working."
It's a niche tool - the pack barely shows up in community threads, so you're ahead of the curve by using it. But if you're chasing that raw-to-turbo Krea 2 sweet spot, this is the one to reach for.
Inputs (18)
| 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. |
| 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 | — |