MiniMax H3 Text Encoder Loader
The Qwen3-VL-32B text encoder loader — the hidden 32B model inside every H3 prompt
- text_encoder
There's a 32-billion-parameter model hiding inside your H3 workflow, and it's not the DiT. MiniMax H3 conditions on text through a vendored Qwen3-VL-32B vision-language model - the thing that reads your prompt (and, in reference modes, actually looks at your images) and produces the hidden states the DiT consumes. This loader is how that encoder gets into your graph, and it's the one loader in the pack where the "streaming" discipline matters most, because a full fp16 Qwen3-VL-32B is a 60 GB-class weight file.
How it works
The pack ships the Qwen3-VL encoder config and tokenizer inside its own models/text_encoder/ directory - the "vendored encoder" the README mentions. The weights themselves come from ComfyUI's standard models/text_encoders/ folder, and they stream in the same lazy way as everything else here. The source is explicit that the H3 DiT wants the unnormalized layer-50 hidden states, which is why the encoder's final RMSNorm gets patched to identity unless you ask otherwise - this is the use_final_norm toggle, and it exists precisely because MiniMax's convention differs from what vanilla Qwen3-VL produces.
For VRAM, the weight file matters more than anything else. Plain fp16 is heavy; int8 and NVFP4 comfy_quant variants exist for this exact encoder, and the loader accepts them directly. Given the model being fed is a 33B DiT that already wants 20+ GB, most people run this encoder quantized - plain fp16 plus a big DiT is a recipe for OOM before you ever start sampling.
The inputs and outputs
model_name- dropdown of files inmodels/text_encoders/. Pick your Qwen3-VL-32B weights (plain, int8, or NVFP4).use_final_norm- defaultFalse, and leave it there.Falsegives the unnormalized layer-50 states that H3's DiT was trained on. Flip it only if you're deliberately comparing against vanilla Qwen3-VL behavior.group_size- default2, fine as-is. It's a streaming-read batching knob, not something you tune for quality.pin_memory(defaultTrue) anddisk_workers(default2) - the streaming pipeline's plumbing. The defaults are sane; droppin_memoryif you're tight on system RAM.
One output: text_encoder, a MINIMAX_H3_TEXT_ENCODER, which feeds straight into MiniMax H3 Conditioning. Conditioning is the only consumer, so this is a one-socket node: EncoderLoader → Conditioning.
Installing it
Pack install is identical to its siblings - ComfyUI Manager search "MiniMax H3", or clone + pip:
cd ComfyUI/custom_nodes
git clone https://github.com/xiaolibai-sys/ComfyUI-MiniMaxH3
pip install -r requirements.txt
then restart. The pack's own requirements are light (torch, safetensors, numpy); note that transformers>=4.46 is optional in the requirements and only used if you want the encoder to reuse a system tokenizer rather than its vendored one - for most people it's unnecessary.
The real download is the encoder weights: into ComfyUI/models/text_encoders/, before ComfyUI starts. And the H3 Community License still applies - the model is geofenced out of the US, EU, UK and South Korea, so check your territory before pulling multi-gigabyte files.
Where people get burned
- OOM at first Conditioning run. The encoder streams, but a full fp16 file still needs real VRAM to encode. Reach for an int8/NVFP4 quant first if your card is mid-range.
- Empty dropdown.
models/text_encoders/is scanned at startup; drop the file in and refresh before hunting for a node bug. - Tempting
use_final_norm. Don't. The defaultFalseis the H3 convention; the tooltip is telling you the truth, not a suggestion.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | Qwen3-VL-32B weights (plain, int8 or NVFP4 comfy_quant) | |
| use_final_norm | BOOLEAN | false | False = unnormalized layer-50 hidden states (H3 convention) |
| group_size | INT | 21–8 | — |
| pin_memory | BOOLEAN | true | — |
| disk_workers | INT | 21–8 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text_encoder | MINIMAX_H3_TEXT_ENCODER | — |