arkennemasis fal · MiniMax Video 01 Director Image to Video · $0.5/run
Your frame, MiniMax's camera move
- image
- video
- video_path
- info
Half the work in text-to-video is describing a picture you already know how to make. This node removes that half: you connect an image, it becomes the first frame, and your prompt is spent on what happens next and how the camera moves instead of on what's in the shot.
Why this is the one people actually use
The canonical ComfyUI hybrid workflow in the KB is closed-model frames plus an open model for motion - Nano Banana for the still, something local for the movement. This is the paid shortcut on the same idea: bring your own frame, buy the motion. If you already generate a hero image locally with full control over composition, likeness and style, then paying $0.50 to have it move with a specified camera is a clean division of labour. You're not describing the composition any more. You're animating a decision you already made.
Camera instructions
Same bracket syntax as the Director endpoint, same vocabulary, up to three combined per prompt:
Truck left/right, Pan left/right, Push in/Pull out, Pedestal up/down, Tilt up/down, Zoom in/out, Shake, Tracking shot, Static shot.
In image-to-video the brackets matter more, because your prose is now mostly redundant - the picture already says the person is in a kitchen. Put the motion in the sentence, the camera in the brackets:
She turns and smiles at the window, steam rising off the pan. [Push in]
If the model keeps ignoring the brackets, prompt_optimizer (on by default) is rewriting your prompt. Turn it off.
Inputs and outputs
image- the first frame. One image. Not a batch.prompt- what happens, plus optional camera brackets.prompt_optimizer- the model's own prompt rewriter.
Out comes video (ComfyUI VIDEO), video_path (STRING, in output/fal/fal-ai_minimax_video-01-director_image-to-video/), and info (JSON: request id, cost estimate, files, fal's answer).
The batch thing is worth stating plainly, because it's a common lost afternoon: the pack validates inputs before uploading, and a model that expects one picture will reject a batch rather than silently picking the first. If your LoadImage is feeding a batch, split it with an image-from-batch node first, or you'll get an error that looks like a network problem and isn't.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, or install via ComfyUI-Manager (search arkennemasis). The pack's requirements.txt is httpx alone, for its Codex nodes; the fal provider uses the standard library, so nothing heavy gets installed behind your back. Then put your key in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
No key box on the node, by design - a typed key would end up saved inside every workflow you share, and this whole category is the one place where a pack that phones home with a credential is doing exactly what it looks like it's doing.
Where people get burned
- You passed a batch. One image per call, enforced before anything is billed.
- The clip doesn't keep your aspect ratio expectations. You gave it a first frame; the output follows that frame's shape. Generate the still at the shape you want the clip in.
- No seed. There isn't one, so an identical rerun won't resample - with
reuse_identical_runon (the default) it returns the clip you already paid for. That's usually a feature. Turn it off when you're comparing prompts. - ComfyUI was restarted mid-run. The job kept going on fal and you were still charged.
fal Recover Resultpulls it down for free using the id inoutput/fal/_requests.jsonl.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt for video generation. Camera movement instructions can be added using square brackets (e.g. [Pan left] or [Zoom in]). You can use up to 3 combined movements per prompt. Supported movements: Truck left/right, Pan left/right, Push in/Pull out, Pedestal up/down, Tilt up/down, Zoom in/out, Shake, Tracking shot, Static shot. For example: [Truck left, Pan right, Zoom in]. For a more detailed guide, refer https: | |
| image | IMAGE | URL of the image to use as the first frame | |
| prompt_optimizer | BOOLEAN | true | Whether to use the model's prompt optimizer |
| 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. |