arkennemasis fal · MiniMax H3 Text to Video · $0.05-0.16/s
The full-fat endpoint, 5 to 15 seconds at up to 4K
- target_audio
- video
- video_path
- expanded_prompt
- info
If the Turbo variant is the cheap seat, this is the good seat: fal's plain MiniMax H3 text-to-video endpoint, native 480P/768P generation with 2K and 4K refinement tiers, seven aspect ratios, 5 to 15 seconds with audio generated as part of the same pass.
It's the one to reach for when the prompt is doing all the work and there's no reference image to anchor it. Design a shot, describe it properly, get a clip. If you have a frame you want it to start from, use the image-to-video node instead - that one takes the picture and inherits its canvas.
Why anyone pays for this when H3's weights are open
Because the licence isn't. MiniMax published H3 under a community licence whose Applicable Territory excludes the EU, UK, Republic of Korea and the United States, so in those regions you are not licensed to run the local weights at all. On top of that it's a 33B model with no published consumer hardware floor and roughly 42 GB of weights. The hosted endpoint is the globally available path. For most people Googling this node, that's the whole story.
What the node does on Run
Standard for the pack's fal family: read FAL_KEY from the install .env, validate inputs, estimate cost and stop above max_cost_usd, submit, wait with status shown on the node, download into output/fal/minimax_h3_text-to-video/, show the clip, return it. Everything before the submit is free, so a missing key or a typo'd parameter costs you nothing but a red node.
The inputs that matter
prompt is where all the value is. H3 handles structured shot descriptions well - subject, action, camera, lighting, mood - and the model generates its own sound, so writing the scene (traffic, rain, a room tone) actually pays off in the output.
duration runs 5–15 seconds and bills linearly. resolution defaults to 2K, with 480P and 768P as native generation modes and 2K/4K refining a 768P base - the tooltip is explicit about that, so treat 4K as an expensive upscale, not new detail. Check max_cost_usd before a 15-second 4K experiment; the rate climbs to $0.16/s at the top tier.
aspect_ratio gives you seven shapes, 16:9 default. Portrait for social, 21:9 if you're feeling cinematic.
prompt_expansion_mode deserves your attention because it's invisible money and visible quality: balanced takes about a second to rewrite your prompt, quality can take up to 30 seconds for a richer rewrite, disabled sends your text untouched. The rewrite is returned on the expanded_prompt output. I'd leave it on balanced while iterating and try quality only on a shot that's already close.
target_audio pins a clip (2s minimum, 15MB) over the generated soundtrack - H3 cannot be asked for a silent video, so this is how you take control of the audio.
Rounding out the node: seed (-1 lets the model choose), enable_safety_checker, max_cost_usd, reuse_identical_run, extra_json, max_concurrent.
Outputs: video, video_path, expanded_prompt, info (request id, cost estimate, saved files, fal's full reply). No timings output on this one, so if you're logging elapsed time, you're reading it off the node badge.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx
Or ComfyUI Manager → search arkennemasis. Then, in the .env beside run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Restart ComfyUI. The pack reads the key from that file and nowhere else - which is also why there's no key widget on any of its nodes.
Traps, briefly
reuse_identical_runis on by default. Re-running identical settings returns the identical file for free - great after a restart, annoying when you wanted variance. Turn it off.max_concurrentis 1, so a graph with several fal nodes runs them one after another. Raise it deliberately, and know that a failure stops the queue rather than letting it keep spending.- Restarted mid-wait? The job survived on fal. Take the request id from
output/fal/_requests.jsonland use fal Recover Result - free. - The badge shows a rate for typical settings; the real cost check runs before anything is uploaded, and it measures what you actually connected.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt for video generation | |
| duration | INT | 55–15 | The duration of the video in seconds. |
| resolution | COMBO | 2K | The resolution of the generated video. 480P and 768P are native generation modes; 2K and 4K upscale a 768P base result. |
| 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. 'fast' returns in about a second. 'balanced' picks per request. 'quality' spends up to ~30s on a richer prompt. Empty leaves it out. |
| aspect_ratio | COMBO | 16:9 | The aspect ratio of the generated video. |
| 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 | |
| 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 (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| expanded_prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |