Nodes/ComfyUI-ppm/SamplerER_SDEScheduled
ComfyUI Node

SamplerER_SDEScheduled

The Anima-recommended stochastic sampler, now with a noise window you control

By pamparamm·Created 2 years ago·Updated 8 days ago· 267
SamplerER_SDEScheduled
  • model
  • SAMPLER
solver_type
max_stage3
eta1.00
sde_start_percent0.200
sde_end_percent1.000
s_noise1.00

ER-SDE is the sampler Anima's model card names as its default (30-50 steps, CFG 4-5), and ComfyUI already ships a plain er_sde in every KSampler dropdown. So why would you install a custom node that adds another one? Because this version is scheduled: you get to pick exactly where in the denoising the stochastic noise happens, instead of taking the whole run's noise or none of it. That's the entire point of the "Scheduled" suffix, and for anyone who keeps bouncing between "too plastic" and "too noisy," it's genuinely the knob you've been missing.

Like everything else in pamparamm's ComfyUI-ppm pack, this is a modified/fixed sampler, not a brand-new algorithm. The core is the Extended Reverse-Time SDE solver (ER-SDE-Solver-3, arXiv 2309.06169) - a high-order stochastic solver for variance-preserving diffusion models, which is why it's at home on SDXL, the anime finetunes, and v-prediction checkpoints like NoobAI vpred. What the node grafts on top is the same SDE-scheduling machinery ComfyUI's sa_solver uses: the denoising run gets split into a deterministic region and a noisy one. Outside your chosen window the sampler runs as a plain ODE; inside it, it injects fresh noise. Early steps build composition, late steps add texture - you get the detail of a stochastic sampler without the seed-lottery on the parts that matter most.

The node takes a model and hands back a single SAMPLER output, so it drops straight into the sampler input of KSampler or SamplerCustom. Your scheduler stays separate and untouched.

The inputs, in the order you'll actually touch them:

  • solver_type - ER-SDE, Reverse-time SDE, or ODE. Leave it on ER-SDE unless you know you want the different noise scaling; ODE just makes everything deterministic.
  • sde_start_percent (default 0.2) and sde_end_percent (default 1.0) - the noise window as a fraction of the denoising run. The defaults mean "noise from 20% in to the end," which keeps the first, composition-defining fifth fully deterministic.
  • s_noise (default 1.0) - multiplier on the injected noise. Crank it for extra grain, drop it toward 0 to tame over-textured results.
  • eta - the author's tooltip is the ground truth here: "Stochastic strength of reverse-time SDE. When eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type." So don't fiddle with it in ER-SDE mode; it only drives the Reverse-time SDE variant.
  • max_stage (1-3, default 3) - how many high-order correction stages run. 3 is the full solver; drop to 1 or 2 for a faster, slightly cruder result. It's marked advanced for a reason.

A quick note on expectations: this is an ancestral-style sampler, so it adds fresh noise at each noisy step. Same seed does not mean identical output the way it does with a converging ODE sampler, and changing step count changes the image rather than just refining it.

Installing it

ComfyUI Manager is the easy path - search for ComfyUI-ppm and install. Or clone it manually:

cd ComfyUI/custom_nodes
git clone https://github.com/pamparamm/ComfyUI-ppm

Then restart ComfyUI. The pack has no extra Python dependencies beyond what ComfyUI already ships (the pyproject declares nothing beyond dev tooling) and downloads no models, so there's no model hunt to suffer through. The README's one genuine gotcha: "If any node starts throwing errors after an update - try to delete and re-add the node." That's the pack author's own advice, and it applies to this sampler like everything else in the pack.

Common issues

  • Nothing in the sampler dropdown changed. This is a SAMPLER-output node, not a KSampler setting - if you expected er_sde_scheduled to appear in KSampler's sampler list, it won't. You wire this node's output into the sampler input instead.
  • "Too grainy / too smooth." That's the window talking, not the solver. Narrow it by raising sde_start_percent (noise later = cleaner) or widen it for more texture, then nudge s_noise.
  • Post-update errors. Per the README, delete the node and re-add it before you go hunting for a broken dependency.

If you only ever wanted stock er_sde, you don't need this node. If you wanted to aim the stochasticity, it's the version worth keeping.

Categorymodel/sampling/samplers

Inputs (7)

NameTypeDefaultDescription
modelMODEL
solver_typeCOMBO3 options: ER-SDE, Reverse-time SDE, ODE
max_stageINT31–3
etaFLOAT1.000–100Stochastic strength of reverse-time SDE. When eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type.
sde_start_percentFLOAT0.2000–1
sde_end_percentFLOAT1.0000–1
s_noiseFLOAT1.000–100

Outputs (1)

NameTypeDescription
SAMPLERSAMPLER