RunningHub MiniMax H3 Qwen3-VL Loader
The Qwen3-VL loader that powers every MiniMax H3 prompt
- h3_text_encoder
MiniMax H3 doesn't use a little CLIP text encoder. Its language brain is Qwen3-VL 32B - a vision-language model big enough to understand the whole multimodal prompt, which is how it can line up a picture reference, a video reference, a bit of dialogue, and a paragraph of direction into one generation. RHMiniMaxH3TextEncoderLoader is the node that loads that brain, as the INT8 ConvRot quantized weights (qwen3-vl-32b-int8_convrot.safetensors).
Why this is the only loader you need
This pack went through a few generations of loaders. The earlier FL2VA and Ref2VA variants each had their own text-encoder loader, and then the author noticed something: both partitions ship byte-identical text encoder weights. So this merged node dropped the partition knob entirely and became the single Qwen3-VL loader for everything - T2VA, FL2VA, Ref2VA, V2A, all of it. The old partition-specific loaders are still registered as legacy nodes so old workflows load, but new graphs should always use this one.
Inputs and output
One input that matters: text_encoder_path, defaulting to qwen3-vl-32b-int8_convrot.safetensors from the converted model bundle. The single output is h3_text_encoder - a typed handle that plugs into the h3_text_encoder input on RHMiniMaxH3VideoGen, RHMiniMaxH3RefGen, or the legacy text-encode nodes.
It's worth noting what "INT8" means here: a 32B model at full precision is not a fun thing to fit next to a video DiT. The INT8 ConvRot conversion is what makes running it in a ComfyUI process on a single GPU plausible at all, at a quality cost that's hard to see in the output.
Do you even need it?
Honest answer: for new workflows, mostly no. The generation nodes auto-load the text encoder when you leave h3_text_encoder empty. You'd wire this loader in explicitly when you want to share one loaded encoder across multiple generation nodes, pin a specific dtype, or mix weights - like an INT8 DiT with a raw bf16 text encoder, which the generation nodes specifically call out as a case that needs an explicit link.
Install
Same pack-wide routine - ComfyUI Manager (search "ComfyUI-RH-MiniMax-H3") or:
cd ComfyUI/custom_nodes
git clone https://github.com/RH-RunningHub/ComfyUI-RH-MiniMax-H3.git
pip install -r ComfyUI-RH-MiniMax-H3/requirements.txt
Restart, then the weights. The text encoder is part of the ~95 GiB INT8 ConvRot bundle in models/MiniMax-H3-INT8-CONVROT/:
cd /path/to/ComfyUI
hf download Gluttony10/MiniMax-H3-INT8-CONVROT --local-dir ./models/MiniMax-H3-INT8-CONVROT
Gotchas
The transformer stack is the fiddly bit: the pack pins transformers>=4.57.0 (plus accelerate, sentencepiece, einops) - older Transformers will refuse to load the Qwen3-VL architecture or silently misbehave. And if the loader errors with a missing-file message, it's almost always the bundle sitting in the wrong place; the path must be exactly models/MiniMax-H3-INT8-CONVROT/. One more thing that surprises people: Qwen3-VL 32B is a heavy resident, and it stays in VRAM between generations, so a big first encode can look like a hang.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text_encoder_path | COMBO | qwen3-vl-32b-int8_convrot.safetensors | 使用转换模型包中的 Qwen3-VL INT8 ConvRot 权重。 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| h3_text_encoder | MINIMAX_H3_TEXT_ENCODER | — |