Schedulers¶
Swap denoising schedulers at runtime. 10 aliases mapped to diffusers classes.
from strands_sana import sana_set_scheduler, sana_list_schedulers
print(sana_list_schedulers())
sana_set_scheduler(name="dpm-solver", model="sana-1.6b-1024")
Available schedulers¶
| Alias | Diffusers class | Notes |
|---|---|---|
flow-match-euler |
FlowMatchEulerDiscreteScheduler |
Default — best for Sana |
flow-match-heun |
FlowMatchHeunDiscreteScheduler |
Higher fidelity, 2× cost |
dpm-solver |
DPMSolverMultistepScheduler |
Fast, supports flow_sigmas |
dpm-solver-single |
DPMSolverSinglestepScheduler |
Even faster |
dpm-solver-cosine |
CosineDPMSolverMultistepScheduler |
Cosine schedule |
euler |
EulerDiscreteScheduler |
Lossy on flow models |
euler-ancestral |
EulerAncestralDiscreteScheduler |
Adds noise per step |
ddim |
DDIMScheduler |
Lossy on flow models |
deis |
DEISMultistepScheduler |
Fast |
heun |
HeunDiscreteScheduler |
Lossy on flow models |
Demo — same prompt, 4 schedulers¶
(default)
(13× faster)
(lossy)
(lossy)
Flow-matching compatibility¶
Sana is a flow-matching model. Its scheduler config has prediction_type=flow_prediction.
- ✅
FlowMatch*schedulers — native fit - ✅
DPMSolver*schedulers — acceptuse_flow_sigmas=True - ⚠️ Other schedulers — work but quality degrades (we strip
flow_predictionautomatically and warn)
This was BUG #9 — caught on Thor.
Speed comparison (Thor, sana-0.6b-1024, 10 steps)¶
| Scheduler | Time |
|---|---|
| flow-match-euler | 48s (first run, ~12s warm) |
| dpm-solver | 13.3s |
| euler | 6.2s |
| euler-ancestral | 6.3s |
| ddim | 7.0s |
| deis | 7.1s |
| heun | 7.7s |