TT KSampler (Two Stages)
Draft with one sampler, refine with another, in a single node
- model
- positive
- negative
- latent
- LATENT
Back in the SDXL era, the "base model then refiner model" two-pass workflow was the thing. The pattern survived even after the refiner models faded: draw the picture coarsely with a fast sampler, then let a second sampler finish it off. TT KSampler (Two Stages) packages that exact idea into one node - two sampling passes with different samplers, schedulers, and step budgets, back to back, ending in a single LATENT.
It's from TenserTensor, the pack that exists to fold common node chains into single blocks. This is its sampler family's "automated draft + refine" entry.
How the two stages split
Everything you'd expect from a sampler is there - model, positive, negative, latent, seed, cfg - and then it forks:
- Draft pass:
draft_steps(default 25),draft_sampler_name,draft_scheduler. This is the fast, cheap pass that establishes composition.draft_denoise(default 0.7) sets how much of the latent's structure it keeps. - Refiner pass:
refiner_steps(default 25),refiner_sampler_name,refiner_scheduler,refiner_denoise(default 1.0). This continues from where the draft left off.
Looking at the source, it's implemented as a continuous schedule: the draft runs steps 0 through draft_steps, then the refiner takes over from draft_steps to draft_steps + refiner_steps with its own sampler and scheduler. So it's not two independent generations - it's one denoising trajectory with a mid-course sampler swap. That's the honest description, and it's also why the two-pass trick works: you get cheap structure first, then a high-quality sampler polishes the details without re-rolling.
The classic setup
Fast draft, careful refine. Something like:
- Draft:
euler_ancestralordpmpp_2mon a simple scheduler, 20 steps. - Refine:
dpmpp_2m/dpmpp_2m_sdewithkarras, 20–25 steps.
Total steps = draft_steps + refiner_steps. If you set both to 25, you're running 50 steps of sampling, so budget accordingly - this node makes it easy to accidentally double your render time. The default draft_denoise of 0.7 versus refiner_denoise of 1.0 is a reasonable starting split: the draft doesn't fully commit, the refiner does.
Caveats and install
Honest take: on modern flow-matching models this old-school draft/refine pattern buys you less than it did on SDXL, and the community mostly moved to a single good sampler or a separate hires pass. It's still handy when you genuinely want two sampling strategies in one shot, or when you're replicating an old SDXL refiner-style workflow without the refiner model.
cd ComfyUI/custom_nodes
git clone https://github.com/tenser-tensor/ComfyUI-TenserTensor
or ComfyUI Manager → "TenserTensor" → install → restart. Deps: gguf, kornia.
One more standing note: it's a legacy V1 node. The pack migrated to ComfyUI's API V3 and parked V1 samplers in Deprecated/, removal planned for a future major release. It works today; just don't expect it to outlive the pack's V3 line. And when in doubt, remember the cfg default here is 1.5 - that's already tuned for modern guidance-distilled models, so resist the urge to crank it.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| cfg | FLOAT | 1.50–100 | — |
| draft_steps | INT | 251–10000 | — |
| refiner_steps | INT | 251–10000 | — |
| draft_sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| draft_scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| refiner_sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| refiner_scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| draft_denoise | FLOAT | 0.700–1 | — |
| refiner_denoise | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |