arkennemasis fal · MiniMax Hailuo 02 Pro Image to Video · $0.48/video
1080p, fixed at $0.48 a clip, with an end-frame trick
- image
- end_image
- video
- video_path
- info
The Pro tier of MiniMax's Hailuo 02 in image-to-video form: 1080p, six seconds, $0.48 per video, flat. No duration box, no resolution box, no per-second arithmetic to do - the node's badge reads $0.48/video and that's what you pay, five times the Fast endpoint and nearly twice the 768p Standard one.
You reach for it when a shot is finished being an idea. The Fast node at 512p exists so you can throw motion tests away for a dime; this one exists so the one that works comes out at a resolution you can actually cut into. It's a closed hosted model, so there's no local alternative at any VRAM - Hailuo only runs as a service, which is precisely the case where an API node is the right tool rather than a compromise.
Inputs
- image - the first frame. The model animates from this picture; the prompt directs what happens rather than what's in frame.
- prompt - required.
- prompt_optimizer - default
true. The model rewrites your prompt before generating. Turn it off when you've tuned something precise and it keeps coming back as something else. - end_image - optional, and the sleeper feature. Give it both a start and an end frame and the model has to get from A to B, which is a much more controllable shot than "start here and improvise". First-and-last-frame interpolation is one of the few tricks that makes AI video feel directed rather than sampled.
- Plus the four shared widgets: max_cost_usd, reuse_identical_run, extra_json, max_concurrent.
Money and mechanics
The estimate is per run: $0.48, checked against max_cost_usd (default $20) before anything is uploaded. So a 10-shot sequence is $4.80, and forgetting reuse_identical_run in the middle of a batch is the difference between cheap iterations and paying twice for the same clip - the switch is on by default, and it returns results already sitting in output/fal/fal-ai_minimax_hailuo-02_pro_image-to-video/ for identical inputs, ComfyUI restarts included.
Under the hood it's the pack's standard fal sequence: inputs validated, cost estimated, the image uploaded to fal's CDN (free), one billed submit, polling with live status on the node, then the MP4 downloaded. The fal client in this pack is standard-library HTTP, so installing it doesn't touch your Python environment.
Outputs
video - ComfyUI's native VIDEO type, ready for a save node or anything else that takes video - plus video_path as a string, and info, the JSON with the request id, cost estimate, saved files and fal's full answer. There's no seed output; a video re-roll costs another 48 cents.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
or ComfyUI Manager → comfyui-arkennemasis. Restart, then one line in the .env beside run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Nothing else - no weights, no CUDA, no packages - and there's no key widget on the node, deliberately, so your credential never ends up inside a workflow file you share.
Practical notes
Start-frame quality dominates output quality here. Soft or noisy input becomes soft motion, and a picture with an ambiguous subject gives you a model that has to guess what's moving. If you're generating the start frame upstream, spend your effort there.
On prompt_optimizer: at Pro resolution the model's rewrite is often better than what you'd have written, so keep it on for the first pass and only switch it off if a specific phrasing matters.
And the failure handling, which is where this pack is better than most API wrappers: if any fal node in a run fails, the fal nodes still waiting don't start, so a broken batch doesn't keep billing. Cancel on the canvas cancels the request on fal. If ComfyUI restarts while a 48-cent job is in flight, the free Recover Result node collects it by id from output/fal/_requests.jsonl - which is the difference between a nuisance and a loss.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image | IMAGE | — | |
| prompt_optimizer | BOOLEAN | true | Whether to use the model's prompt optimizer |
| end_imageopt | IMAGE | Optional URL of the image to use as the last frame of the video | |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap. |
| reuse_identical_runopt | BOOLEAN | true | If these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings. |
| extra_jsonopt | STRING | Advanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally. | |
| max_concurrentopt | INT | 11–32 | How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |