⚗ Alchemica · Two stages
Compose at half resolution, refine at full — and why you want 0.5, not 0.45
- opts
- ALCHEMICA_OPTS
Above roughly 1.5 megapixels, sampling Krea 2 in a single pass at your final size is a waste of most of the budget: more than half the trajectory is spent placing things, and the model doesn't need full resolution to decide where the subject goes. A two-stage run does the composition cheap, then refines at full size. Eleven widgets set it up, and about four of them are worth understanding.
The geometry
two_stage - the switch. On in the all-in-one samplers by default; here it's a boolean you own.
stage1_scale - the first stage's side length relative to the final one. 0.5 means the first stage runs at a quarter of the pixels. Default 0.5, range 0.25 to 1.
stage1_steps - composition steps taken above the hand-off, default 5.
handoff_sigma - where the second stage takes over. Default 0.65, but the value you want is −1 = from the calibration profile, because that's where composition is 98.5% locked on a measured checkpoint (~0.87). This is the single most consequential field on the node: too early and the second stage is still deciding composition from a half-resolution image; too late and you've wasted the cheap stage on work that didn't matter.
stage2_steps - refinement steps at full resolution, default 6.
stage2_scheduler - same keeps the first stage's schedule, or pick a different one from the same list the Schedule node offers (alchemica_duale, alchemica_tarato, flux_shift, linear_flow, comfy:*). Using a detail-heavy schedule for stage 2 and nothing else is a legitimate experiment.
upscale_method - how the latent is enlarged between stages: bislerp (default), bicubic, bilinear, nearest-exact, area.
stage2_seed_offset - the second stage's noise uses seed + offset, default 1. So stage 2 is not a continuation of the same noise field; it's a re-noised refinement. Setting it to 0 makes both stages share the seed.
The one gotcha worth memorising
stage1_scale at exactly 0.5 means the second stage is an exact 2× upscale - every output latent cell derives from a clean 2×2 block of the smaller one. Try 0.45 and you're interpolating, and the pack's notes measured the consequence on noise specifically: averaging with overlapping windows correlates neighbouring noise values by about 33%, and Krea 2 renders that correlation as coloured blobs. Exact 2×2 blocks keep it white. So: 0.5, or accept that you're rolling dice on colour noise.
That's not a theoretical warning. Coloured blotches on Krea 2 output have been a recurring community complaint since release, most often blamed on samplers and schedulers; some of it is the FP8 quantisation of the checkpoints people are using, but non-integer upscales are the other half of the story.
Wiring
Alchemica · Two stages ─opts→ AlchemicaSampler · opts
The optional opts input chains it with the other option nodes; it overrides only the stage geometry. It requires the sampler to be told the final resolution - the first stage works at a fraction of whatever latent you hand it, so don't shrink the ⚗ Resolution input yourself.
Two things switch two-stage mode off, and both are deliberate:
denoisebelow 1 (img2img). If the image is already half-composed, there's no composition stage to save money on.- A
SAMPLER-based workflow. A sampler object can't resize a latent between stages, so two-stage only works in the standalone sampler nodes.
Installing
Part of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
Restart the server. ComfyUI 0.36.0+, zero dependencies, and the Krea 2 model plus Qwen3-VL encoder and Qwen-Image VAE where ⚗ Load Krea 2 can see them.
Traps
Turning stage2_steps up to fix a bad hand-off. If the composition is wrong, no number of refinement steps repairs it. Fix handoff_sigma first.
Half-resolution composition at 0.25 with a complicated scene. A quarter-size stage means a sixteenth of the pixels for the stage that decides everything. For a portrait it's fine; for a crowd it isn't.
Expecting two stages to be faster. It's usually cheaper for the same quality, not quicker - the pack's modes give time figures (veloce ~30 s, equilibrato ~45 s, massimo dettaglio ~70 s at 3 MP) and the two-stage recipes sit in the middle of that, not below it.
Out of memory in stage 2. The refinement pass is the full-resolution one; if 5 MP dies, it dies there. Drop to 4 MP.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| two_stage | BOOLEAN | true | — |
| stage1_scale | FLOAT | 0.500.25–1 | First-stage side relative to the final one (0.5 = 1/4 of the pixels) |
| stage1_steps | INT | 51–50 | Composition steps above the hand-off sigma |
| handoff_sigma | FLOAT | 0.65-1–0.95 | Hand-off sigma. -1 = from the profile (composition 98.5% locked) |
| stage2_steps | INT | 61–50 | High-resolution refinement steps |
| stage2_scheduler | COMBO | same | 14 options: same, alchemica_duale, alchemica_tarato, flux_shift, linear_flow, comfy:simple, +8 |
| upscale_method | COMBO | bislerp | 5 options: bislerp, bicubic, bilinear, nearest-exact, area |
| stage2_seed_offset | INT | 10–1000 | Second-stage noise uses seed + offset |
| handoff_k | FLOAT | 1.000–4 | Resolution correction of the hand-off. 1 = off (1.0 behaviour). 0 = auto: stage 1 stops at the half-resolution sigma EQUIVALENT to the hand-off at full resolution (SD3 rule, k = 1/stage1_scale). >1 = explicit factor |
| lowfreq_anchor | FLOAT | 0.000–1 | Stage 2 keeps the LOW frequencies (composition, colour) of the upscaled stage-1 image, fading out as sigma falls (HiFlow). 0 = off, 1 = full. Only with alchemica_* solvers |
| lowfreq_cutoff | FLOAT | 0.1250.02–0.6 | Low-frequency anchor: highest frequency kept from stage 1 (normalised; 0.125 = 8x8 latent blocks, the scale where the Calibration measures the composition). Higher = more of the stage-1 image kept (blurrier) |
| optsopt | ALCHEMICA_OPTS | Chain from another Alchemica options node |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| ALCHEMICA_OPTS | ALCHEMICA_OPTS | — |