arkennemasis fal · MiniMax Hailuo 02 Standard Image to Video · $0.017-0.045/s
768p or 512p, and you choose the price too
- image
- end_image
- video
- video_path
- info
This is the middle of the Hailuo ladder, and it's the one most people should actually use. Feed it a picture, pick a resolution and a duration, and you get a clip: 768p at roughly $0.045 a second (a 6-second shot is about 27 cents) or 512p at roughly $0.017 a second (about 10 cents). Fast tier caps at 512p; Pro tier is 1080p for a flat 48 cents. Standard gives you both ends and everything in between.
It's also the node where the two useful Hailuo extras live side by side: a duration choice and an optional end frame. And since Hailuo is a closed hosted model with no weights anywhere, the endpoint is the only way in - the local-vs-API argument doesn't apply, only the price-per-quality one.
Inputs
- image - the first frame. Standard-tier image-to-video is compositionally honest: the output tracks your picture, which is why a clean, unambiguous start frame matters more than the prompt.
- prompt - required. Motion and camera direction.
- resolution -
768P(default) or512P. This is the price dial, roughly 4.5 cents per second against 1.7. - duration -
6or10seconds, default6. Note that 10-second clips aren't supported at 1080p; on this endpoint both options are fine, but the constraint is worth remembering when you jump to Pro. - end_image - optional, and the interesting one: supply a last frame and the model has to interpolate toward it. Two-frame control is the cheapest reliability upgrade available in AI video.
- prompt_optimizer - default
true. The model rewrites your prompt. Turn it off when you need your exact words. - Plus max_cost_usd, reuse_identical_run, extra_json, max_concurrent.
What it costs
Billed per second of generated video, at the rate your resolution picks. The pack builds both its live price badge and its pre-run estimate from the same rule, and the estimate uses the duration box, so a 10-second 768p shot shows up as about 45 cents before you commit. max_cost_usd (default $20) blocks the run before the upload if the estimate exceeds it; at these numbers it only fires when something upstream is wrong, which is a good guard.
reuse_identical_run (default on) matters more in video than in stills - repeating a graph while tuning a downstream node gives you back the clip already paid for, rather than re-buying it. Turn it off deliberately for a fresh generation from the same settings. max_concurrent (default 1) keeps paid fal calls sequential across the whole run; that's the setting that keeps a 20-clip batch under fal's rate limits.
Outputs
video - ComfyUI's VIDEO type, into a save node or downstream tooling - video_path as a string, and info, the JSON with the request id, the cost estimate, the saved files and fal's full answer. Files land in output/fal/fal-ai_minimax_hailuo-02_standard_image-to-video/.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Or install comfyui-arkennemasis from ComfyUI Manager. Restart, then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env file next to run_nvidia_gpu.bat. No models, no dependencies, no key widget on the node - the key lives in that one file, which is why it can't end up inside a workflow you hand to somebody.
Practical wisdom
Test at 512p, deliver at 768p. The motion is largely the same at both, and the price difference is nearly threefold, so the efficient loop is: 512p, six seconds, iterate the prompt and the start frame, then re-run the winner at 768p. And note that changing the resolution is changing the inputs, so reuse_identical_run won't quietly hand you the cheaper clip back when you upgrade it.
If clips look mushy, check that your start frame isn't smaller than the output you asked for - and that it isn't a busy composition the model has to reinterpret. If results feel like they drifted from your text, try prompt_optimizer off. If a job fails, the fal nodes still queued in that run don't start, Cancel cancels on fal, and the free Recover Result node recovers a finished job by id if ComfyUI restarts mid-wait.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image | IMAGE | — | |
| duration | COMBO | 6 | The duration of the video in seconds. 10 seconds videos are not supported for 1080p resolution. |
| prompt_optimizer | BOOLEAN | true | Whether to use the model's prompt optimizer |
| resolution | COMBO | 768P | The resolution of the generated video. |
| 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. |