Nodes/⚗ AlchemicaSampler/⚗ Alchemica · Schedule [1.0, use Alchemica Options · Schedule]
ComfyUI Node

⚗ Alchemica · Schedule [1.0, use Alchemica Options · Schedule]

The Schedule options node, from a two-lobe analytic curve to the calibrated one

By Nessuno76·Created 23 days ago·Updated 6 days ago· 3
⚗ Alchemica · Schedule [1.0, use Alchemica Options · Schedule]
  • opts
  • ALCHEMICA_OPTS
◄scheduleralchemica_duale►
◄steps8►
◄duale_alto1.00►
◄duale_ampiezza_alto0.10►
◄duale_basso8.0►
◄duale_ampiezza_basso0.08►
◄tarato_esponente0.50►
◄tarato_miscela0.15►
◄shift_override0.00►
◄flux_q1.00►
◄plunge_sigma0.00►
◄calibrated_v2false►

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.

Category⚗ AlchemicaMente/legacy (1.0)

Inputs (13)

NameTypeDefaultDescription
schedulerCOMBOalchemica_duale13 options: alchemica_duale, alchemica_tarato, flux_shift, linear_flow, comfy:simple, comfy:sgm_uniform, +7
stepsINT81–200Total steps (single stage)
duale_altoFLOAT1.000–20alchemica_duale: extra steps on composition (high sigma)
duale_ampiezza_altoFLOAT0.100.01–1alchemica_duale: how far the high lobe reaches down
duale_bassoFLOAT8.00–40alchemica_duale: extra steps on the final detail (low sigma)
duale_ampiezza_bassoFLOAT0.080.01–1alchemica_duale: how far the low lobe reaches up
tarato_esponenteFLOAT0.500–1.5alchemica_tarato: 0.5 = theoretical optimum for euler. Higher = more steps where the model changes most
tarato_miscelaFLOAT0.150–1alchemica_tarato: share of steps spread uniformly
shift_overrideFLOAT0.000–5Shift mu (0 = the model's own, 1.15 for Krea 2)
flux_qFLOAT1.000.3–3flux_shift: >1 more steps at the top, <1 at the bottom
plunge_sigmaFLOAT0.000–0.950 = off. Otherwise structure stops here and the last step jumps to 0
calibrated_v2BOOLEANfalsealchemica_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)
optsoptALCHEMICA_OPTSChain from another Alchemica options node

Outputs (1)

NameTypeDescription
ALCHEMICA_OPTSALCHEMICA_OPTS—