⚗ Alchemica Calibration (measure your checkpoint)
Measure your checkpoint instead of guessing at step counts
- model
- positive
- latent_image
- reference_model
- reference_latent
- plot
- report
Every step-count and scheduler recommendation you've read for Krea 2 - "8 steps, euler, simple" - was measured on somebody else's checkpoint. This node measures yours. It runs a dense trajectory through your model, watches how the prediction actually evolves sigma by sigma, and writes a profile that the samplers then use in place of the analytic schedule.
It's the least glamorous node in the pack and the one that changes the most.
What it's measuring
The run is a dense Euler trajectory - 40 steps by default, 60 for precision - over 249 evenly spaced sigmas. At each one it records the model's prediction and does three things with it:
- How expensive each sigma is. The normalised rate of change ‖dD/dσ‖/σ gives a step density
n(σ) ∝ √(‖dD/dσ‖/σ)- the distribution that minimises Euler's total error for a fixed step count. That's the step schedule. - When the composition locks. Low-frequency similarity against the final image; Krea 2 Turbo locks at about σ ≈ 0.87, which becomes the hand-off sigma between the two stages and the point NAG switches on.
- When fine detail is born. High-frequency similarity and energy - sharpness grows between σ 0.57 and 0.13. That gives the detail window and the restart sigma.
It also probes how much ancestral noise (variety) and detail boost the checkpoint tolerates - separately above and below σ 0.6 - and stores the answers in the profile. If the sensitivity can't be measured, the report says so rather than inventing a number.
Connect a reference_model - Krea 2 FP8 while calibrating the NVFP4 one - and it measures the quantisation error on the same states.
Inputs that matter
model- the checkpoint to measure. Yes, the actual one you generate with.positive- a conditioning to drive the trajectory. Use a real prompt, not an empty one; several different prompts averaged into one profile is the whole point.latent_image- at the resolution you actually generate at, the final one. The node's own docs say a 3 MP and a 4 MP profile came out almost identical (hand-off 0.87 vs 0.864), so one calibration covers both of those. Don't calibrate at 1 MP and sample at 4 MP.dense_steps- 40 is enough, 60 is more precise.cfg- set it to how you'll generate (1.0 for Turbo).profile_name- the file name it writes inside the pack'sprofili/folder. Use something you'll recognise:krea2_turbo_nvfp4is the convention.mode-accumulate(default) averages this prompt into the profile, and re-running the same prompt updates its sample rather than adding a duplicate.replacestarts over. The authors suggest 16+ prompts, accumulated.measure_half_res- also runs the trajectory at half resolution, about +30% time, so stage 1 of two-stage sampling gets its own measured curves.
Outputs: reference_latent, plot (an IMAGE - the measured curves, genuinely worth saving), and report.
Running it
Open the pack's KREA2_TARATURA (3 MP) or KREA2_TARATURA_4MP example workflow - Workflow → Browse templates → ComfyUI-AlchemicaSampler - point it at your checkpoint, queue it. Budget 15–20 minutes at 4 MP. A live test at 1184×1776 with half-resolution curves took 127 seconds per prompt.
Profiles are not shipped, and shouldn't be: they're fingerprint-specific to your checkpoint and are created on your machine, in <custom_nodes>/ComfyUI-AlchemicaSampler/profili/. From then on every (auto) profile widget finds the right one by itself - and where several exist for one checkpoint, (auto) prefers a profile made with the same LoRA stack, then one with the v2 curves.
Installing
# ComfyUI Manager: search "AlchemicaSampler"
cd ComfyUI/custom_nodes && git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
ComfyUI 0.36+, no pip dependencies. Restart the server after cloning.
Where it goes wrong
"NO profile for this model". You haven't calibrated that checkpoint, or you calibrated under another name and the fingerprint didn't match. The samplers still work - they fall back to the analytic schedule and the report says so.
An exotic quantisation, and the fingerprint collapses to "architecture only". Some checkpoints can't be uniquely fingerprinted; the report warns you and you pick the profile by hand in the profile widget.
Old profiles after 2026-10-10. Calibration v2 (solver-order step law, log-SNR smoothing, half-resolution stage-1 curves) needs a fresh run. Profiles made before that date still work, but only the smoothing applies to them; re-calibrating is what gets you the rest.
NVFP4 running slower than FP8. Not a calibration problem, a torch problem: full-speed NVFP4 on RTX 50-series needs a PyTorch built for CUDA 13.0 (cu130). The calibration report prints your torch/CUDA build and warns you if it isn't right, which makes this the one node in the pack that's also a diagnostics node.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The model to calibrate (e.g. Krea 2 Turbo NVFP4) | |
| positive | CONDITIONING | — | |
| latent_image | LATENT | At the resolution you really generate at (the FINAL one) | |
| seed | INT | 10010–18446744073709550000 | — |
| dense_steps | INT | 4016–120 | Steps of the measuring trajectory. 40 is enough, 60 is more precise |
| cfg | FLOAT | 1.000–10 | As you will use it (Turbo: 1.0) |
| profile_name | STRING | krea2_turbo_nvfp4 | File name inside profili/ |
| mode | COMBO | accumulate | accumula (accumulate) = averages with the other prompts; re-running the same prompt UPDATES its sample instead of adding one. sostituisci (replace) = start from scratch |
| sonda_eta | FLOAT | 0.500–1 | Probe intensity ONLY for measuring eta/detail-boost tolerance (eta_sicuro/detail_sicuro) - not the eta you will generate with |
| measure_half_res | BOOLEAN | true | Also measures at HALF resolution (+~30% time): stage 1 of two-stage sampling then gets its own step spacing (calibration v2) |
| reference_modelopt | MODEL | Optional: e.g. Krea 2 FP8, to measure the error introduced by NVFP4 quantization |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| reference_latent | LATENT | — |
| plot | IMAGE | — |
| report | STRING | — |