Krea2 Adaptive Progressive Sampler
Denoise at half size, land at full size
- sampler
Krea 2 Turbo gives you a decent 1024x1024 image in ten Euler steps, which is already fast. The annoying part is that all ten of those steps pay for a full 64x64 token grid. Early steps are the expensive, structure-defining ones - you're spending full-resolution compute on a picture whose global layout hasn't been decided yet.
This node is a SAMPLER, not a MODEL patch, and what it does is run the first handful of calls on a half-size latent, then promote back to full resolution and finish there. The obvious objection is "won't that duplicate the anatomy?" - and the answer, per the author's own write-up, was yes for an earlier prototype, which is the most interesting thing in this whole repo.
How it works
Your seeded noise gets decomposed with an orthonormal 2D Haar transform into a low-frequency parent plus detail coefficients. The parent is denoised at half the spatial size; on promotion the full-resolution tensor is rebuilt from the same seeded noise hierarchy and the current clean prediction using the rectified-flow marginal, x_sigma = sigma * noise + (1 - sigma) * clean. No fresh random padding gets injected at the transition, so the run stays reproducible from your seed.
The prototype that broke dropped the coarse tokens onto the final canvas as a sparse grid. Krea 2's RoPE doesn't like that: a wide, unusual coordinate field reads like an unsupported oversized generation, and the model answers with extra heads, extra legs, repeated subjects. This version doesn't scale or spread position coordinates at all - every resolution uses Krea 2's native contiguous grid. Also worth knowing: the cheap-looking answer of "start small, the later full-res steps will fix the topology" isn't how it works. The first calls decide subject count and pose; later full-res calls mostly refine.
The inputs that matter
Two of them, in order of importance.
full_resolution_steps(default7) - how much of the schedule is reserved for full-res work. With a 10-step run, at most the first three calls go at half size. This is the quality-first default;4is the aggressive preset and the README flatly warns that composition drift and duplicated anatomy get more likely.initial_scale-0.5for one promotion,0.25for two. Quarter res is explicitly experimental. Latent dimensions must be divisible by 2 for0.5, by 4 for0.25.
Then the scheduling knobs: mode (adaptive will promote early once predictions stabilize, while still preserving the reserved tail), stability_threshold (0.08; larger promotes sooner), minimum_steps_per_level (2), and transition_sigmas - a string, manual mode only. The author's tooltip is the whole spec: "Use one descending sigma per 2x promotion." So 0.5 needs one value, 0.25 needs two. stability_threshold is ignored in manual mode. The single output is sampler (SAMPLER), which goes into the sampler input of SamplerCustomAdvanced, alongside a BasicGuider and a BasicScheduler set to simple. Euler + simple/Flux, deliberately, and nothing else.
Install
Same as every node in this pack, and it's pleasantly boring:
cd ComfyUI/custom_nodes
git clone https://github.com/iljung1106/Krea2-Training-Free-Improvements
# restart ComfyUI
There is no requirements.txt, no pip step, no extra model download - the pyproject.toml declares dependencies = []. It's also published to the Comfy Registry (publisher iljung1106), so ComfyUI Manager search for "Krea2 Training Free Improvements" should find it. There are two importable example workflows in the repo if you'd rather reverse-engineer a working graph: Krea2 Adaptive Progressive Sampler - Raw FP8 Turbo.json.
Where people get burned
It only accepts Krea 2 CONST/rectified-flow models - anything else raises before sampling starts, and inpainting masks are rejected outright, as are Krea2Edit reference latents. If you see "Sampling ended before full resolution", you didn't leave enough room in the tail: raise full_resolution_steps or move the manual sigmas earlier.
Two honesty notes. Progressive output is not pixel-identical to a full-res baseline, because the early evals genuinely saw a different token grid - compare against the same seed before deciding you like it. And when you benchmark, do one warm-up run first. On a 3060 Ti 8 GB the README measured a full four-node workflow at 105.7 s without acceleration and 67.5 s with TaylorSeer; model loading, offloading and VAE decode otherwise swallow the difference and make a cold baseline look like a win. Finally, a promotion invalidates the TaylorSeer cache, which is correct behaviour and also why the two acceleration nodes don't simply multiply.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| initial_scale | COMBO | 0.5 | 2 options: 0.5, 0.25 |
| mode | COMBO | adaptive | 2 options: adaptive, manual |
| transition_sigmas | STRING | 0.60 | Manual mode only. Use one descending sigma per 2x promotion. |
| stability_threshold | FLOAT | 0.0800–1 | — |
| minimum_steps_per_level | INT | 21–100 | — |
| full_resolution_steps | INT | 71–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |