arkennemasis fal · MiniMax Hailuo 2.3 Standard Image to Video · $0.28-0.56/video
768p, and the 6-or-10-Second Dial
- image
- video
- video_path
- info
This is the full-quality 768p Hailuo 2.3 image-to-video node: $0.28 for a 6-second clip, $0.56 for 10 seconds. If you've seen the "$0.19" and "$0.33" numbers floating around other Hailuo nodes and wondered which one is the real one - they're all real, they're just different rungs.
Reading the ladder properly
Five Hailuo 2.3 nodes ship in comfyui-arkennemasis, and the pricing is not ordered the way you'd guess:
- Fast Standard - 768p, $0.19 (6s) / $0.32 (10s). The draft tier.
- Standard - 768p, $0.28 (6s) / $0.56 (10s). This node.
- Fast Pro - 1080p, $0.33 flat.
- Pro - 1080p, $0.49 flat.
So "Standard" costs more per 6-second clip than "Fast Standard" and, at ten seconds, more than a 1080p Fast Pro video. It's the non-fast 768p render: same resolution family as Fast, more compute behind it. Reach for it when Fast's motion looks slightly cheap and 1080p isn't necessary - a 768p cut that's then upscaled is a perfectly respectable pipeline. Reach for Pro when the resolution is the point.
How it works
Same fal machinery as every node in the pack: read FAL_KEY, validate inputs (including rejecting a batch where one picture is expected), estimate the cost against max_cost_usd, upload your frame to fal's CDN for free, submit one billed job, poll with a live status on the node, download into output/fal/fal-ai_minimax_hailuo-2.3_standard_image-to-video/. Hailuo is MiniMax's closed hosted line - the "no local option" case where an API node is genuinely the tool, not a shortcut.
Inputs worth setting
image- your first frame, and the single biggest lever on the result. One image, not a batch.prompt- ≤2000 characters. Motion, camera, and what changes. The composition is already decided by the frame, so repeating the scene description in text just wastes your character budget.duration-6or10. This is literally the price dial: doubling the length doubles the bill.prompt_optimizer(default on) - the model's internal prompt rewriter. Turn it off when your prompt is already exactly what you want said.
Optional: max_cost_usd (default $20; the run stops before anything is uploaded if the estimate is above it, 0 = no cap), max_concurrent (default 1 - one paid fal call at a time across the entire run, up to 32), reuse_identical_run (default on: same settings and the same picture returns the file you already paid for, even after a restart), extra_json (JSON merged into the request for any fal field with no box on the node).
Outputs: video - the real VIDEO type, so it plugs into Video Save, Video Assemble or the pack's Load Clips - plus video_path and info (request id, cost estimate, saved files, fal's answer). Silent clip; no audio track comes back.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx
Manager users: Install via Git URL → paste the repo URL. Either way, restart ComfyUI afterwards, then add your key:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env sitting next to run_nvidia_gpu.bat. The node shows up under arkennemasis/fal/Video/MiniMax.
Where it goes wrong
Nine times out of ten it's the key - or rather, the .env being somewhere other than the launcher's folder or the ComfyUI folder. The node reads it there and nowhere else, and there's no key widget to fix it from the canvas.
The rest is money discipline. At $0.56 for a 10-second clip, a "let's try a few" session on this node is the expensive kind of fun. Also remember that a 10-second prompt is not twice as easy as a 6-second one: a single action reads better than two, and if you're chasing two beats, render two shots and cut them - the pack's Video Assemble will join them. If a render disappears because ComfyUI restarted, it's still sitting finished on fal; the id is in output/fal/_requests.jsonl and fal Recover Result collects it for free.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt for video generation | |
| prompt_optimizer | BOOLEAN | true | Whether to use the model's prompt optimizer |
| duration | COMBO | 6 | The duration of the video in seconds. |
| image | IMAGE | URL of the image to use as the first frame | |
| 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. |