MiniMax H3 RefDelta Stability Sampler
The one RefDelta node you'll actually use (and the shimmer it kills)
- sampler
The short version
If you run MiniMax-H3 locally with the pruned, "RefDelta-fused" rank-1024 checkpoint (FL2VA plus a rank-1024 approximation of the Ref2VA parameter delta), this is the sampler the pack's author says to actually use. It's a custom ER-SDE sampler - same stochastic family as Anima's er_sde - with a spatiotemporal stability controller layered on top. The name is honest: "stability" is exactly what it's for.
It's a ComfyUI node, not an API. No key, no cloud call, nothing to pay for. It swaps in where you'd normally drop Euler or DPM++ and just runs the H3 model you already loaded.
Why this sampler exists
The fused checkpoint is a weird beast. Conceptually it's FL2VA plus a rank-1024 approximation of the "reference delta" (the weight difference between FL2VA and genuine Ref2VA), with some exact vector/bias pieces mixed in. That mix - exact tensors next to heavily compressed matrices, plus INT8 ConvRot effects in the production release - makes trajectories jittery. The classic symptom is fine background detail shimmering in video, and the stock samplers don't know how to handle it.
How it works
Under the hood it's ER-SDE (the stochastic differential equation sampler from ComfyUI), wrapped in a controller that watches where the video is actually unstable. It builds a latent-space stability map - a [B,1,T,H,W] tensor derived from channel-RMS motion between neighboring latent frames and the change from the previous actual denoised prediction - then applies a gentler stochastic policy in static regions and the full dynamic policy in moving or uncertain ones.
Two details are worth knowing because they're easy to trip on:
- It never decodes pixels, runs optical flow, or adds model evaluations. No extra NFE, so the cost is basically free.
- It keeps two histories: solver history (everything returned to ER-SDE, including Spectrum forecasts) and evidence history (actual model evaluations only). Forecasts can't pollute the controller's own future adjustments. If you use the ComfyUI-Spectrum-MiniMax-H3 pack (v0.2.20+), this interop is the reason the two play nicely.
The inputs that matter
Production defaults are baked into the node, and the author validated them against the rank-1024 INT8 ConvRot checkpoint. You can edit everything, but here's what you'd actually touch:
stochastic_adaptation_strength(0.50) - how strongly the dynamic regions adapt. This is the master knob.minimum_stochastic_multiplier(0.50) - a global floor on the stochastic multiplier. Raise it carefully; the README's whole point is that a global floor causes its own jitter, which is why the next knob exists.static_video_stochastic_adaptation_strength(0.25) - a separate target for static regions. If your background shimmers, tune this before touching the floor.trajectory_correction(true) withvideo_correction_strength(0.15) /audio_correction_strength(0.05) - bounded correction of the denoising trajectory. Audio has its own scalar policy, independent of the video map.endpoint_fidelity_fraction(0.15) - fades the adapted gate back toward native multiplier 1 near the end of sampling, so the last steps behave like stock.s_noiseandmax_stage- the ER-SDE noise level and max adaptive stage, from the base sampler.debug_telemetryanddebug_stability_maps- leave off unless you're tuning. When on, scalar telemetry goes toComfyUI/output/refdelta_telemetry/and compressed NPZ maps to the same area.
Output is a single SAMPLER - drop it into the sampler socket of a KSampler or SamplerCustomAdvanced, same as any sampler node.
How to install
cd ComfyUI/custom_nodes
git clone https://github.com/xmarre/ComfyUI-MiniMax-H3-RefDelta-Solver.git
Then restart ComfyUI. ComfyUI Manager can also install it if you search "MiniMax H3 RefDelta Solver". There are no pip dependencies - the pack's own pyproject.toml lists none - so the only real install step is getting the model: the fused checkpoint lives on HuggingFace as xmarre/MiniMax-H3-Pruned-Ref-Delta-Fused-r1024-ComfyUI, and it's a full H3 model download, not a LoRA. The pack itself is GPL-3.0, derived from GPL ComfyUI sampling code, which only matters if you plan to fork it.
Common issues
- Wrong checkpoint, wrong defaults. These settings are tuned for the rank-1024 INT8 ConvRot fused model specifically. Point it at stock FL2VA or a different merge and the defaults are unvalidated - you're on your own.
- The H3 license. The base MiniMax-H3 weights are geofenced out of the US, EU, UK and South Korea by the MiniMax H3 Community License. If you're in one of those territories, check whether you're licensed to run the local weights at all before downloading anything.
- Don't use the pack's old scheduler. The production recommendation is ComfyUI
BasicSchedulerwithscheduler = betaplus the normal MiniMax-H3ModelSamplingAVpath. The bundled RefDelta scheduler node is research-only now.
Tuning order when the shimmer won't die: keep the strength, floor and static target as separate knobs; inspect telemetry before widening thresholds; if the stability map finds the right regions but restoration is too weak, raise the static target rather than the global floor; if motion changes too much, tighten with thresholds or gamma.
Inputs (31)
| Name | Type | Default | Description |
|---|---|---|---|
| adaptive_order | BOOLEAN | true | — |
| risk_sensitivity | FLOAT | 1.000–4 | — |
| stochastic_adaptation_strength | FLOAT | 0.500–1 | — |
| minimum_stochastic_multiplier | FLOAT | 0.500–1 | — |
| trajectory_correction | BOOLEAN | true | — |
| video_correction_strength | FLOAT | 0.150–1 | — |
| audio_correction_strength | FLOAT | 0.050–1 | — |
| correction_bound | FLOAT | 0.500–2 | — |
| endpoint_fidelity_fraction | FLOAT | 0.150–0.5 | — |
| s_noise | FLOAT | 1.000–2 | — |
| max_stage | INT | 31–3 | — |
| debug_telemetry | BOOLEAN | false | — |
| telemetry_prefix | STRING | refdelta_trajectory | — |
| video_stochastic_strength_scale | FLOAT | 1.000–2 | — |
| audio_stochastic_strength_scale | FLOAT | 1.000–2 | — |
| static_video_stochastic_adaptation_strength | FLOAT | 0.250–1 | — |
| video_stability_restore_strength | FLOAT | 1.000–1 | — |
| video_stability_motion_low | FLOAT | 0.1500–2 | — |
| video_stability_motion_high | FLOAT | 0.6000–2 | — |
| video_stability_diffusion_low | FLOAT | 0.0500–2 | — |
| video_stability_diffusion_high | FLOAT | 0.5000–2 | — |
| video_stability_diffusion_weight | FLOAT | 0.200–1 | — |
| video_stability_normalization_floor | FLOAT | 0.100.001–1 | — |
| video_stability_gamma | FLOAT | 1.000.25–4 | — |
| video_stability_spatial_radius | INT | 20–8 | — |
| video_stability_temporal_radius | INT | 20–8 | — |
| video_stability_ema | FLOAT | 0.700–0.99 | — |
| video_stability_start_fraction | FLOAT | 0.100–1 | — |
| video_stability_full_fraction | FLOAT | 0.300–1 | — |
| stochastic_gate_slew_limit | FLOAT | 0.000–1 | — |
| debug_stability_maps | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |