arkennemasis fal · MiniMax H3 Max Turbo Image to Video · $0.025-0.08/s
Hand it one frame, get 15 seconds and a soundtrack
- target_audio
- image
- end_image
- video
- video_path
- timings
- expanded_prompt
- info
MiniMax H3 was the open-weight video release everyone lost their mind over in August 2026 - 33B, native audio, arena-topping. This node is not that. It is fal's hosted H3 Max Turbo, a post-trained variant tuned for prompt adherence and better aesthetics, running on fal's own inference stack. You bring a picture, you get a clip with sound. You never download 42 GB of weights, and you never have to think about the H3 community licence that excludes the US, EU, UK and South Korea from running the local weights.
That's the actual reason to reach for it. Local H3 exists, and if you're in a licensed territory with a big card, great. Everyone else is calling it, and this is the node that calls it.
What it does, mechanically
Like every fal node in this pack, it's a thin, opinionated wrapper. On Run it reads FAL_KEY from your install's .env, validates the inputs, estimates the cost and stops if it's over your max_cost_usd, uploads your pictures and audio to fal's CDN (free), then submits - that submit is the one billed call - polls while showing status, and downloads the result into output/fal/minimax_h3-max-turbo_image-to-video/. Nothing reaches fal until every free check has passed, so a missing key or a bad input costs you nothing.
A 1080P run on this node isn't a fresh 1080p generation: the tooltip says it's latent refinement from a native 768P source. You're paying 3x the 480p rate for an upscale pass over a 768p base.
The inputs a beginner actually sets
image is optional on the node, and that's the interesting part. Wire a picture and it's the first frame - the output canvas follows it. Leave it empty and the tooltip says the request is handled as text-to-video, 16:9 by default. That's also why there's no aspect_ratio widget here; the picture decides the shape. end_image is the optional last frame, and it works alone if you want to land on a specific still.
resolution (480P / 768P / 1080P, default 768P) and duration (5–15 seconds) are your money dials: the node bills per second of output, so a 15-second 1080p take is roughly twelve times a 5-second 480p one. prompt_expansion_mode is the one people miss - balanced spends about a second rewriting your prompt, quality can spend up to 30 seconds on a richer one, disabled skips it. Whatever it decides is returned on the expanded_prompt output, which is the fastest way to understand why you got the video you got.
target_audio deserves a sentence: H3 always generates a soundtrack and can't be asked for silence, so if you have a voice-over or a music bed you care about, pin it here (at least 2s, max 15MB) and it replaces the model's audio, padded with silence if it's shorter.
Then the housekeeping four: max_cost_usd (default $20, 0 disables), reuse_identical_run, extra_json for any fal field the node has no box for, and max_concurrent (default 1 = one paid fal call at a time across the whole run).
Outputs: video (a VIDEO, wire it into Save Video or the pack's video utilities), video_path, timings, expanded_prompt, and info - a JSON blob with the request id, the cost estimate, the saved files and fal's full answer. If you're logging runs, keep info.
Install
ComfyUI Manager → search arkennemasis, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx
Then put your fal key in the .env in the folder holding run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Restart ComfyUI. There is deliberately no key box on the node - a typed key would end up baked into every workflow JSON and every shared PNG.
Where people get burned
- No
FAL_KEYand the node tells you so and stops. It doesn't fail cryptically and it doesn't bill. - "I changed the seed and got the same video." That's
reuse_identical_rundefaulting to true: same settings plus the same input files means it hands back the files you already paid for, even after a restart. Turn it off when you want a genuinely new take. - A canvas full of fal nodes crawls.
max_concurrentdefaults to 1, so paid calls queue one after another. Raise it on the nodes you want side by side. Also worth knowing: once one fal node fails, the ones still waiting never start, so a failure can't quietly keep spending. - You restarted ComfyUI mid-wait. The job kept running on fal. Every submit is logged in
output/fal/_requests.jsonlwith its request id - grab it and use fal Recover Result (free) rather than paying for the same video twice. - The price badge is a rate, not your quote. The badge can't see your pictures, so it assumes a plain 1 MP image; the pre-run check measures what you actually connected.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt for video generation | |
| duration | INT | 55–15 | The duration of the video in seconds. |
| resolution | COMBO | 768P | The native generation resolution, or 1080P latent refinement from a native 768P source. |
| seed | INT | -1-1–2147483647 | Random seed. A random seed is selected when omitted. -1 leaves it to the model. |
| enable_safety_checker | BOOLEAN | true | If set to true, the safety checker will be enabled. |
| prompt_expansion_mode | STRING | balanced | How much effort to spend rewriting the prompt before generation. 'disabled' skips prompt expansion. 'balanced' returns in about a second. 'quality' spends up to ~30s on a richer prompt. |
| target_audioopt | AUDIO | Optional URL of an audio clip at least 2 seconds long (maximum 15 MB) to pin to the generated soundtrack. Longer clips are trimmed to the requested video duration, keeping the beginning. The original audio replaces the output soundtrack, padded with silence if shorter than the video, without changing playback speed. Exceptionally high sample rates may be resampled to 96 kHz. Accepts an HTTP(S) URL or a base64 data UR | |
| imageopt | IMAGE | Optional URL of the image to use as the first frame. When provided, the output canvas follows this image. If only end_image_url is provided, the canvas follows that last frame instead. If both images are omitted, the request is handled as text-to-video (16:9 by default). | |
| end_imageopt | IMAGE | Optional URL of the image to use as the last frame. It may be provided alone for end-only keyframe generation; in that case the output canvas follows this image. | |
| 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 (5)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| timings | STRING | — |
| expanded_prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |