Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · MiniMax Hailuo 2.3 Pro Image to Video · $0.49/video
ComfyUI Node

arkennemasis fal · MiniMax Hailuo 2.3 Pro Image to Video · $0.49/video

$0.49 a Shot, and It's a Hammer, Not a Chisel

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · MiniMax Hailuo 2.3 Pro Image to Video · $0.49/video
  • image
  • video
  • video_path
  • info
◄prompt►
◄prompt_optimizertrue►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

The top of the Hailuo 2.3 ladder in this pack: 1080p image-to-video at $0.49 per video flat. Fifty cents a shot adds up fast, so the real question isn't whether it's good - it's when paying double the Fast Standard price is the right call.

Where it sits

MiniMax's Hailuo is the closed video service from the Shanghai lab behind it, and closed is the operative word: nothing to download, no local path, which is precisely why an API-wrapper node like this one earns its place in a graph. The pack sibling you'll compare against constantly is the Fast Standard node at $0.19 for 6 seconds of 768p. Pro here is 1080p, doesn't offer a duration choice, and doesn't come with a "fast" discount.

My honest take: iterate on Fast, ship on Pro. If you're rendering a hero shot - the one the client will actually look at, or the frame you'll crop for a thumbnail - the extra 30 cents buys real detail. If you're cutting fifteen b-roll clips, you're burning seven dollars on shots nobody pauses on.

How it works

The node is a thin, well-behaved HTTP client over fal's minimax/hailuo-2.3/pro/image-to-video endpoint. It reads FAL_KEY from the .env beside your launcher, validates inputs, estimates the cost against max_cost_usd, uploads your first frame to fal's CDN at no charge, submits the one billed request, polls it with a status label on the node, then downloads the file to output/fal/fal-ai_minimax_hailuo-2.3_pro_image-to-video/. Long jobs poll indefinitely and run off the UI thread, so ComfyUI stays responsive and Cancel works - and Cancel really does cancel on fal, which matters when the meter is running.

Inputs

Three required, which is the whole surface fal exposes:

  • image - the first frame, and effectively the art direction. One image, not a batch; the node explicitly checks for a batch where a single picture is expected.
  • prompt - 2000-character ceiling. Write motion and camera. The model already has the composition; what it needs from you is what happens next.
  • prompt_optimizer (default on) - the model's own prompt rewriter. It's a decent crutch for short prompts and an annoying variable when you've tuned exact wording, so turn it off once you're chasing a specific result.

The optional controls: max_cost_usd ($20 default; the node stops before uploading anything when the estimate is over it, and 0 removes the cap), max_concurrent (1 by default - one paid fal call at a time across the run, up to 32 if you want parallelism), reuse_identical_run (identical settings and the same picture returns the file you already paid for instead of billing again, even after a restart), and extra_json for a fal field this node has no box for, like {"seed": 7}.

Outputs: video (a ComfyUI VIDEO, ready for Video Save or Video Assemble), video_path (the file on disk), info (JSON with request id, cost estimate, saved files and fal's full answer). Silent footage - no audio track.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx

Or add it through ComfyUI Manager with Install via Git URL. Then, in the folder holding run_nvidia_gpu.bat:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

No key box on the node by design - a pasted key ends up baked into workflow JSON and screenshots. Restart ComfyUI and it's under arkennemasis/fal/Video/MiniMax.

The traps

Nobody's FAL_KEY is found on the first try; it lives in the .env beside the launcher (or in the ComfyUI folder), not inside the custom node. Then there's the reuse gotcha: same prompt, same image, and you get the old file back looking like a no-op. That's reuse_identical_run doing its job - flip it off for a fresh take.

And the expensive one: restarting ComfyUI mid-render. fal keeps working, you keep paying, and nothing shows up in your output folder. Every submit is logged in output/fal/_requests.jsonl; paste that id into fal Recover Result (free) and you'll get the clip without paying a second time. Worth knowing before you spend $0.49 discovering it.

Categoryarkennemasis/fal/Video/MiniMax

Inputs (7)

NameTypeDefaultDescription
promptSTRINGText prompt for video generation
prompt_optimizerBOOLEANtrueWhether to use the model's prompt optimizer
imageIMAGEURL of the image to use as the first frame
max_cost_usdoptFLOAT20.00–100000Safety 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_runoptBOOLEANtrueIf 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_jsonoptSTRINGAdvanced: 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_concurrentoptINT11–32How 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)

NameTypeDescription
videoVIDEO—
video_pathSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.