Nodes/SpectrumKSampler/KSampler (Spectrum + SPD / SPEED)
ComfyUI Node

KSampler (Spectrum + SPD / SPEED)

Cheap steps early, cached steps late

By sorryhyun·Created 4 months ago·Updated 22 days ago· 25
KSampler (Spectrum + SPD / SPEED)
  • model
  • positive
  • negative
  • latent_image
  • LATENT
seed0
steps28
cfg4.0
sampler_name
scheduler
denoise1.00
split_modesingle
spd_scale0.50
spd_sigma0.70
adaptive_smc_alpha0.10

Nicknamed SPEED in the pack's own docs, and it earns the name by stacking two different accelerations that don't compete with each other. Regular KSampler (Spectrum) skips blocks on cached steps. This node adds SPD (Spectral Progressive Diffusion) on top: it runs the early, noise-dominated part of the trajectory at a lower resolution - fewer tokens, so those early steps are just cheaper to begin with - then spectral-expands the latent back to full resolution once finer detail starts to matter, and lets Spectrum take over caching for the full-res tail. SPD shrinks tokens early, Spectrum skips blocks late, and because they're targeting different parts of the same run, the pack's own benchmark clocks the combination at roughly ×1.98 wall-clock speedup against ×1.73 for Spectrum alone.

The catch: it's Euler-only

This is the one thing to know before you plug it in and wonder why nothing sped up. SPD re-spaces the sigma schedule mid-run to do the low-res-to-full-res handoff, and that only works with the Euler solver. Pick anything else in sampler_name and it's silently ignored with a console warning - the sampler falls back to Euler regardless of what you selected. If you're used to reaching for a different solver out of habit, this is the node where that habit gets overridden.

Inputs and outputs that matter

Standard KSampler surface (model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise) plus three SPD-specific knobs:

  • split_mode - currently only single is offered (one low-to-full transition). It's exposed as an enum for future schedule types, not a real choice yet.
  • spd_scale (default 0.5) - the low-res prefix's fraction of full latent height/width. 0.5 is roughly a quarter of the tokens and is the pack's benched-coherent point. 1.0 disables SPD outright, which drops you back to plain Spectrum - handy for a quick A/B. Going lower than 0.5 is explicitly untested territory and stresses the resolution-expansion handoff.
  • spd_sigma (default 0.7) - the noise level at which the low-res prefix hands off to full resolution. 0.7 is the validated "knee"; 1.0 disables SPD the same way spd_scale = 1.0 does.
  • adaptive_smc_alpha - the same α-adaptive detail-recovery CFG combine available on the other samplers here; 0 disables it.

Output is LATENT.

Notably absent: no clip, no quality_tags, no DCW. Modulation guidance composes here by chaining the standalone Anima Mod Guidance patcher onto your model before this sampler; DCW lives only on the Advanced Spectrum sampler.

What a beginner should actually set

Leave split_mode and spd_scale/spd_sigma at their defaults - they're the only combination the pack has actually validated for coherence. Set your steps/cfg as usual, confirm sampler_name is Euler (it will be forced regardless), and treat this node as "Spectrum, but faster on top of the resolution ramp" rather than something with its own separate tuning surface.

Installing it

ComfyUI Manager - search SpectrumKSampler, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/sorryhyun/ComfyUI-Spectrum-KSampler

Restart - no extra model downloads for this node specifically; the mod guidance and DCW auto-downloads only trigger if you chain those patches in separately.

Common issues & troubleshooting

I picked a different sampler and nothing changed. Expected - SPD requires Euler and silently forces it, logging a warning rather than erroring. Check your console if you're not sure it's actually running Euler.

The verbose log's block-skip ratio looks lower than I expected for the speedup I'm seeing. That's a reporting quirk, not a bug: the log counts the cheap low-res prefix forwards as if they were full-cost forwards, which understates the real speedup. Trust the wall-clock time, not the ratio.

Output looks off on a complex, high-frequency-detail prompt. The 0.5 scale / 0.7 sigma point is the only combination the pack has actually validated for coherence - pushing spd_scale lower or spd_sigma later is explicitly flagged as untested and more likely to show handoff artifacts on demanding prompts.

Want mod guidance or DCW alongside this? Chain Anima Mod Guidance (a MODEL → MODEL patch) or DiT CFG-FSG/DCW Patch before this sampler's model input - neither is built into SPEED directly.

Categorysampling

Inputs (14)

NameTypeDefaultDescription
modelMODELThe model used for denoising the input latent.
seedINT00–18446744073709550000
stepsINT281–10000
cfgFLOAT4.00–100
sampler_nameCOMBO45 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +39
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
denoiseFLOAT1.000–1
split_modeCOMBOsingleSPD resolution schedule. 'single' = one low→full transition (v0). The low-res prefix runs at spd_scale, then expands to full resolution at σ=spd_sigma.
spd_scaleFLOAT0.500.25–1Prefix resolution scale (fraction of full latent H/W) for the low-res phase. 0.5 = quarter the tokens, the benched-coherent point. 1.0 disables SPD (vanilla Spectrum). Lower than 0.5 is untested and stresses the handoff re-warm.
spd_sigmaFLOAT0.700–1Handoff σ: switch from low-res to full-res when the schedule drops to this noise level. 0.7 is the validated knee (re-warm overlaps Spectrum's natural warmup, so it's cheap). Later/lower knees and HF-detail prompts are untested. 1.0 disables SPD.
adaptive_smc_alphaFLOAT0.100–1α-adaptive Sliding-Mode Control CFG gain. 0 disables (vanilla CFG combine). 0.2 = production default — k_t := α·mean(|v_cond − v_uncond|) per step keeps the bang-bang correction in-band across CFG/σ/sample (paper's fixed k=0.1 was ~14× off on Anima at CFG=4). Recovers detail (fingers, eyes, text); outputs run slightly darker. Auto-disabled when CFG=1.

Outputs (1)

NameTypeDescription
LATENTLATENT