VPScheduler
The variance-preserving schedule from the theory books
- SIGMAS
VPScheduler builds the classic continuous VP (variance-preserving) noise schedule - the one from the original diffusion theory, and the one k-diffusion carries for backward compatibility. In plain terms: it produces the SIGMAS list that defines how much noise sits at each of your sampling steps, using the beta-parameterized schedule that DDPM-style models were originally formulated with. It works, it's mathematically canonical, and for most people it's the wrong tool - not because it's bad, but because real checkpoints ship with their own schedules that fit them better.
How it works
It calls k-diffusion's get_sigmas_vp, which computes sigma(t) = sqrt(expm1(beta_d*t²/2 + beta_min*t)) for t running from 1 down to a tiny eps_s, with a final zero sigma appended. The beta_d and beta_min parameters control the shape of the noise curve; eps_s is the cutoff near clean. It's the continuous-parameter analog of the original DDPM discrete schedule.
Inputs:
- steps (default 20) - how many sigma values.
- beta_d (default 19.9) - the "diffusion" rate: how fast the schedule moves through noise. The defaults are the classic DDPM values.
- beta_min (default 0.1) - the floor of the noise curve.
- eps_s (default 0.001) - the small time value that replaces full clean, so you never divide by zero.
Output is SIGMAS for SamplerCustomAdvanced. The first three are effectively "the defaults from the paper"; the source even carries a TODO: fix default values, which tells you the maintainers consider them a starting point, not gospel.
When it's actually the right call
Honestly? Rarely. SD 1.5 and SDXL have their own discrete schedules already baked into the model wrapper, so VPScheduler mostly shows up when you're porting a k-diffusion or diffusers script into ComfyUI and want the schedule the original experiment used. The knowledge base's guidance is blunt: on DDPM-style models you'd reach for a Karras-shaped or normal schedule, and on flow-matching models you'd want beta/simple. This node is the "canonical reference" option, useful for reproduction and for understanding, not for everyday generation.
Where people get burned
- It doesn't match your model's sigma range. Unlike
SDTurboSchedulerorBasicScheduler, it takes nomodelinput, so it generates a schedule in an absolute VP scale that may not align with your checkpoint's wrapper. Mismatched sigma magnitudes can come out dark, washed out, or noisy. - The advanced params are for paper-followers.
beta_dandbeta_minaren't knobs you tune by feel; move them without knowing what you're doing and you'll get a schedule your model was never trained to use. - It's a scheduler, not a sampler. Pair it with a real sampler node - it only makes the sigma list.
Ships with ComfyUI core. It's the sort of node you open once, nod at, and close - but when you need the textbook VP schedule, it's right there.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| steps | INT | 201–10000 | — |
| beta_d | FLOAT | 19.900–5000 | — |
| beta_min | FLOAT | 0.100–5000 | — |
| eps_s | FLOAT | 0.00100–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |