Views
No views yet
-mmproj fileCLIPLoaderGGUF node.lm_head - and its vision tower ships separately as the -mmproj-F16.gguf
sidecar. Stock ComfyUI-GGUF only merges an mmproj when the encoder's
architecture is qwen2vl; Qwen3-VL reports qwen3vl, so the sidecar is never
merged at all, and the resulting missing vision tensors surface as a state_dict
mismatch. Its mmproj key map is also qwen2vl-era: wrong merger keys, and no
rules for H3's deepstack mergers or split QKV, so even forcing the merge would
not line up.-mmproj-F16.gguf in the same folder as the encoder and do not
rename either file: they are paired by filename stem..safetensors encoder work without any of this? Because a full
safetensors encoder (fp8, int8, NVFP4-AWQ, ...) is a complete, pre-shaped model
with its vision tower already inside. It needs no sidecar and no remapping.
That is a property of the container, not of the quantization - NVFP4 is not
doing anything special here.| File | Size | Use |
|---|---|---|
MiniMax-H3-encoder-Q4_K_M.gguf | 19.8 GB | Recommended. ~16.5 GB resident. |
MiniMax-H3-encoder-Q5_K_M.gguf | 23.2 GB | Higher precision, more VRAM. |
MiniMax-H3-encoder-mmproj-F16.gguf | 1.2 GB | Multimodal projector — REQUIRED for image input. |
ref2va) and image-to-video paths feed images into the
text encoder. Without mmproj, the encoder is text-only: reference images are
ignored and reference/I2V workflows will not behave correctly.CLIPLoaderGGUF (from ComfyUI-GGUF)
auto-pairs the mmproj sidecar by filename, so keep the names exactly as
downloaded and put the mmproj in the same folder as the encoder.ComfyUI/models/text_encoders/
├── MiniMax-H3-encoder-Q4_K_M.gguf
└── MiniMax-H3-encoder-mmproj-F16.ggufCLIPLoaderGGUF (ComfyUI-GGUF) — or H3ClipLoaderAny from
ComfyUI-H3-Multishot,
which accepts either .safetensors or .gguf and handles the mmproj pairing.minimax.| Component | Resident |
|---|---|
| Encoder (Q4_K_M) | ~16.5 GB |
| H3 DiT | ~25 GB |
loaded partially; 6423 MB usable, 5847 MB loaded, 19363 MB offloaded1import comfy.model_management as mm
2clip.patcher.model.to(mm.text_encoder_offload_device())
3mm.free_memory(mm.get_total_memory(mm.get_torch_device()) * 0.9, mm.get_torch_device())
4mm.soft_empty_cache()Q4_K_M / Q5_K_M here. The H3 DiT cannot use K-quants (its 2688-wide tensors
are not divisible by 256), which is why that repo ships Q4_0 / Q5_1 instead. If
you are mixing and matching, that difference is expected, not a packaging error.