arkennemasis fal · MiniMax Video 01 Subject Reference · $0.5/run
One photo, the same face in every clip
- subject_reference_image
- video
- video_path
- info
Character consistency in video has always been the expensive part: train a LoRA, wire an IP-Adapter stack, hope the face survives motion. This node asks a different question - what if you just hand the model a photo of the person and let it keep them? One subject_reference_image, $0.50 a clip, no training, no dataset, no 3GB of adapter weights.
Where this fits in the wider picture
The KB's identity chapter ends with a verdict that surprised nobody who was paying attention: adapter-based identity (IP-Adapter, InstantID, PuLID) stopped being how people do character consistency for stills, and instruction-driven editing took the job - Flux Kontext, Qwen-Edit, and their closed equivalents. Video lagged behind that shift, because you can't instruction-edit a shot you haven't generated. Subject Reference is the hosted answer to the lag: identity as a model input, not as a pipeline you maintain.
Cost it out against the training route. Ten shots of the same character at half a dollar is five dollars. That's less than most people spend on the electricity and iterations for a character LoRA, and it works from a single photo. The training route still wins if you need the character in thousands of shots, in a specific finetuned art style - but for "I need this person in six clips this afternoon," paying per shot is the rational move.
How it works, and what you control
It's the same fal pipeline as every node in this pack: key from .env, inputs validated locally, cost estimated, and a hard stop before upload if the estimate is over max_cost_usd (default $20). Then one submit, a poll with live status on the node, and a download into output/fal/fal-ai_minimax_video-01-subject-reference/.
The controls are three:
subject_reference_image- the photo whose face the clip should keep. One image, not a batch (the pack rejects batches for single-image sockets before anything is uploaded or billed). A clean, front-lit, reasonably close portrait gives the model far more to work with than a tiny head in a wide shot.prompt- the scene and action. You don't need to describe the person; you're showing it.prompt_optimizer- on by default, so the model rewrites your prompt first. Off if the prompt is being paraphrased into something you didn't write.
Outputs: video (ComfyUI VIDEO - save it, dub it, lip-sync it), video_path (STRING, the file on disk), info (JSON with the request id, estimate, files and fal's raw answer).
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, or use ComfyUI-Manager and search arkennemasis. Only httpx is declared in requirements.txt, and that's for the pack's Codex nodes - the fal provider is standard-library only, which is why this is one of the gentler custom-node installs you'll do. Then, in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
The pack's author left the key out of the node deliberately - widget values are written into workflow JSON verbatim, so a key box is a key in every canvas you share.
Where people get burned
- You got a person who looks similar but isn't them. The reference photo is doing all the work. If it's a 3/4 shot, in shadow, or 200 pixels of face, expect a cousin rather than a sibling.
- Batched reference images. Rejected pre-flight; nothing billed.
- You paid twice for the same setup.
reuse_identical_run(default true) returns already-paid results for byte-identical inputs, including after a ComfyUI restart. It's the closest thing to reproducibility this node has - there's no seed box. - Your inputs left the machine. That's the mechanism, not a bug - reference photo and prompt go to fal and on to MiniMax. If the face is someone who didn't agree to that, stop and think.
- ComfyUI died mid-run. The fal job didn't. Take the id from
output/fal/_requests.jsonland pull the clip with the pack's fal Recover Result node - that costs nothing.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| subject_reference_image | IMAGE | URL of the subject reference image to use for consistent subject appearance | |
| 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. |