ComfyUI SPEED Now Speeds Up Image Models, Not Just MiniMax H3
ComfyUI-SPEED adds KSampler-shaped nodes so progressive-resolution sampling runs on MOSS Image and Krea 2 as well as MiniMax H3, with per-model calibration and new timings.
Same seed and prompt, 5 second 960x544 clip on a Modal L40S. Left: plain sampling, 288s. Right: SPEED at tolerance 0.05 with 4 stages, 182s.
What the pack does
SPEED comes from Spectral Progressive Diffusion for Efficient Image and Video Generation by Howard Xiao, Brian Chao, Lior Yariv and Gordon Wetzstein at Stanford. The observation behind it: diffusion models build images roughly from low to high frequencies, so the early denoising steps are dominated by bands the model has not resolved yet. Running those steps at full resolution spends most of the compute on noise.
The pack applies that to ComfyUI without retraining. A run starts on a smaller grid, then steps the latent up to a larger grid as detail starts to matter. stages picks the ladder: 2 stages run 0.5 to 1.0, 3 stages run 0.33 to 0.66 to 1.0, and 4 stages run 0.25 to 0.5 to 0.75 to 1.0. Tolerance (Delta), noise_amplitude and noise_decay_exponent decide at which step each switch happens, and a smaller tolerance switches later: safer, but slower.
MiniMax H3 keeps its audio stream at full resolution no matter which stage the video stream is on.
What changed with the rename
The repository is now StanLukuvka/ComfyUI-SPEED instead of StanLukuvka/ComfyUI-MiniMax-H3-SPEED, and the changelog groups these under 2.0.0. When the pack was still H3-only this site covered its V2 sampler set.
- Six nodes in two families.
SPEED KSampler,SPEED KSampler (Manual)andSPEED KSampler Sigma Harvesttakemodel, conditioning and alatent_imagelike ComfyUI's own KSampler and build the noise, guider, sampler and sigma schedule internally. The Advanced family keeps the SamplerCustomAdvanced wiring for MiniMax H3. - Flow image models. MOSS Image and Krea 2 run through the KSampler nodes. The pack rejects non-flow models such as EPS or v-prediction checkpoints with an error, in the samplers and in Harvest.
- Image-to-image.
denoiseworks as in KSampler: the first stage starts from the encoded image shrunk to that stage's size, and Automatic skips coarse stages that the shortened schedule has already passed. - Reference latents on edit models. Edit models that take
reference_latents, such as Flux 3 Klein, used to see only the top-left corner of the reference at a coarse stage. The KSampler nodes now scale reference latents with each stage and restore them for the last one. - No baked-in defaults.
noise_amplitudeandnoise_decay_exponentnow start at 0 and stop with an error until you run a Harvest calibration. For base H3 with Euler the README lists reference values of 35.4213 and 1.0126. - Renamed nodes. The earlier
MiniMaxH3*IDs stay registered as deprecated subclasses, so saved workflows still load and can be swapped one node at a time.
Sigma Harvest is where per-model calibration happens. It runs your sampler and schedule once at full resolution, without the SPEED chain, measures how the power of the residual falls with frequency, and fits P(ω) = A·|ω|^-β. Automatic then solves for each stage boundary from that fit, and Harvest reports r² and a health label (good at r² 0.7 or above, fair at 0.4, then weak, suspect and invalid) so you know whether the fit is worth trusting.
Measured speedups
The new H3 evidence replaces the earlier 10 second clip with a 5 second latte-art pour at 960x544, run on a Modal L40S with one Harvest calibration (A 35.4213, β 1.0126). Plain sampling took 288s in the tolerance 0.01 and 0.05 session and 276s in the 0.005 session, and each speedup is measured against its own session.
| Tolerance | 2 stages | 3 stages | 4 stages |
|---|---|---|---|
| 0.005 | 238s (1.16x) | 236s (1.17x) | 227s (1.22x) |
| 0.010 | 238s (1.21x) | 226s (1.27x) | 224s (1.29x) |
| 0.050 | 206s (1.40x) | 194s (1.48x) | 182s (1.58x) |
The same pair playing side by side: left is plain sampling, right is SPEED at tolerance 0.05 with 4 stages.
The author reports that none of the ten H3 clips has a colour flash, and that the pour, the latte art and the lettering survive every run. That is lower than the 2.41x the same repository reported for its previous H3 clip on an RTX 5080, so treat the multiplier as a property of the clip, the GPU and the calibration rather than of the method.
Image stills are much shorter runs, and the numbers are smaller:
| Model | Native | Automatic, 3 stages, tolerance 0.05 | Manual, 0.5x to half the steps |
|---|---|---|---|
| MOSS Image, 1344x768, 20 steps, CFG 5 | 22s | 18s (1.26x) | 14s (1.54x) |
| Krea 2 raw, fp8, 1216x832, 52 steps, CFG 3.5 | 283s | 215s (1.31x) | 183s (1.55x) |
MOSS Image at 1344x768, same seed and prompt. Left: native, 22s. Right: SPEED 3-stage, 18s.
Krea 2 at 1216x832, 52 steps. Left: native, 283s. Right: SPEED 3-stage, 215s. The author notes the Krea 2 rows are single runs on an 8 GB card running a 13 GB model, so they vary by tens of seconds.
At a tolerance of 0.005 the harvested boundary lands inside the first few steps of an image schedule, which saves almost nothing, so the image workflows use 0.05.
Composition versus speed
noise_policy decides where the extra high-frequency detail comes from at each switch. coupled_full_grid reuses the noise field a plain SamplerCustomAdvanced run would use, so the same seed keeps the same composition, and on H3 clips it saved only 5 to 10 percent. direct_coarse draws its own fill: it changes the picture at a given seed, and it saved 15 to 30 percent on the same clips.
Workflows
The repository ships three example graphs, each with Harvest, Automatic and Manual nodes on one set of loaders and only Automatic active.
The H3 graph runs the Advanced nodes with Euler, simple scheduling at 20 steps, 3 stages and tolerance 0.005. The two image graphs run the KSampler nodes with Euler at 20 steps for MOSS Image and 52 steps for Krea 2, 3 stages and tolerance 0.05.
Limits
- Only flow (CONST) image models are accepted, in the samplers and in Harvest.
noise_maskand masked denoising are not supported.- On the Advanced nodes the
latent_imagemust start empty; image-to-video comes through H3 keyframe conditioning, which the pack resizes and restores itself. - Each stage is its own sampler call, so multistep samplers restart their history at every resolution change. Give every stage at least 2 steps.
- Some samplers still misbehave on H3:
dpm_fastanddpm_adaptivenever finish denoising, anduni_pcbreaks when a stage gets a single step.
Availability
- Node pack: StanLukuvka/ComfyUI-SPEED
- Paper: Spectral Progressive Diffusion
- Workflows:
workflows/ - Evidence and original clips:
evidence/
The repository had collected 110 stars when this was written. The announcement ran in r/StableDiffusion; no independent reproduction of the image-model numbers had been published at the time of writing.
Comments
Sign in with GitHub to join the discussion.