MiniMax H3 KSampler
MiniMax H3 KSampler — the engine, and the node where VRAM meets its match
- model
- positive
- negative
- latent
- teacache_args
- block_swap_args
- latent
- stats
Everything in this pack exists to feed this node. The KSampler is where H3's 33B DiT actually denoises the packed audio-video latent - steps, guidance, samplers, schedulers, and the optional TeaCache and BlockSwap accelerators all live here. It's the node that eats your VRAM, and it's the node where the community's biggest H3 complaint - "can my card run this?" - gets answered one way or the other.
How it works
Unlike a vanilla ComfyUI KSampler, this one runs a dual schedule: H3's flow-matching uses separate sigma shift values for the video stream and the audio stream (shift_video and shift_audio), because the audio latent is sampled in its own regime. The sampler is built on k-diffusion and ships 44 samplers and 10 schedulers - euler/normal being the sane defaults. The stats output is genuinely useful: it reports steps, swap hits/loads, peak VRAM in MiB, and the BlockSwap stage - so when you're tuning for your card, this node tells you the truth about what actually happened.
Two acceleration paths plug into the optional sockets: teacache_args (skip near-identical block runs between steps) and block_swap_args (offload DiT blocks to CPU/disk). Neither is required. For low-VRAM users, BlockSwap is the difference between "won't run" and "runs slowly" - the README explicitly says it's designed for low-VRAM use with a CPU home pool and optional disk prefetch.
The inputs that matter
model(required) -MINIMAX_H3_MODELfrom the streaming Loader (optionally LoRA-patched).positive(required) andnegative(optional) - from Conditioning. Atcfg = 1.0(default) negative guidance is off; raisecfgabove 1 and the negative socket becomes required.latent- listed as optional in the schema, but the README is clear: a missing latent raises a clear error. It's optional only so thenegativesocket can appear above it in the UI. Connect Conditioning's latent output. Always.steps- default 30.seed- default 0. Standard fare.sampler_name/scheduler_name- defaulteuler/normal. H3 is flow-based; these defaults are what the pack ships for it.shift_video(default 12) /shift_audio(default 3) - the dual-schedule shifts. The defaults are tuned for H3; drop them only if you're experimenting.use_adaln_cache- pre-bakes AdaLN modulations and skips those weights during sampling.dpm_adaptivestays on the eager path because its sigma schedule is model-adaptive.adaln_prebake_batch- how many AdaLN blocks get baked per GPU batch during prebake (default 3).
Outputs: latent (the MINIMAX_H3_LATENT, feeding Decode AV) and stats (a STRING you can read or pipe to a display node).
Installing it
Pack-wide routine - ComfyUI Manager search "MiniMax H3", or:
cd ComfyUI/custom_nodes
git clone https://github.com/xiaolibai-sys/ComfyUI-MiniMaxH3
pip install -r requirements.txt
then restart. No model downloads for the node itself - it consumes what the loaders feed it.
Common issues
- "latent input is required." You skipped the latent. Wire Conditioning's latent into it; that's the error the README promises.
- OOM. The real H3 experience. A plain bf16 DiT is ~42 GB; community VRAM math (the "3060 will run it?" threads) is exactly why BlockSwap and quantized weights exist. Quantize the checkpoint, wire in BlockSwap Args, lower resolution.
- Nothing about negatives happens.
cfgis 1.0. That's by design - H3 defaults to no negative guidance. - Slow but stable. That's BlockSwap working, not broken. Check the
statsoutput for peak VRAM and swap loads to see how hard it's thrashing; tuneblock_to_swapaccordingly.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MINIMAX_H3_MODEL | — | |
| positive | MINIMAX_H3_COND | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 301–200 | — |
| cfg | FLOAT | 1.01–30 | Classifier-free guidance scale. 1.0 disables negative guidance; values above 1.0 require a negative conditioning input. |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler_name | COMBO | normal | 10 options: flow_uniform, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 |
| shift_video | FLOAT | 12.001–100 | — |
| shift_audio | FLOAT | 3.001–100 | — |
| denoise | FLOAT | 1.000–1 | — |
| use_adaln_cache | BOOLEAN | false | Pre-bake AdaLN modulations and skip AdaLN weights during sampling. dpm_adaptive keeps the eager AdaLN path because its sigma schedule is model-adaptive. |
| adaln_prebake_batch | INT | 31–16 | Number of AdaLN blocks baked per GPU batch during prebake. |
| negativeopt | MINIMAX_H3_COND | — | |
| latentopt | MINIMAX_H3_LATENT | — | |
| teacache_argsopt | MINIMAX_H3_TEACACHE | — | |
| block_swap_argsopt | MINIMAX_H3_SWAP | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | MINIMAX_H3_LATENT | — |
| stats | STRING | — |