ComfyUI Node

Two-Stage Sampler

Run Krea 2 Raw, finish with Turbo, no seam in between

By Auryg·Created 2 months ago·Updated about a month ago· 51
Two-Stage Sampler
  • stage1_model
  • stage2_model
  • positive
  • negative
  • latent_image
  • latent
seed0
handoff_percent16.67
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

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 + simple from 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_cfg up 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_cfg is 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.

CategoryAshen3

Inputs (18)

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