ComfyUI Node

MiniMax H3 Video (Soze)

Cloud Video Generation That Drops an MP4 Into Your Graph

By SozeInc·Created 2 years ago·Updated 8 days ago· 10
MiniMax H3 Video (Soze)
  • first_frame_image
  • last_frame_image
  • video
  • video_url
  • task_id
  • status
prompt
duration6
resolution2K
ratio16:9
poll_interval10
poll_timeout900

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, or adaptive. For image-to-video, adaptive matches 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.

CategoryMiniMax/VideoGeneration

Inputs (8)

NameTypeDefaultDescription
promptSTRINGText prompt (<= 7000 chars).
durationINT64–15Clip length in seconds (4-15).
resolutionCOMBO2K3 options: 2K, 1080P, 768P
ratioCOMBO16:9Use 'adaptive' for image-to-video to match the input frame.
first_frame_imageoptIMAGEOptional first frame (image-to-video). Sent as role=first_frame.
last_frame_imageoptIMAGEOptional last frame. Sent as role=last_frame.
poll_intervaloptINT101–60Seconds between status polls.
poll_timeoutoptINT90030–3600Max seconds to wait before giving up.

Outputs (4)

NameTypeDescription
videoVIDEO
video_urlSTRING
task_idSTRING
statusSTRING