MiniMax Hailuo 2.3
Cloud video gen that isn't a local-VRAM nightmare
- frameImages
- video
MiniMax Hailuo is the Chinese video generation family that got famous for one thing: motion that actually looks physical. Water that flows, hair that moves, characters whose limbs don't melt into each other - Hailuo's whole reputation is "the model whose videos move well," and it's a closed model you cannot run locally. That's the entire reason this node exists. The Runware pack puts Hailuo 2.3 behind a node with the model's real parameters as widgets, runs it on Runware's machines, and hands you back a native VIDEO.
For the ComfyUI crowd this is a genuinely different proposition from local video gen. Local pipelines (Wan, LTX) want a big GPU, a pile of VRAM, and half an hour of tuning per clip. Hailuo 2.3 wants none of that from you - you prompt, wait, and get a finished MP4. The trade is that it's closed and metered: every run costs money, and the community's standing advice about Runware applies - it's fast and cheap, but you can get carried away and forget you're spending.
What you set
positivePrompt(optional here, but you want it) - describe motion and scene, not just subjects. "A cup of coffee on a rainy windowsill, steam rising, rain streaking the glass" beats "coffee."frameImages- the image-to-video input. Feed it a still and Hailuo animates it; this is the mode most people end up using, since it gives you control over the starting frame.width/height- default 1024 square.durationtoggle +duration_value- seconds; frames = duration × the model's fps. Off uses the model's default.providerSettings.minimax.promptOptimizer- automatic prompt rewriting. The tooltip is blunt: it affects reproducibility. Flip it off for seed-stable runs.safety.mode-none,fast, orfull. This is MiniMax's content-checking depth; if you're hitting unexplained refusals, check what it's set to.outputFormat- MP4 (default), WEBM, or MOV.outputQuality20-99.numberResults- 1-4 variations.
Output is video (VIDEO), which wires into the pack's video output handling (saved to your output folder as a file).
How it works
Every node in this pack is the same shape: build a request with the model AIR and taskType, send it over REST via the Runware SDK, and convert the returned media into a ComfyUI-native type. Video runs take longer than images - the model generates tens of frames in the cloud - so expect a real queue time, and the title bar shows the cost when it lands. Hailuo is unambiguously not open source (a fact the mods of r/StableDiffusion used to enforce, since it's a closed tool), so there's no local path; the API node is the path.
Installing
ComfyUI Manager → search Runware → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
No model downloads; dependencies are runware-sdk, pillow, soundfile. API key via Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Troubleshooting
Key first. If identical seeds produce different videos, promptOptimizer is rewriting your prompt - disable it. If output comes back as a path instead of a playable VIDEO, that's the pack's graceful degradation when the native video type isn't available; you'll still get the file. And watch the bill - video is the priciest thing in this pack per run.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| frameImagesopt | IMAGE | — | |
| positivePromptopt | STRING | Text prompt describing elements to include in the generated output. | |
| sizeopt | COMBO | 720p (16:9) | Output size. Only one of resolution or dimensions is sent. |
| durationopt | BOOLEAN | false | Enable to set duration. Off uses the model's default. |
| duration_valueopt | FLOAT | 0.00 | 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. |
| providerSettings.minimax.promptOptimizeropt | BOOLEAN | false | Enable automatic prompt optimization. Affects reproducibility. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| 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. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |