arkennemasis fal · MiniMax H3 Max 3D to Video · $0.05-0.16/s
Turn a Blender grey-box into footage
- video
- reference_image_1
- reference_image_2
- reference_image_3
- reference_image_4
- reference_image_5
- reference_image_6
- video
- video_path
- info
What this is for
You already did the hard part: blocked out the scene in Blender, animated the camera, got the timing right. What you have is a grey render with cube people in it. This node takes that clip and shoots it for real.
The camera move, the object trajectories, the shot count and the timing all come from your video - H3 Max uses it as a layout guide. You're not prompting the model to invent a shot; you're telling it what the proxies mean and letting it dress the scene. The stock example in the tooltip is exactly the level of description that works: "The moving block represents a running person."
That's the pitch, and it's a genuinely different job from the rest of the H3 family. Most video nodes here either animate a still or generate from text. This one is a render pass.
How it works
Upload your Blender render (as a VIDEO), and the node sends it to fal's minimax/h3-max/3d-to-video endpoint along with your prompt. If you supply reference images, they're used directly as appearance references - no visual planning, no generated intermediates. If you don't, fal generates up to max_generated_reference_images (default 2) views of the scene itself to keep it consistent, at roughly $0.02–$0.04 each, and uncovered shots stay as they are in the video. Results land in output/fal/minimax_h3-max_3d-to-video/.
Your source video can be up to 15 seconds and 32 shots.
Inputs that matter
- video - the required socket. The Blender/previs clip. Duration is taken from this, so there's no duration widget to fight with.
- prompt - optional, and narrower than you'd expect: it clarifies what your proxies represent or how they move. Camera, trajectories, timing and object count stay defined by the video. Don't waste words re-describing the motion you already animated.
- reference_image_1 … reference_image_6 - environment, subject, interior or detail references, all optional, each socket accepting a batch sent in socket order. Supply these and you skip the auto-generated references entirely (and their cost).
- max_generated_reference_images - default 2, only used when you supply nothing. It's a cap, not a target: fewer get made if the views already cover the scene.
- resolution -
480P,768P(default) or1080P. This is billed per second of generated video: $0.05 / $0.08 / $0.16 per second, minimum 5 seconds.
Fal's own worked example is worth internalising: a 5-second 16:9 clip at 768P with your own reference images lands around $0.96. Let the platform generate its references instead and you add a few cents on top.
Money guards, as on every fal node in the pack: max_cost_usd (default $20, checked before anything uploads), reuse_identical_run (identical inputs return the paid result), extra_json, max_concurrent (default 1 paid fal call at a time across the run).
Outputs
video - the photoreal pass, into SaveVideo, PreviewVideo, or the pack's Video Assemble for cutting it into a sequence. video_path and info (request id, estimate, saved files, fal's raw answer) come along too.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install -r comfyui-arkennemasis/requirements.txt
Restart ComfyUI, then it's under arkennemasis/fal/Video/MiniMax. Key line in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Long previs in, big bill out. Duration comes from your video, so a 15-second Blender render at 1080P is 15 × $0.16 - about $2.40, plus any generated references. Trim in Blender before you upload; editing the source is free.
The shots don't get fixed for you. The tooltip is honest: shots not covered by references stay as they are in the video. If one part of your animatic looks wrong, adding a reference image is the lever.
Blocking is not negotiation. Everything the model needs to know about camera and timing it reads from your clip. A camera move you don't like is a Blender problem, not a prompt problem - and prompts do not override it.
Reference images beat prompt descriptions here. Where the plain H3 nodes reward long cinematic prompts, this endpoint rewards pictures of the thing. Bring them and you save the auto-generation fee and get a more consistent result at the same time.
Mind what you send. This is a hosted endpoint: your previs goes to fal. For commercial previs under NDA, that's a decision to make deliberately, not by default.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | Blender video, up to 15 seconds and 32 shots, at a public HTTPS URL. | |
| prompt | STRING | Optional clarification of what your proxies represent or how they move, for example: 'The moving block represents a running person.' Camera, trajectories, timing and object count remain defined by the video. Empty leaves it out. | |
| max_generated_reference_images | INT | 21–8 | Maximum NEW images to generate when no reference images are supplied. Ignored when reference images are supplied. Uses fewer when enough views are covered. Uncovered shots stay in the video. |
| resolution | COMBO | 768P | Output quality. Duration is taken automatically from the video. |
| reference_image_1opt | IMAGE | Optional environment, subject, interior or detail references. When supplied, uses these images directly without visual planning or generating new images; Scene Intent is optional. Without references, automatically creates appearance references within your new-image limit. Camera and movement always come from the video. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is numb | |
| reference_image_2opt | IMAGE | Optional environment, subject, interior or detail references. When supplied, uses these images directly without visual planning or generating new images; Scene Intent is optional. Without references, automatically creates appearance references within your new-image limit. Camera and movement always come from the video. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is numb | |
| reference_image_3opt | IMAGE | Optional environment, subject, interior or detail references. When supplied, uses these images directly without visual planning or generating new images; Scene Intent is optional. Without references, automatically creates appearance references within your new-image limit. Camera and movement always come from the video. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is numb | |
| reference_image_4opt | IMAGE | Optional environment, subject, interior or detail references. When supplied, uses these images directly without visual planning or generating new images; Scene Intent is optional. Without references, automatically creates appearance references within your new-image limit. Camera and movement always come from the video. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is numb | |
| reference_image_5opt | IMAGE | Optional environment, subject, interior or detail references. When supplied, uses these images directly without visual planning or generating new images; Scene Intent is optional. Without references, automatically creates appearance references within your new-image limit. Camera and movement always come from the video. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is numb | |
| reference_image_6opt | IMAGE | Optional environment, subject, interior or detail references. When supplied, uses these images directly without visual planning or generating new images; Scene Intent is optional. Without references, automatically creates appearance references within your new-image limit. Camera and movement always come from the video. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is numb | |
| 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. |