MiniMax H3 Fast
The cheap way to find out whether H3's audio is real
- referenceImages
- frameImages
- referenceVideos
- video
Why this node exists, in one paragraph
MiniMax H3 is the 33B omni-modal video model that opened its weights in August 2026 - the first credible open-weight answer to the audio gap in video generation, since it generates stereo sound natively instead of bolting an audio pass onto a silent clip. It also landed at #1 in Video Editing (With Audio) on Artificial Analysis. Two things follow from that. First, if you're in the US, EU, UK or South Korea, the downloadable weights are not licensed to you - the community licence geofences those regions - so the hosted API is the legitimate route to the same model. Second, even where you are licensed, 33B of omni-modal video is not a casual local load. H3 Fast is the small, cheap tier: 480p, and it's the sane way to test whether H3's motion-plus-audio is worth your money before you commit to anything heavier.
What goes in
positivePrompt is the only required input, which makes it one of the friendlier video nodes in the pack.
The interesting optional inputs are the reference sockets, because H3 is built to take context rather than just a prompt:
referenceImagesandframeImagesare IMAGE sockets. Frame images are the image-to-video path; reference images are context to keep something consistent.referenceVideosis aRUNWARE_REFERENCEVIDEOSsocket, fed by the Runware Reference Videos builder in theRunware/Paramsmenu. That builder takes a video (a UUID or URL - max 15 seconds, and it wants a real minimum pixel count), atypeofreferenceorextend, and atagthat must start with@such as@video1. You then mention that tag in your prompt. It's an elegant mechanism once you see it, and completely opaque until you do.
Then the shape of the output: size offers only 480p options (plus "None (model default)"), defaulting to 480p (1:1). duration runs 4–15 seconds and the tooltip is explicit that frames = duration × the model's frame rate. seed is the usual uint32, numberResults gives you up to 4 variations per call.
Two escape hatches worth knowing. The safety group (safety.checkContent, safety.mode fast/full) turns on moderation, which per its tooltip increases total generation time. And advanced_json is the pack's raw-JSON merge - its tooltip names exactly what it's for here: inputs.referenceAudios. If H3 can take reference audio for this endpoint, that's the door, and the merging means your JSON wins on conflict.
Output is one video, in ComfyUI's native VIDEO type.
Install and keys
Manager route: search Runware, install, restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
That's runware-sdk>=1.6.5, pillow, soundfile - the pack contains no model weights, so there's nothing to download and nothing for your GPU to do. Then either paste your key into ComfyUI Settings → Runware API key, export RUNWARE_API_KEY, or run runware auth login once. Cost per run shows up on the node's title bar afterwards.
Where people get burned
You can't get 768p out of this node. That's not a bug - it's the tier. If you need more pixels, that's MiniMax H3 Max Turbo, same family, more money.
Duration is the bill. Video pricing scales with what you generate, so a 15-second 480p clip is a very different receipt from a 4-second one. Test at 4 seconds, then extend the prompt to the length you actually want.
The output may land as a file path, not a VIDEO link. The pack wraps the downloaded result as a native VIDEO only when your ComfyUI exposes the comfy_api video class; older builds hand back the path string. The clip is still sitting in your output folder as runware_<id>.mp4 - update ComfyUI, restart, re-queue.
"No Runware API key" means nothing is set in any of the three places. Check the Settings panel first; the env var overrides it, which occasionally confuses people who set both.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| referenceImagesopt | IMAGE | — | |
| frameImagesopt | IMAGE | — | |
| referenceVideosopt | RUNWARE_REFERENCEVIDEOS | — | |
| sizeopt | COMBO | 480p (1:1) | Output size. Only one of resolution or dimensions is sent. |
| seedopt | INT | 00–4294967295 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| durationopt | INT | 54–15 | Length of the generated video in seconds. The total number of frames produced is determined by duration multiplied by the model's frame rate (fps). |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. Increases total generation time. |
| safety.modeopt | COMBO | fast | Safety checking mode for video generation. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP4 | File format for the generated video. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
| advanced_jsonopt | STRING | Optional JSON merged into the request. For: inputs.referenceAudios |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |