Multishot Advance Multi Model Loader
The one node that loads the whole H3 stack — and the VRAM trap inside
- model
- video_vae
- audio_vae
- clip
MiniMax H3 isn't one model - it's a four-piece stack: a diffusion model, a CLIP/text encoder, a video VAE, and a separate audio VAE (H3 generates audio jointly with the picture, which is its whole thing). Normally you'd wire four loaders and try to remember which file goes where. This node collapses that into one clean panel, which is exactly what a multi-shot workflow wants since you're already dealing with enough moving parts.
It's the first node in basically every Multishot Advance workflow. Wire its model, clip, video_vae, and audio_vae outputs straight into the sampler.
How it works
The loader slots into ComfyUI's normal model folders - checkpoints, clip, and vae. Two model slots (model_1_name, model_2_name) let you keep, say, a ref2va and an fl2va checkpoint listed, and active_model picks which one actually loads. That bit matters: the inactive slot is not loaded at all, so keeping a second model in the dropdown costs you nothing until you switch.
clip_type defaults to minimax, which is the right setting for H3 and the thing to check if your CLIP misbehaves. The VAE dropdowns try to auto-pick the first minimax/h3/video and minimax/h3/audio match they find; if you see "(no VAE files found)", the VAE files aren't in your models/vae/ folder with names the loader recognizes.
GGUF users get treated specially. clip_name routes safetensors or GGUF automatically, GGUF encoders auto-pair their -mmproj vision sidecar, and mmproj_name lets you force a pairing manually. The auto pairing matches on filename inside the encoder's folder - rename either file or split them across folders and the match silently fails, which is why a manual override exists.
The setting that actually matters: activation_reserve_gb
This is the trap, so read it. H3's memory accounting is weird enough that ComfyUI's stock estimator can be badly wrong, and the pack ships an override:
-1(default) - stock ComfyUI estimator, no override. Safe, occasionally slow.0- AUTO mode. The pack sizes the reserve for your actual render shape, measures the real peak on the first run, and tightens itself per machine. This is the "set it and let it learn" option, and for most people it's the right one.- Any positive number - pins that many GiB by hand. The README and the tooltip agree on the warning: a manual value is resolution-specific, and the wrong number makes renders 5–10x slower, not a little slower. Don't hand-pin unless you've measured.
Start at -1, switch to 0 once you know the workflow runs. Only reach for a manual number if you're chasing a specific memory profile and you've watched the console.
Installing it
The node ships in the pack, but the models don't - the README is explicit that model files are not bundled. You need the MiniMax-H3 weights yourself, and here's the honest caveat from the model's community license: H3's Applicable Territory excludes the US, EU, UK, and South Korea, so if you're in those regions the local-weights path isn't licensed for you (the hosted Hailuo API is). Worth knowing before you spend an evening downloading 40+ GB.
cd ComfyUI/custom_nodes
git clone https://github.com/KursatAs/ComfyUI-H3-Multishot-Advance
For GGUF checkpoints or GGUF text encoders, also install ComfyUI-GGUF. The pack registers its H3 GGUF architecture hook at startup and includes apply_gguf_arch_patch.py as a fallback for installs where the import can't reach ComfyUI-GGUF - if a GGUF won't load, run that patch once. No pip requirements beyond what ComfyUI already ships.
Common issues
Missing VAE files and the wrong clip_type cover most loader failures. If a GGUF encoder loads but the model doesn't see the vision sidecar, check the filename-pairing rule before anything else. And if you've ever had a loader appear to hang - the console banner prints how many nodes loaded at startup, so a pack that fails to register one module (say, a missing optional dependency) tells you exactly which part didn't load while the rest still works.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model_1_name | COMBO | Model slot 1. Pick a MiniMax-H3 diffusion model. Only the slot chosen by active_model is loaded. | |
| model_2_name | COMBO | Model slot 2. Pick a MiniMax-H3 diffusion model. Only the slot chosen by active_model is loaded. | |
| model_3_name | COMBO | Model slot 3. Pick a MiniMax-H3 diffusion model. Only the slot chosen by active_model is loaded. | |
| video_vae_name | COMBO | (no VAE files found) | MiniMax-H3 video VAE. Defaults to the first minimax/h3/video VAE match when available. |
| audio_vae_name | COMBO | (no VAE files found) | MiniMax-H3 audio VAE. Defaults to the first minimax/h3/audio VAE match when available. |
| clip_name | COMBO | safetensors or GGUF - routed automatically. GGUF encoders auto-pair their -mmproj vision sidecar. | |
| clip_type | COMBO | minimax | CLIP loader architecture. MiniMax-H3 uses the minimax type. |
| mmproj_name | COMBO | (auto) | Vision sidecar for a GGUF encoder. '(auto)' uses ComfyUI-GGUF's pairing, which matches on FILENAME inside the encoder's own folder - rename either file, or split them across folders, and the match fails. If auto finds nothing and exactly one mmproj sits beside the encoder, that one is used anyway. Pick a file here to override entirely; then names and folders do not matter. |
| active_model | COMBO | model_1 | Choose which MiniMax-H3 model slot is loaded. The inactive slots are not loaded at all. |
| activation_reserve_gb | FLOAT | -1.0-1–128 | -1 (default; any negative value) = ComfyUI's stock memory estimator, with no H3 override. 0 = AUTO. With DynamicVRAM, AUTO applies a real post-load AIMDO VBAR weight cap, measures the first normal denoise step, then retunes that cap for the remaining steps of the same sample. It adds no render or sampler step and currently reads/writes no cache. Set a positive number only to pin the reserve by hand; that number is valid for one resolution/payload combination. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Loads the model selected by active_model only when this output is connected. |
| video_vae | VAE | Loads video_vae_name only when this output is connected. |
| audio_vae | VAE | Loads audio_vae_name only when this output is connected. |
| clip | CLIP | Loads clip_name/mmproj_name only when this output is connected. |