FeiHou Easy H3 Setup
The whole generator, minus the media gallery bolted to its face
- h3_media
- h3_bundle
- production_shot
- refmods
- model
- second_sampling_model
- h3_context
Here's the honest version: FeiHou Easy H3 Setup is the pack's main generation node with everything except the media gallery. Same inputs, same three outputs - its source is literally a subclass that appends one socket to the parent's schema and calls the parent's generate. What you get in exchange is a node you can see around, and a gallery you can move wherever you like, because the media now arrives from a separate FeiHou Easy H3 Media node.
Why you'd pick the split version
The all-in-one node carries a fixed 3×3 image grid plus video and audio slots inside it. That's convenient until you build a two-pass workflow, at which point the gallery, the prompt optimizer, the sampling settings and the mode switches are all in one column and the graph you're debugging lives off-screen. Splitting them lets you run two Setup nodes - a 480P draft and a big-canvas finish - off the same loaded references. If you only ever run one setting, the all-in-one node is genuinely less clicking.
Inputs that matter
h3_media is the new one, and it's required: wire it from the Media node's h3_media output or the graph won't queue. Everything past it is the main node's schema, and five of those fields are where a beginner spends their time.
h3_bundle comes from FeiHou Easy H3 Loader (or the Model Adapter, if you're plugging in an external ComfyUI loading chain). mode picks between image and reference. In image mode only the first two image slots are live - one image is a first or last frame depending on keyframe_role, two images become first and last frames. In reference mode the full nine/three/three gallery is in play.
resolution and aspect_ratio set the canvas, with custom letting width/height take over (multiples of 32 anyway). ref_image_size controls the short edge used for reference images - match follows the canvas, the numeric options pin it to a band from 480 to 1088, which is the knob that keeps a stack of references from eating all your VRAM. seconds runs 0.2 to 30 at 24 FPS by default, and audio_duration_auto can instead take the duration from the first reference audio or the first reference video's trimmed range. reference_mention_mode is the small one: index gives you <Picture 1>-style tokens in the prompt, filename uses the file's name.
The advanced block, including the two switches people get wrong
With advanced off, the API and prompt-scheme widgets are neither shown nor executed. That's also true of force_offload and low_vram_streamed_attention - the backend ANDs each of them with advanced, so flipping them while advanced is off does nothing at all. Once it's on, force_offload reclaims unused cache after sampling and before VAE decode, and the streamed-attention switch chunks H3's QKV, attention, MLP/SwiGLU and output head. The author's note on that second one: don't also chain ModelAttentionBackend/comfy kitchen attention, because you'd be replacing DiT blocks on top of each other.
reference_text_only is the experimental one - keep the multimodal text encoding of your references but skip every reference VAE latent. Cheaper, and the tooltip is upfront that it changes fidelity and loses reference-audio waveform conditioning.
The prompt optimizer block is the pack's other notable feature: enable it, pick a provider (Zhipu, xFlow, Ollama, Alibaba Cloud, DeepSeek, or a custom OpenAI/Gemini/Ollama-compatible endpoint), pick a scene guide like r2va_enhanced, and the prompt is rewritten at queue time. Custom API domains must be whitelisted by hand in ComfyUI/user/default/ComfyUI-FeiHou-Easy-H3/allowed_api_hosts.json - bare domains only, created on first launch, and deliberately not editable from the settings UI, so a shared ComfyUI can't be talked into posting your key at an arbitrary host.
Outputs
model is the transformer for your first-pass sampler; second_sampling_model is the second-pass transformer, populated only if you enabled a custom second-pass model on the loader and connected that output - otherwise it's empty and your refine pass should reuse model. h3_context is the payload everything else consumes: feed it to FeiHou Easy H3 Dual Sample 1st or 1st Sample Enhancer for a two-pass run, or to FeiHou Easy H3 Output to unpack conditioning, latent, both VAEs and FPS.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/FX-FeiHou/ComfyUI-FeiHou-Easy-H3
# restart ComfyUI
Manager search "ComfyUI-FeiHou-Easy-H3" works too. No pip dependencies for these nodes - the only requirements file in the repo is for the separate face-refine node. You need a ComfyUI new enough to include the official MiniMax H3 nodes, plus the H3 stack: transformer, Qwen3-VL text encoder, video and audio VAE. Those weights are big (the full-precision release came in around 42.5GB, which is exactly why the pack's shipped workflows lean on int8/convrot and w4a8 quants) and the workflows also assume KJNodes and VideoHelperSuite.
Two gotchas worth repeating. Both halves of the split edition must be installed together - a h3_media socket with nothing that emits FEIHOU_H3_MEDIA is a dead end, and that socket doesn't exist on the all-in-one node at all. And when generation reports missing or ambiguous media, that's the reference pipeline refusing to run rather than quietly generating with fewer inputs. Finally, licensing: H3's weights sit under MiniMax's community licence, which carves the US, EU, UK and South Korea out of the grant. That's the model, not the pack, but it applies either way.
Inputs (70)
| Name | Type | Default | Description |
|---|---|---|---|
| h3_media | FEIHOU_H3_MEDIA | 接 FeiHou Easy H3 Media 节点。 | |
| 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 | — |
| audio_duration_auto | COMBO | off | 自动时长对齐:按所选参考视频/音频的时间截取时长生成;对齐视频时输出该视频的音频,对齐音频时输出该音频。关闭时保持原逻辑。 |
| 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 | 10 options: match, 480, 544, 640, 736, 768, +4 |
| 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 | 11 options: none, r2va_enhanced, refmod, 3d_animation_short, brand_promo, coop_game_intro, +5 |
| force_offload | BOOLEAN | false | — |
| low_vram_streamed_attention | BOOLEAN | false | — |
| reference_text_only | BOOLEAN | false | Reference conditioning only: keep multimodal text encoding but skip all reference VAE latents. Changes fidelity; reference audio waveform conditioning is lost. Does not change one-pass image/first-last-frame conditioning. |
| media_1opt | STRING | — | |
| media_type_1opt | STRING | — | |
| media_trim_1opt | STRING | — | |
| media_2opt | STRING | — | |
| media_type_2opt | STRING | — | |
| media_trim_2opt | STRING | — | |
| media_3opt | STRING | — | |
| media_type_3opt | STRING | — | |
| media_trim_3opt | STRING | — | |
| media_4opt | STRING | — | |
| media_type_4opt | STRING | — | |
| media_trim_4opt | STRING | — | |
| media_5opt | STRING | — | |
| media_type_5opt | STRING | — | |
| media_trim_5opt | STRING | — | |
| media_6opt | STRING | — | |
| media_type_6opt | STRING | — | |
| media_trim_6opt | STRING | — | |
| media_7opt | STRING | — | |
| media_type_7opt | STRING | — | |
| media_trim_7opt | STRING | — | |
| media_8opt | STRING | — | |
| media_type_8opt | STRING | — | |
| media_trim_8opt | STRING | — | |
| media_9opt | STRING | — | |
| media_type_9opt | STRING | — | |
| media_trim_9opt | STRING | — | |
| media_10opt | STRING | — | |
| media_type_10opt | STRING | — | |
| media_trim_10opt | STRING | — | |
| media_11opt | STRING | — | |
| media_type_11opt | STRING | — | |
| media_trim_11opt | STRING | — | |
| media_12opt | STRING | — | |
| media_type_12opt | STRING | — | |
| media_trim_12opt | STRING | — | |
| media_13opt | STRING | — | |
| media_type_13opt | STRING | — | |
| media_trim_13opt | STRING | — | |
| media_14opt | STRING | — | |
| media_type_14opt | STRING | — | |
| media_trim_14opt | STRING | — | |
| media_15opt | STRING | — | |
| media_type_15opt | STRING | — | |
| media_trim_15opt | STRING | — | |
| prompt_optimizer_appliedopt | BOOLEAN | false | — |
| second_sampling_output_connectedopt | BOOLEAN | false | — |
| production_shotopt | FEIHOU_H3_PRODUCTION_SHOT | — | |
| refmodsopt | H3_REF_MODS | Connect Load H3 RefMods.mods. Use reference mode. RefMods appear in @ and lead each reference type; ordinary media follow. 编号见 Output.reference_map。 |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| second_sampling_model | MODEL | — |
| h3_context | MINIMAX_H3_CONTEXT | — |