Spectrum Apply Anima
Anima Is Slow. This Node Skips Its Heavy Forwards Without Touching the Weights.
- model
- model
The complaint about Anima is always the same: 2B parameters, and still slower than the SDXL checkpoints it replaced. It wants 30–50 steps at a high per-step cost, so a 4060 sits there for over a minute. The usual fix is a distilled LoRA - and the usual follow-up is that the distilled path flattens the flexibility you switched to Anima for.
Spectrum Apply Anima attacks the same problem from the other end. No LoRA, no weight changes - it just stops running the whole transformer on some steps and forecasts what those steps would have produced.
What it's actually doing
Spectrum is the CVPR 2026 Adaptive Spectral Feature Forecasting method: a training-free speedup that runs the real denoiser on selected steps, caches the final hidden feature sitting just before the model's output head, fits an online Chebyshev polynomial + ridge regression over the timestep, and forecasts that feature on skipped steps - running only the output head (final_layer → unpatchify on Anima) on it.
That target is the whole trick. Anima's expensive part is the stack of transformer blocks; the cheap part is the head that turns the final feature into an image. Skip the blocks, keep the head, and you've cut most of the compute. The node installs an outer-sampling wrapper to count solver steps and a wrapper on Anima's own _forward to intercept the feature. The sigma schedule goes over as a normalized coordinate in [-1, 1] - the Chebyshev domain - so it adapts to your step count instead of assuming 50, and features are cached on CPU rather than in VRAM.
The inputs you'll actually touch
model in, model out - drop it between your Anima loader and the guider/sampler, same as any other model patch:
Anima Loader → Spectrum Apply Anima → CFGGuider → KSampler
- window_size - the aggressiveness dial. The code floors it and runs one real forward every n steps, so
2means roughly every other step is a forecast. Set it to1and skipping stops entirely. - flex_window - added to the window after each real forward past warmup, so the schedule gets braver as it goes. The default
0.75does this; set it to0and the window stays where you put it. - warmup_steps and tail_actual_steps - the first steps are always real (no history to fit yet) and the last few are forced real by default. That tail matters: forecast error shows up as soft microdetail, which is exactly what the tail is doing.
- blend_weight (
0.5) mixes the polynomial prediction with a linear extrapolation from the last two real features;1is pure spectral. - degree and ridge_lambda are the fit's order and regularisation - leave them. debug logs actual versus forecast step counts, enabled is a bypass switch so you can A/B without rewiring, and max_history caps how many past features stay in the fit.
Install
No dependencies, no model files - pyproject.toml lists dependencies = [] and it needs Python 3.10+. Search ComfyUI-Spectrum-Anima in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nif00/ComfyUI-Spectrum-Anima.git
Then restart ComfyUI. Nothing to download - it works with whatever native Anima checkpoint you already load.
Where it bites
Honest caveat first: this is a thin repo with one commit and no community track record, and the author has no footprint in the Anima discussion. The mechanism is the same one running in the better-known Spectrum ports, so if this one misbehaves you have alternatives.
"Could not locate the native ComfyUI Anima diffusion model." The node checks for Anima's own class before patching anything. Feed it a non-Anima loader and it refuses rather than guessing.
It silently does nothing. Spectrum only skips steps for a whitelist of single-evaluation samplers - er_sde, Euler, LCM, DDPM, DPM++ 2M and the 2M/3M SDE variants. Anything multi-evaluation falls back to full native inference, with a console warning rather than an error. It's matched on the sampler's function name, so custom samplers from other packs aren't recognised.
Short runs eat the gains. Warmup plus tail are real forwards. On an 8-step Turbo run with warmup_steps: 5 and tail_actual_steps: 3 there's nothing left to skip - the most common "it doesn't work" case, and not a bug.
Dull colours and softness. The community read on Spectrum-for-Anima is consistent: cranky settings cost you colour and detail, and the culprit is the widening window, not the method. Keep flex_window: 0, keep a real tail, start at window_size: 2, and compare the same seed before pushing further.
Stacking model patches. If you also run a node that patches Anima's blocks, both wrap the same forward and one wins. Reverse the order and re-test.
One last expectation-setter: forecasting state resets every run, so warmup steps are always real work.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| enabled | BOOLEAN | true | — |
| blend_weight | FLOAT | 0.500–1 | — |
| degree | INT | 41–16 | — |
| ridge_lambda | FLOAT | 0.100–10 | — |
| window_size | FLOAT | 2.001–16 | — |
| flex_window | FLOAT | 0.750–8 | — |
| warmup_steps | INT | 50–32 | — |
| tail_actual_steps | INT | 30–32 | — |
| max_history | INT | 328–512 | — |
| debug | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |