⚗ Alchemica · Schedule [1.0, use Alchemica Options · Schedule]
The Schedule options node, from a two-lobe analytic curve to the calibrated one
- opts
- ALCHEMICA_OPTS
Every Alchemica scheduler comes from one idea, and it's worth stating because it explains all the fields on this node: a step density n(σ), with the N steps sitting at the quantiles of its cumulative distribution. Where the density is high, steps are packed close together. Where it's low, they're sparse. You're not choosing a scheduler so much as choosing where to spend your budget.
The scheduler field
alchemica_duale (the default) - an analytic two-lobe density: extra steps over the composition phase at high sigma, extra steps over the final detail at low sigma, thin in the middle. No calibration needed, works on any checkpoint. duale_alto (default 1.0) is how much extra weight goes on composition and duale_ampiezza_alto (0.10) how far that lobe reaches down; duale_basso (8) and duale_ampiezza_basso (0.08) are the same pair for the detail end.
alchemica_tarato - the measured one, and the reason this pack exists. The calibration pass records the model's prediction at every sigma and derives the step density n(σ) ∝ √(‖dD/dσ‖ / σ), which is the distribution that minimises Euler's total integration error for a fixed number of steps - local error goes as h²·cost, so you want steps where the prediction changes fast. Two fields tune it: tarato_esponente (0.5, the theoretical optimum - raise it to concentrate harder where the model is moving) and tarato_miscela (0.15, the share of steps spread uniformly regardless of the measurement). That second one is quiet good engineering: 15% of the budget spent evenly is insurance against a profile that's confidently wrong, and it costs you almost nothing when the profile is right.
flux_shift - uniform in t with the flow shift applied, which is the same thing as sgm_uniform on this architecture. flux_q skews it: above 1 puts more steps at the top (composition), below 1 at the bottom (detail).
linear_flow - a straight 1 → 0 line. The baseline nobody should ship as a default and everybody should try once.
comfy:simple, comfy:sgm_uniform, comfy:karras, comfy:exponential, comfy:ddim_uniform, comfy:beta, comfy:normal, and a few more - ComfyUI's own schedulers, reachable from the same dropdown so you can A/B without leaving the graph.
The other fields
steps - total steps, single stage, 1 to 200, default 8.
shift_override - overrides the model's flow-shift mu. 0 means "whatever the model says", and for Krea 2 that's 1.15.
plunge_sigma - 0 is off. Set it and the model stops refining structure at that sigma and the last step jumps straight to zero. It's an aggressive move, part of the plunge_restart recipe rather than something to sprinkle on a good pipeline.
opts (optional) - the chain socket. This node overrides the scheduler group of whatever preset the sampler is using, and it can sit anywhere in the chain; groups don't interfere with each other.
Wiring
Alchemica · Schedule ─ ALCHEMICA_OPTS → AlchemicaSampler · opts
→ AlchemicaSigmas · opts
→ any other options node · opts
The honest framing
Krea 2's sampler debate is loud and unresolved - er_sde + simple, euler_ancestral_cfg_pp + beta, lcm + simple, 8 steps versus 12, and a general sense that anything over ~1200 px per side needs a different answer. Every one of those opinions was formed by trying stock schedulers whose curves were designed for DDPM-style models, not for rectified flow. A straight path leaves nothing for a Karras-style schedule to optimise, which is why the received wisdom about classic schedulers inverted so completely after the flow-matching switch.
This node is the argument that placement is measurable. It's a reasonable argument, and if you disagree, comfy:* is right there in the dropdown and rif_euler_simple exists as the control.
Installing
Part of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
Restart the ComfyUI server. No dependencies, ComfyUI 0.36.0+. To add your own scheduler, the pack's registry takes a decorated function - @register_scheduler("my_schedule") in alchemica/schedules.py - and it shows up in this menu after a restart. Solvers work the same way via @register_solver.
Traps
Picking alchemica_tarato with no profile. It resolves to alchemica_duale and says so in the report. Calibrate once, or stick with the analytic curve knowingly.
Overdoing tarato_esponente. Raising it concentrates steps where the model moves fastest, which is correct in principle - but the measured profile already does that, so you're sharpening a sharpened curve. Push it too far and you starve the parts of the trajectory that were fine.
Expecting steps to behave like a KSampler's. On a calibrated curve, step count and step placement trade against each other in a way they don't on a uniform schedule. That's the point, and it's also why "8 steps" from this node isn't comparable to "8 steps" from simple.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| scheduler | COMBO | alchemica_duale | 13 options: alchemica_duale, alchemica_tarato, flux_shift, linear_flow, comfy:simple, comfy:sgm_uniform, +7 |
| steps | INT | 81–200 | Total steps (single stage) |
| duale_alto | FLOAT | 1.000–20 | alchemica_duale: extra steps on composition (high sigma) |
| duale_ampiezza_alto | FLOAT | 0.100.01–1 | alchemica_duale: how far the high lobe reaches down |
| duale_basso | FLOAT | 8.00–40 | alchemica_duale: extra steps on the final detail (low sigma) |
| duale_ampiezza_basso | FLOAT | 0.080.01–1 | alchemica_duale: how far the low lobe reaches up |
| tarato_esponente | FLOAT | 0.500–1.5 | alchemica_tarato: 0.5 = theoretical optimum for euler. Higher = more steps where the model changes most |
| tarato_miscela | FLOAT | 0.150–1 | alchemica_tarato: share of steps spread uniformly |
| shift_override | FLOAT | 0.000–5 | Shift mu (0 = the model's own, 1.15 for Krea 2) |
| flux_q | FLOAT | 1.000.3–3 | flux_shift: >1 more steps at the top, <1 at the bottom |
| plunge_sigma | FLOAT | 0.000–0.95 | 0 = off. Otherwise structure stops here and the last step jumps to 0 |
| calibrated_v2 | BOOLEAN | false | alchemica_tarato v2: step law matched to the solver order (cube root of the 3rd derivative for euler_2m / heun), smoothing in log-SNR, and stage 1 of two stages uses the curves measured at half resolution. Needs a profile calibrated after 2026-10-10 for the new curves (otherwise only the smoothing applies) |
| optsopt | ALCHEMICA_OPTS | Chain from another Alchemica options node |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| ALCHEMICA_OPTS | ALCHEMICA_OPTS | — |