DARASK Anima Step Cache (Spectrum)
The ~1.5x speedup Anima users keep quiet about
- model
- MODEL
- info
Anima is a 2B model that somehow still takes over a minute on a 4060 - the community accepts this as the price of prompt adherence (see the Anima ecosystem guide). So the fastest real speedup most Anima users never configure is step caching: don't run the UNet every step, and predict the skipped steps from the ones you did run. That's exactly what this node does, and it's a port of the "Spectrum" algorithm from Forge Classic Neo and comfyui-spectrum-sdxl. Same math, no Forge required, drop it in your ComfyUI graph.
How it works
At its core it's a set_model_unet_function_wrapper that wraps UNet calls. It keeps a rolling buffer of the last K (timestep, output) pairs and, on the steps it decides to skip, extrapolates the next output by fitting a Chebyshev polynomial with ridge regression - blended with a plain Taylor (linear) extrapolation by default. window_size of 2 means one real model call every two steps, so you roughly halve the UNet work; the 30–50% speedup the README claims is in that ballpark.
The quality guard is the schedule. The first warmup_steps run for real (so the polynomial has data), and the last (1 − stop_caching_at) of the schedule runs for real too (so the final denoise is clean). total_steps only exists to place those cutoffs proportionally - it doesn't change your sampler's actual step count.
Inputs that matter
model- wire your MODEL through this, then out to the sampler.window_size(default 2) - how aggressively to skip. 2 is the sane starting point; cranking it costs visible quality.prediction_weight(default 0.25) - 0 is pure Taylor, 1 is pure polynomial. If you see artifacts, the fastest diagnostic is dropping this to 0.polynomial_degree(6) - higher captures more curvature, slower.warmup_steps(6) - keep it ≥ degree+1, so 7+ at the default degree, or the node falls back to Taylor and logs a warning.
Outputs: the patched MODEL and an info readout.
Install and pairing
Same DARASK pack install as the rest - Manager, search DARASK, restart. No models to download. The recommended chain from the README:
Loader → DARASK Anima Sampling Tuner (shift=5, TSR on)
→ DARASK Anima Step Cache (window=2, warmup=6)
→ KSampler
Gotchas
Two real ones. First, set_model_unet_function_wrapper is a single slot - this node won't coexist with another wrapper like TeaCache. Bypass one or the other. Second, the sandstorm checklist: if you get mosaic output, check the Sampling Tuner's shift_multiplier is 0 (auto) before blaming the cache, then try prediction_weight = 0. Bypass the cache entirely to confirm the node is even the problem - it's designed to be easy to A/B.
The one workflow detail that bites people: this node (and the tuner) throw a clear error if the model input is None, which happens when your Lora Loader upsteam silently passes through an unconnected model socket. Make sure the wire from your loader actually lands on the model input.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| total_steps | INT | 301–1000 | Total sampler steps — used only to schedule warmup/stop cutoffs proportionally. |
| prediction_weight | FLOAT | 0.250–1 | 0 = pure Taylor (linear) extrapolation. 0.25 = blend 25% Chebyshev polynomial (Forge Spectrum default). 1 = pure polynomial. |
| polynomial_degree | INT | 61–8 | Chebyshev poly order. Higher = captures more curvature, slower. |
| regularization | FLOAT | 0.500–5 | Ridge λ. Higher = smoother / more stable, less responsive. |
| window_size | INT | 21–10 | Run the real model on every Nth step. 2 → skip every other step. |
| flex_window | FLOAT | 0.000–2 | Window growth per real-model run — accelerates further into the schedule. |
| warmup_steps | INT | 60–50 | Run the model for real this many steps before caching kicks in. |
| stop_caching_at | FLOAT | 0.900–1 | Run real model for the last (1 − x) of the schedule for clean denoising. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| info | STRING | — |