MiniMax H3 Easy
Text, image, reference and first/last frame
- h3_bundle
- media
- media_1
- media_2
- media_3
- media_4
- media_5
- media_6
- media_7
- media_8
- media_9
- media_10
- media_11
- media_12
- media_13
- media_14
- media_15
- model
- h3_context
The one node that replaced a dozen
MiniMax H3 is the open-weight 33B video model that does text, image, video and audio in one context and spits out clips with native stereo audio. It's genuinely good - launch-day reaction was "unbelievably so" - but a full H3 ComfyUI graph is a sprawl of conditioning, keyframe, VAE and audio nodes. MiniMaxH3Easy is this pack's answer: it folds prompt editing, media ordering, resolution, duration, mode selection, conditioning and latent prep into a single node. Wire an H3 bundle in, pick a mode, and it hands back a ready-to-sample MODEL plus an h3_context that any ordinary graph can consume.
The sampler, LoRA, decode and save nodes deliberately stay outside. That's the smart part - nothing about this node forces you into a closed workflow, so you keep using your normal KSampler and video helpers.
How it actually works
The headline feature is the multi-link Media port. Instead of a fixed row of image/video/audio sockets, one visible port accepts as many links as you throw at it. Images, videos and standalone audio are numbered independently (each with its own wire color), and link order survives save/load. The frontend does the magic of turning that one port into hidden execution inputs, so the node never grows a wall of sockets.
The mode switch decides what media is legal:
- Image mode (
mode: image) is your text-to-video, I2V and first/last-frame path. No media = pure T2V. One image = first or last frame (pick withkeyframe_role). Two images = first/last frame. Max two images, no video or audio. Keyframes are centered-cropped to the generation canvas rather than stretched, which keeps subjects looking human. - Reference mode (
mode: reference) uses MiniMax's full-reference pipeline - up to 9 images, 3 videos, 3 audio clips, at least one image or video required. Type@in the prompt editor to reference a connected image/video/audio by index or filename; at runtime those become the<Picture N>/<Video N>/<Audio N>tags the model expects. A disconnected reference stays visible instead of silently vanishing, and won't block a run - cleaning it up is on you.
Frame counts are aligned to the model's valid 5 + 17n lengths, so seconds × fps is a target, not a promise, and tiny durations still floor at five frames. Width/height snap to multiples of 32. The prompt editor is also nicer than stock: # makes a dialogue block (serialized as <d>...</d>, kept in its original language), there's a raw-prompt view, and you can convert the prompt widget to an input and drive it from a plain STRING node - external text makes the editor read-only and disables optimization.
The inputs that matter
h3_bundle- feed it from MiniMax H3 Easy Loader (or the Model Adapter).mode-imagevsreference, covered above.prompt- the multiline editor with the@/#features.resolution+aspect_ratio- megapixel-style presets (480P is the default) across 1:1 to 21:9, plusCustomwith rawwidth/height.seconds- 0.2 to 30, stepped in tenths.advanced- off by default and it collapses the extras:fps(1–120, default 24),keyframe_role,ref_image_size, and the prompt-optimizer switches. Turn it on only when you need those.
Outputs
model(MODEL) - connect to a model-only LoRA, attention patch or your sampler's guider.h3_context(MINIMAX_H3_CONTEXT) - connect to MiniMax H3 Easy Output to get thepositive,latent, VAEs andfpsback as standard wires.
There's also a ✦ prompt-optimizer button in the editor: it rewrites your prompt via an OpenAI-compatible, OpenAI Responses or Gemini endpoint. Settings live in custom_nodes/ComfyUI-MiniMaxH3-Easy/prompt_optimizer.json - the key is stored in plain text there, so don't publish or package that file.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/nkxx188/ComfyUI-MiniMaxH3-Easy
or search "MiniMax H3 Easy" in ComfyUI Manager, then restart ComfyUI. The pack has no heavy Python deps beyond requests and psutil; the real install cost is models - Qwen3-VL text encoder, H3 video + audio VAEs, and one or both FL2VA/Ref2VA transformers (several GB to ~42 GB depending on quantization). Place them in the standard diffusion_models/, text_encoders/ and vae/ folders.
Where people get burned
Two things, and neither is this node's fault. First, the MiniMax H3 Community License excludes the US, EU, UK and South Korea - running the local weights there is unlicensed, outputs included. Check before you download 40 GB. Second, the weights are big and this is a brand-new pack (version 1.0.13, no community track record yet), so treat included workflows as starting points, not gospel. If a model file isn't showing in a dropdown, it's in the wrong folder - refresh or restart, then look again.
Inputs (49)
| 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 | 5.00.2–30 | — |
| advanced | BOOLEAN | false | — |
| fps | FLOAT | 241–120 | — |
| keyframe_role | COMBO | first | 2 options: first, last |
| ref_image_size | COMBO | 1k | 5 options: match, 1k, 1.5k, 2k, original |
| reference_mention_mode | COMBO | index | 2 options: filename, index |
| prompt_optimizer_settings | BOOLEAN | false | — |
| prompt_optimizer_scene_guide | COMBO | none | 9 options: none, 3d_animation_short, brand_promo, coop_game_intro, handdrawn_live, minimalist_product_ad, +3 |
| mediaopt | * | — | |
| prompt_optimizer_resourcesopt | STRING | — | |
| prompt_optimizer_markeropt | STRING | — | |
| prompt_optimizer_prompt_connectedopt | BOOLEAN | false | — |
| media_1opt | * | — | |
| media_type_1opt | STRING | — | |
| media_2opt | * | — | |
| media_type_2opt | STRING | — | |
| media_3opt | * | — | |
| media_type_3opt | STRING | — | |
| media_4opt | * | — | |
| media_type_4opt | STRING | — | |
| media_5opt | * | — | |
| media_type_5opt | STRING | — | |
| media_6opt | * | — | |
| media_type_6opt | STRING | — | |
| media_7opt | * | — | |
| media_type_7opt | STRING | — | |
| media_8opt | * | — | |
| media_type_8opt | STRING | — | |
| media_9opt | * | — | |
| media_type_9opt | STRING | — | |
| media_10opt | * | — | |
| media_type_10opt | STRING | — | |
| media_11opt | * | — | |
| media_type_11opt | STRING | — | |
| media_12opt | * | — | |
| media_type_12opt | STRING | — | |
| media_13opt | * | — | |
| media_type_13opt | STRING | — | |
| media_14opt | * | — | |
| media_type_14opt | STRING | — | |
| media_15opt | * | — | |
| media_type_15opt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| h3_context | MINIMAX_H3_CONTEXT | — |