Hailuo Pro Image to Video
The quality tier, and the end-frame socket you must fill
- image_url
- end_image_url
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
What it is
MiniMax's Hailuo 02 Pro image-to-video model - the quality tier of the closed Hailuo video service - as a node at KIE Next / Video / Hailuo. You give it a still, optionally a last frame, and a prompt describing the motion; it gives you a video.
Hailuo is one of the names people drop when they're comparing a local Wan or LTX render to a hosted one: same job, hours of VRAM tuning versus a credit and a wait. Our KB's MiniMax panel covers the lab itself - Shanghai, publicly traded since early 2026, Hailuo its flagship closed video product and H3 its first open-weights release. What matters for this node is narrower: Hailuo 02 Pro is the high-quality endpoint, and the same KIE catalog also carries Hailuo 2.3 and the standard/02 text-to-video variants as separate nodes, so you're choosing a model, not a setting.
How it works
The image_url (and end_image_url, if connected) are uploaded to KIE's upload endpoint as PNG, and the returned URLs go into the create-task payload with your prompt and the optimizer flag. The node polls until the task completes, downloads the MP4, and returns a native VIDEO. Nothing runs locally.
The first-frame/last-frame pattern is the interesting part of this node: connect one image and it's classic image-to-video. Connect two and you're interpolating a transition between them - which is how people get a controlled camera move or an A-to-B morph without describing every beat in text.
The inputs
- image_url (required) - the starting frame. KIE documents a 10MB cap and JPEG/PNG/WebP on the upload.
- end_image_url (required in this schema) - the last frame. KIE's own docs call this optional, but the node lists it as required. If a run refuses to queue, that's why: feed it an image, even the same one twice, and the graph validates.
- prompt (required) - up to 1500 characters. Shorter than the image models' limits on purpose; Hailuo responds well to concrete camera and motion language rather than adjective soup.
- prompt_optimizer - boolean, default
true. On, the model rewrites/expands your prompt internally before generating. This is a real fork in behaviour: with it on, weirdly terse prompts get rescued; with it off, what you typed is what you get. Turn it off when you've carefully crafted a prompt and don't want it reinterpreted. - nsfw_checker - default
false, and the tooltip is unusually candid: with it off, KIE's content filtering is disabled and results come back as the model produced them, with no guarantee anything gets filtered. It is not a guarantee of anything, and provider policy still applies. - timeout_seconds (1200) and callback_url (leave empty).
Outputs
video is the deliverable, as a ComfyUI VIDEO. url is the primary result URL; all_urls_json is every URL the task returned; task_id is the handle for anything downstream (extend, upscale, or a task lookup); raw_json is the provider response when you need to know why something failed; credits_consumed and credits_left report cost and remaining balance and are also printed on the node after a successful run.
Note that unlike the standard node, Pro exposes no resolution or duration controls - that's the tier's trade. You're buying a fixed, better render.
Install
Manager → KIE.ai Nodes Next, or:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
python -m pip install -r ComfyUI-KIE-Nodes-Next/requirements.txt
requests, Pillow, numpy, PyYAML. No model downloads, no VRAM requirement, but you do need a funded KIE.ai account. Restart ComfyUI, then paste your API key once at Settings → KIE.ai Nodes Next → Connection - verified before saving, masked afterwards, and KIE_API_KEY covers headless installs. The pack generates its nodes from KIE's docs index on first launch and re-syncs about daily.
Gotchas
- Both frames must be connected. The schema treats
end_image_urlas required even though the vendor calls it optional; a queue that refuses to start is almost always this. - Prompt text is capped at 1500 characters. Long cinematic bibles get truncated by the provider.
- Video credits are the expensive ones. Draft on the standard tier, finish on Pro.
- No key →
No KIE API key configured.One-time Settings fix. - Keep ComfyUI reasonably current - the pack's
VIDEOoutputs use ComfyUI's newercomfy_apifile helper and will tell you to update if it's absent.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Cinematic wide shot: A colossal starship drifts silently above the rings of Saturn, its metallic hull reflecting streaks of cosmic light. The camera pushes closer, revealing thousands of illuminated windows like a floating city. Smaller fighter crafts dart across the frame, leaving neon trails as they maneuver through the vastness of space. A sudden burst of thrusters scatters asteroid fragments in slow motion, glowing faintly as they collide and drift apart. | Text prompt describing the desired video animation (Max length: 1500 characters) |
| image_url | IMAGE | — | |
| end_image_url | IMAGE | — | |
| prompt_optimizeropt | BOOLEAN | true | Whether to use the model's prompt optimizer (Boolean value (true/false)) |
| nsfw_checkeropt | BOOLEAN | false | Defaults to false. You can set it to false based on your needs. If set to false, our content filtering will be disabled, and all results will be returned directly by the model itself. Note: There is no guarantee that everything can be filtered out; if you are not satisfied with the results, you will need to make your own arrangements. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |