ComfyUI-FeiHou-Easy-H3
MiniMax H3 with the whole reference gallery built in
- h3_bundle
- model
- second_sampling_model
- h3_context
This is the node the whole pack exists for. FeiHouEasyH3 is a MiniMax H3 generation node - video with native audio, or plain image work - where all the reference-media loading you'd normally wire up with separate Load Image, Load Video and Load Audio nodes is baked straight into the widget. Nine image slots in a fixed 3×3 gallery, three video slots, three audio slots, click-to-pick or drag-and-drop, inline previews, and everything persists in the workflow. If you've ever stared at a six-node reference-video stack and wished it were one box, this is that box.
First, the context: MiniMax H3 is the lab's open-weights 33B omni-modal video model - text, image, video and audio share one context, and audio is generated jointly with the picture instead of being bolted on. It's genuinely strong (launch-day "very, VERY good" was the community's general mood), but it's also a ~42.5 GB download and the H3 Community License geofences the weights out of the US, EU, UK and Korea. If you're in one of those places, running the local weights isn't licensed and this node isn't for you - the hosted Hailuo API is the only legal door. Everywhere else, read on.
How it works
The node takes a h3_bundle from the Loader (or the Remix Loader) and a mode. In image mode it drives the FL2VA transformer: prompt-to-image, or image-to-video where your gallery images become first/last keyframes. In reference mode it drives REF2VA and builds proper H3 reference conditioning - you mention <Picture 1>, <Video 2>, <Audio 1> in the prompt with an @ and the media resolves to that slot. Reference mode needs at least one image or video - audio alone won't cut it - and caps at 9 images, 3 videos, 3 audio, matching the official MiniMax H3 Reference to Video limits.
The advanced toggle is the gate to the interesting half of this node. Flip it and you get the prompt optimizer (send your raw prompt to a Zhipu / Ollama / DeepSeek / custom OpenAI-compatible API configured in ComfyUI Settings → 🐵Easy H3, and get back an expanded or reverse-engineered prompt) plus the VRAM surgery: force_offload drops unused cache after sampling and before VAE decode, and low_vram_streamed_attention runs complete streamed blocks (QKV, attention, MLP/SwiGLU, output head) for the small-VRAM crowd. Enable it and don't also chain ModelAttentionBackend / comfy kitchen attention - they fight.
The inputs that matter
mode-imagevsreference. This decides FL2VA or REF2VA, so it changes which model you load.resolution/aspect_ratio/width/height- presets from 360P to 1080P pluscustom, and eight aspect ratios; width/height step by 32.seconds(0.2–30) andfps(default 24) - duration and frame rate. Defaults are 10 s at 24 fps.ref_image_size- short-edge size for reference images, 480 to 1088.reference_mention_mode- whether@mentions resolve by filename or by gallery index.prompt_optimizer_enabled/prompt_optimizer_provider/prompt_optimizer_scene_guide- the API prompt-rewrite controls; only active whenadvancedis on, and the provider list comes from your Settings.keyframe_role- in image mode, whether a single gallery image acts as the first or last frame.
The media_1…media_15 and media_type_N inputs exist in the schema but are transport fields the embedded gallery fills in for you - you pick files in the node, not by wiring inputs.
The outputs
model feeds the KSampler. second_sampling_model is only populated when the loader has a second-sampling model configured and you've connected this output - it's for two-pass workflows. h3_context carries the conditioning, latent, both VAEs, fps and final prompt, and feeds the pack's Output node.
How to install it
cd ComfyUI/custom_nodes
git clone https://github.com/FX-FeiHou/ComfyUI-FeiHou-Easy-H3
restart ComfyUI, or just search "ComfyUI-FeiHou-Easy-H3" in ComfyUI Manager. No pip dependencies - the pack's pyproject.toml ships an empty dependencies list. You do need a ComfyUI build that already includes the official MiniMax H3 nodes, plus the models: H3 transformers in models/diffusion_models, the Qwen3-VL text encoder in models/text_encoders, and both VAEs in models/vae. The bundled workflows point at the author's Quark cloud drive for the model set.
Common issues
The big one is VRAM - a 33B omni-modal model is not a 4 GB-card afternoon. Expect to chase quantization (GGUF files show up automatically in the model dropdowns) and to actually use force_offload and the streamed-blocks experiment. If your saved workflow was made with an older plugin version and validation fails while the optimizer is off, update the pack - that exact bug was fixed in v1.3.1.
Inputs (50)
| Name | Type | Default | Description |
|---|---|---|---|
| h3_bundle | MINIMAX_H3_BUNDLE | — | |
| mode | COMBO | image | 2 options: image, reference |
| prompt | STRING | — | |
| resolution | COMBO | 480P | 12 options: 360P, 416P, 480P, 540P, 640P, 720P, +6 |
| aspect_ratio | COMBO | 16:9 | 8 options: 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, +2 |
| width | INT | 134432–16384 | — |
| height | INT | 76832–16384 | — |
| seconds | FLOAT | 10.00.2–30 | — |
| advanced | BOOLEAN | false | — |
| fps | FLOAT | 241–120 | — |
| keyframe_role | COMBO | first | 2 options: first, last |
| ref_image_size | COMBO | 480 | 9 options: 480, 544, 640, 736, 768, 832, +3 |
| reference_mention_mode | COMBO | index | 2 options: filename, index |
| prompt_optimizer_enabled | BOOLEAN | false | — |
| prompt_optimizer_provider | COMBO | 1 options: | |
| prompt_optimizer_scene_guide | COMBO | none | 10 options: none, r2va_enhanced, 3d_animation_short, brand_promo, coop_game_intro, handdrawn_live, +4 |
| force_offload | BOOLEAN | false | — |
| low_vram_streamed_attention | BOOLEAN | false | — |
| media_1opt | STRING | — | |
| media_type_1opt | STRING | — | |
| media_2opt | STRING | — | |
| media_type_2opt | STRING | — | |
| media_3opt | STRING | — | |
| media_type_3opt | STRING | — | |
| media_4opt | STRING | — | |
| media_type_4opt | STRING | — | |
| media_5opt | STRING | — | |
| media_type_5opt | STRING | — | |
| media_6opt | STRING | — | |
| media_type_6opt | STRING | — | |
| media_7opt | STRING | — | |
| media_type_7opt | STRING | — | |
| media_8opt | STRING | — | |
| media_type_8opt | STRING | — | |
| media_9opt | STRING | — | |
| media_type_9opt | STRING | — | |
| media_10opt | STRING | — | |
| media_type_10opt | STRING | — | |
| media_11opt | STRING | — | |
| media_type_11opt | STRING | — | |
| media_12opt | STRING | — | |
| media_type_12opt | STRING | — | |
| media_13opt | STRING | — | |
| media_type_13opt | STRING | — | |
| media_14opt | STRING | — | |
| media_type_14opt | STRING | — | |
| media_15opt | STRING | — | |
| media_type_15opt | STRING | — | |
| prompt_optimizer_appliedopt | BOOLEAN | false | — |
| second_sampling_output_connectedopt | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| second_sampling_model | MODEL | — |
| h3_context | MINIMAX_H3_CONTEXT | — |