AccelDiff Unified
One node, ten acceleration tricks — AccelDiff Unified cuts sampling without retraining
- model
- sampler
- model
AccelDiff Unified is the kind of node that makes you do a double take: one node, ten published diffusion-acceleration methods, and none of them require you to retrain, fine-tune, or download a single new weight. It's the flagship of the jiajianxie/ComfyUI-AccelDiff pack, released in June 2025 and expanded the same month from four methods to ten. If you've been staring at Wan or Flux renders crawl by, this is aimed at you.
The idea behind it
Diffusion sampling is wasteful. Neighboring timesteps compute nearly identical things, and a whole family of "training-free" methods exploits that redundancy without touching the model weights. That's a different bet than distillation (LCM, Lightning LoRAs), which bakes fewer steps into the model itself and costs you a separate LoRA plus real quality. Training-free acceleration keeps your exact model and just skips or cheapens redundant computation. The tradeoff is still there - you're buying speed with approximation - but you can dial it per render.
The pack splits those methods into two families, and the node lets you use either one or stack both:
- Sampler-level (AdaptiveDiff, EasyCache, SADA, ZEUS): reuse or approximate the predicted noise across timesteps, so whole steps get skipped. These produce a
SAMPLER. - Model-level (TeaCache, MagCache, TaylorSeer, HiCache, SeaCache, TC-Pade): wrap the model and cache intermediate features - attention maps, transformer block outputs - inside it, so each remaining step costs less.
TeaCache is the one you've probably already met; it's a staple of Wan video workflows, where it's good for a solid chunk of runtime on longer clips. MagCache and the rest are newer papers that made it in during that June 2025 update.
How the node actually works
Under the hood it's a dispatcher, not a magic engine. Two dropdowns - sampler_method and model_method, both defaulting to None - pick your method, and the node imports the matching implementation and wraps it for you. The genuinely clever part is the frontend. The pack ships js/mine.js, which redraws the node live: it hides every parameter widget that doesn't apply to your selection, shows the model input slot only when you've picked a model method, and reveals sampler_name only when you've picked a sampler method. Without that you'd be staring at roughly fifty widgets, most of them irrelevant.
The inputs and outputs that matter
You really only touch a handful of fields, depending on which side you enable:
sampler_method/model_method- the two dropdowns. Set one, the other, or both.sampler_name- the base sampler (euler, dpmpp_2m, …) your chosen sampler wrapper drives. Only appears for sampler methods. Note thatddimisn't supported and silently maps to euler.- The threshold knobs - TeaCache's
rel_l1_thresh, EasyCache'sec_threshold, MagCache'smagcache_thresh. This is your quality/speed dial: lower is conservative, higher is faster but risks artifacts. - The
*_model_typedropdowns (e.g.teacache_model_type,magcache_model_type) - these must match your actual model architecture (flux, wan2.1_t2v_1.3B, hunyuan_video, …). Get this wrong and the caching heuristics behave badly.
Two outputs: sampler and model. Wire the SAMPLER into a KSampler's sampler input, and/or pass the MODEL between your checkpoint loader and the KSampler. Combined acceleration looks like:
[Loader] --model--> [AccelDiff Unified] --model--> [KSampler]
\--sampler-------> [KSampler]
Installing it
Two ways, both standard. ComfyUI Manager, searching for ComfyUI-AccelDiff, is the easy route. Or manually:
cd ComfyUI/custom_nodes/
git clone https://github.com/jiajianxie/ComfyUI-AccelDiff
cd ComfyUI-AccelDiff
pip install -r requirements.txt
Then restart ComfyUI. The dependency list is blessedly light - torch>=2.1.0, scipy, einops, numpy, tqdm - and there are no model files to download. Everything is pure Python over whatever model you already have. Python >= 3.10 is required.
Where people get burned
- Wrong model type. The
*_model_typedropdowns have defaults tuned for specific models, and the defaults differ per method (TeaCache defaults to a Wan ret-mode, MagCache to plain Wan, the newer methods to flux). If your render looks off or the speedup never shows, this is the first thing to check. - Pushing thresholds too far. Every method's docs give you a range; past the aggressive end you get blur, ghosting, or temporal flicker - especially on video. Start conservative, then creep up.
- Mixing up the output pins.
samplergoes to KSampler's sampler input;modelgoes inline between loader and KSampler. They're not interchangeable, and a sampler method does not need a model hooked into this node at all. - Expecting magic on image models. These methods shine on video, where redundancy between steps is huge. On a 20-step SDXL render you might save seconds; on an 81-frame Wan clip you save minutes.
One honest caveat: this pack is new and genuinely obscure - essentially zero community chatter, so you're working from the README and the per-method docs (which are surprisingly thorough, each with tuning guides and the paper reference). That's fine for a tool this focused, but don't expect a fleet of YouTube tutorials to bail you out.
Inputs (57)
| Name | Type | Default | Description |
|---|---|---|---|
| sampler_method | COMBO | None | 5 options: None, AdaptiveDiff, EasyCache, SADA, ZEUS |
| model_method | COMBO | None | 7 options: None, TeaCache, MagCache, TaylorSeer, HiCache, SeaCache, +1 |
| sampler_nameopt | COMBO | 16 options: euler, heun, heunpp2, dpm_2, lms, dpm_fast, +10 | |
| modelopt | MODEL | — | |
| max_skip_stepsopt | INT | 40–10 | — |
| thresholdopt | FLOAT | 0.0100–1 | — |
| ec_thresholdopt | FLOAT | 0.0250–1 | — |
| ret_stepsopt | INT | 50–100 | — |
| lagrange_termopt | INT | 30–5 | — |
| lagrange_intopt | INT | 41–20 | — |
| lagrange_stepopt | INT | 205–100 | — |
| max_intervalopt | INT | 41–20 | — |
| acc_startopt | INT | 100–100 | — |
| acc_endopt | INT | 47-100–200 | — |
| teacache_model_typeopt | COMBO | wan2.1_t2v_1.3B_ret_mode | 16 options: flux, flux-kontext, ltxv, lumina_2, hunyuan_video, hidream_i1_full, +10 |
| rel_l1_threshopt | FLOAT | 0.400–10 | — |
| start_percentopt | FLOAT | 0.000–1 | — |
| end_percentopt | FLOAT | 1.000–1 | — |
| cache_deviceopt | COMBO | cuda | 2 options: cuda, cpu |
| magcache_model_typeopt | COMBO | wan2.1_t2v_1.3B | 12 options: flux, flux_kontext, chroma, qwen_image, hunyuan_video, hunyuan_video1.5, +6 |
| magcache_threshopt | FLOAT | 0.060–0.3 | — |
| retention_ratioopt | FLOAT | 0.200.1–0.3 | — |
| magcache_Kopt | INT | 20–6 | — |
| start_stepopt | INT | 00–100 | — |
| end_stepopt | INT | -1-100–100 | — |
| taylorseer_model_typeopt | COMBO | flux | 4 options: flux, hunyuan_video, wan2.1, hidream |
| max_orderopt | INT | 10–4 | — |
| fresh_thresholdopt | INT | 62–20 | — |
| first_enhanceopt | INT | 31–10 | — |
| hicache_model_typeopt | COMBO | flux | 4 options: flux, hunyuan_video, wan2.1, hidream |
| hicache_prediction_modeopt | COMBO | hicache | 2 options: hicache, taylor_scaled |
| hicache_max_orderopt | INT | 10–4 | — |
| hicache_fresh_thresholdopt | INT | 62–20 | — |
| hicache_first_enhanceopt | INT | 31–10 | — |
| hicache_scale_factoropt | FLOAT | 0.700.01–2 | — |
| seacache_model_typeopt | COMBO | flux | 3 options: flux, hunyuan_video, wan2.1 |
| seacache_threshopt | FLOAT | 0.300–2 | — |
| seacache_power_expopt | FLOAT | 2.01–5 | — |
| seacache_ret_stepsopt | INT | 10–10 | — |
| tcpade_model_typeopt | COMBO | wan2.1 | 2 options: flux, wan2.1 |
| tcpade_start_stepopt | INT | 40–100 | — |
| tcpade_end_stepopt | INT | -1-1–200 | — |
| tcpade_intervalopt | INT | 81–100 | — |
| tcpade_n_thresholdopt | FLOAT | 1.40–5 | — |
| tcpade_predictor_orderopt | INT | 31–4 | — |
| tcpade_history_sizeopt | INT | 63–12 | — |
| tcpade_cache_deviceopt | COMBO | cuda | 2 options: cuda, cpu |
| zeus_denominatoropt | INT | 32–6 | — |
| zeus_modularopt | STRING | 0,1 | — |
| zeus_acc_startopt | INT | 100–100 | — |
| zeus_acc_endopt | INT | 45-100–200 | — |
| zeus_interp_modeopt | COMBO | psi | 2 options: psi, x_0 |
| zeus_caching_modeopt | COMBO | reuse_interp | 3 options: reuse_interp, interp_all, reuse_all |
| zeus_max_intervalopt | INT | 41–20 | — |
| zeus_lagrange_termopt | INT | 30–5 | — |
| zeus_lagrange_intopt | INT | 61–20 | — |
| zeus_lagrange_stepopt | INT | 245–100 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |
| model | MODEL | — |