Nodes/WAS Node Suite v3/SPEED Sampler
ComfyUI Node Runs on cloud

SPEED Sampler

Most of the image, most of the steps, at half the price

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
SPEED Sampler
    • SAMPLER
    base_samplereuler
    scales0.5,1.0
    transformdct
    delta0.010
    amplitude203.615
    beta1.915
    seed0
    manual_sigmas

    SPEED stands for Spectral Progressive Diffusion, and the pitch is simple: a diffusion model doesn't need to think at full resolution while the image is still noise soup. Sample the early steps on a small latent, then grow it partway through - so the expensive high-res compute only happens once there's actually fine detail to resolve. Community implementations of the technique were claiming around 1.8x speedups on flow-matching models in 2026, and WAS Node Suite v3 ships a proper, polished version of it as a node. It's a genuinely good trick and one of the more interesting samplers to land in a while.

    How it works

    WASSpeedSampler is a sampler node - it doesn't take a latent or a model, it outputs a SAMPLER that you feed into the SAMPLER socket of SamplerCustom. You give it a scales list like 0.5,1.0 (the default): sample at half resolution, then grow once to full. The "spectral" part is the point. When the latent grows, the detail isn't just bilinearly stretched - it's grown in a spectral basis (a DCT by default; FFT and DWT are options too) so the frequencies that newly appear are actually resolved rather than interpolated mush. DWT is cheaper but can only double, so every step in your scales list has to be exactly twice the last; DCT and FFT accept any ratio.

    When to grow is scheduled from the model's power spectrum, P(ω) = A · ω^−β. That's what amplitude and beta mean, and the defaults (203.6 and 1.915) are FLUX.1-dev's measured values - Wan 2.1 T2V has its own preset in the code. delta is how much leftover noise counts as "burying" a frequency: bigger delta holds the small grid longer and saves more, but leaves less of the schedule to resolve detail in. The default is deliberately conservative, growing after about a sixth of the steps.

    The settings that matter

    Only a couple of knobs need touching for a first run:

    • scales - the resolution ladder, ending in 1.0. A single 1.0 disables growth entirely and samples normally, which is a handy way to A/B against plain sampling with the same seed.
    • delta - how aggressive the downsampling phase is. Start at the default and nudge up only if you want more savings.
    • amplitude / beta - ideally measured, not guessed. Encode real content through the model's VAE and fit them with the pack's Latent Power Spectrum node; a measured A runs larger than a published one, so take both from the same place. manual_sigmas overrides all three if you want to pick growth points by hand.
    • seed - seeds the noise that fills the frequencies each transition adds. Changing it varies fine detail without moving the composition.

    Where people get burned

    The big one: this needs a flow-matching model. FLUX, Wan, Anima and friends qualify; SD1.5/SDXL-class epsilon samplers do not, and won't behave. Second, this is a fast sampler, not a free one - the technique is known to occasionally drift semantics or throw artifacts on some outputs, so eyeball your first batch before you trust it for a production run. And stateful solvers (ones that carry state between steps) restart that state at every resolution transition, so the simple solvers like euler behave most predictably here - that's why it's the default.

    Installing it

    Part of WAS Node Suite v3 (WASasquatch's was-node-suite-comfyui, MIT). Search "WAS Node Suite v3" in ComfyUI Manager, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
    

    Restart ComfyUI. You need ComfyUI 0.14.0+ and Python 3.10+; the v3 suite runs on zero extra pip dependencies, so there's nothing else to install for this node.

    CategoryWAS Suite/Sampling

    Inputs (8)

    NameTypeDefaultDescription
    base_samplerCOMBOeulerThe solver each segment runs. A solver that carries state between steps starts that state again at every transition, so the simpler ones behave most predictably here.
    scalesSTRING0.5,1.0Fractions of the full resolution to sample at, increasing, ending at 1.0. `0.5,1.0` starts at half size and grows once. A single `1.0` disables growth and samples normally throughout.
    transformCOMBOdctThe basis the latent grows in. `dct` and `fft` handle any ratio between scales; `dwt` is cheaper but only ever doubles, so every step in the list has to be exactly twice the one before it.
    deltaFLOAT0.0100.0001–0.5How much leftover noise counts as burying a frequency. Larger values hold the small grid for more steps, saving more but leaving less of the schedule to resolve detail in. The default is conservative: it grows after about a sixth of the steps.
    amplitudeFLOAT203.6150–1000000The A of the model's power spectrum, eg 203.6 for FLUX.1-dev. Only meaningful alongside delta: a measured A runs larger than a published one, so take both from the same place.
    betaFLOAT1.9150–10How fast the model's spectrum falls away with frequency. Unlike the amplitude this is a property of the model rather than of the scale its latents happen to be in, so a measured one is directly comparable to a published one. The default belongs to FLUX.1-dev.
    seedINT00–4294967295Seeds the noise that fills the frequencies each transition adds. Changing it varies the fine detail without moving the composition. Any whole number; `0` is as good a seed as any.
    manual_sigmasoptSTRINGSigmas to grow at, one per transition, decreasing. Leave this empty to have them worked out from the amplitude and beta instead, which is the usual way round. Setting them ignores delta, amplitude and beta.

    Outputs (1)

    NameTypeDescription
    SAMPLERSAMPLERFeeds the SAMPLER socket of SamplerCustom.