MiniMax H3 Video (Soze)
Cloud Video Generation That Drops an MP4 Into Your Graph
- first_frame_image
- last_frame_image
- video
- video_url
- task_id
- status
Every so often you want a video clip and you do not want to babysit a local video diffusion model through a 20-minute, 16GB-VRAM denoising session. MiniMax H3 Video is the shortcut: it hands your prompt to MiniMax's hosted Hailuo H3 API, waits for the async task to finish, and drops the finished MP4 back into your graph as a VIDEO tensor. Text-to-video, or image-to-video with a first (and optionally last) frame.
The name is a little misleading in a good way - this node doesn't run anything locally, so it needs no GPU and no model download. What it needs is an API key and a credit balance. Set MINIMAX_API_KEY in your environment (or a .env in the repo root), and that's the whole setup. If you're on the China-hosted API, set MINIMAX_BASE_URL to point at the CN host instead of the default https://api.minimax.io.
How it works
Under the hood it's an async task API: the node POSTs to /v2/video_generation, gets back a task_id, then polls /v2/query/video_generation/{task_id} every poll_interval seconds (default 10) until the task finishes or poll_timeout (default 900s, i.e. 15 minutes) gives up. Then it downloads the result and hands you the video as a ComfyUI VIDEO, so downstream nodes like a preview or a save node just work. MiniMax returns HTTP 200 with a nonzero base_resp.status_code on logical errors, and the node unwraps that into a readable error in status.
The inputs that matter
prompt- your text, up to 7000 characters. This is the whole creative load.duration- 4 to 15 seconds, default 6. Longer clips cost more and take longer.resolution- 2K / 1080P / 768P. This is a cloud API, so 2K actually costs you credits; don't default-2K your way into a bigger bill than you meant.ratio- 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, oradaptive. For image-to-video,adaptivematches the input frame's aspect, which is what you want when your source isn't a standard ratio.first_frame_image/last_frame_image- optional IMAGE inputs for image-to-video. First frame is the classic start-animation; add last frame too and the model works toward a specific ending.
Outputs: video (the downloaded clip), video_url (where the API hosted it), task_id (so you can match a run to a billing entry), and status.
Gotchas
The big one is money: every run is a paid API call, and a re-run is another call. Mind your poll_timeout - if a task is still cooking at 900s it errors out even though the API may finish seconds later; the task keeps running server-side but you don't get the download. And because this is cloud inference, results aren't reproducible like a local sampler - same seed isn't a thing here, so treat each call as its own roll of the dice.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt
Then export MINIMAX_API_KEY. A blank prompt short-circuits with a clean skip rather than a wasted API call, which is a nice touch. Need consistency across shots? The companion MiniMax H3 Video Reference node sends up to nine reference images instead of a single first frame - that's the one to reach for when subject identity matters more than a fixed starting frame.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt (<= 7000 chars). | |
| duration | INT | 64–15 | Clip length in seconds (4-15). |
| resolution | COMBO | 2K | 3 options: 2K, 1080P, 768P |
| ratio | COMBO | 16:9 | Use 'adaptive' for image-to-video to match the input frame. |
| first_frame_imageopt | IMAGE | Optional first frame (image-to-video). Sent as role=first_frame. | |
| last_frame_imageopt | IMAGE | Optional last frame. Sent as role=last_frame. | |
| poll_intervalopt | INT | 101–60 | Seconds between status polls. |
| poll_timeoutopt | INT | 90030–3600 | Max seconds to wait before giving up. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| task_id | STRING | — |
| status | STRING | — |