arkennemasis fal · MiniMax Image 01 Subject Reference · $0.01/image
Same Face, New Scene, One Cent a Try
- image
- images
- image_paths
- info
Character consistency is the problem that never got solved, only rerouted - and one of the real routes is "hand the model a reference image and let it look at the thing while it draws." That's this node. Feed it a portrait and a prompt, get a new scene with the same subject, at a penny an image.
Where this fits in 2026's consistency stack
The KB's honest summary: the community's answer moved from "encode the character and inject it at generation time" (IP-Adapter, FaceID, PuLID, all still functional) to "generate once, then edit that image" with an instruction-edit model. LoRAs still work; people just stopped recommending them for a character you'll draw ten times.
A reference-image generator sits between those poles. It's cheaper and lazier than an edit chain - no mask, no crop-and-stitch, no drift compounding across a chain of edits - but it's also the model's interpretation of similarity rather than a guaranteed pixel-level identity. For a storyteller who needs a face to read as the same person across slides, storyboards and product shots, one cent per attempt is a very forgiving way to find out how close it gets. For a paid campaign where the face is the product, you'd still want the edit-model route and a human checking every frame.
How it works
Standard pack mechanics over fal's fal-ai/minimax/image-01/subject-reference endpoint: read FAL_KEY from the .env beside the launcher, validate, estimate cost against max_cost_usd, upload your reference image to fal's CDN (free), submit one billed request, poll, download into output/fal/fal-ai_minimax_image-01_subject-reference/. Hailuo/Image-01's owner MiniMax is closed and API-first, so there's no local equivalent to fall back to - this is a hosted capability, priced per image.
Inputs
image- the subject reference, and the whole reason you're on this node instead of the plain Image 01. Use a clean, well-lit, front-on shot. The tooltip is explicit that this drives "consistent character appearance"; a busy or stylised reference gives the model more to be confused by.prompt- up to 1500 characters, describing the new scene and action while not re-describing the subject's face. Let the reference do that job.aspect_ratio-1:1,16:9,4:3,3:2,2:3,3:4,9:16,21:9.num_images- 1 to 9, and the cost estimate scales with it.prompt_optimizer- default off here.
Optional: max_cost_usd ($20 default; the run halts before uploading if the estimate exceeds it, 0 = uncapped), max_concurrent (default 1 - one paid fal call at a time across the run), reuse_identical_run (default on; identical inputs return the file you already paid for), extra_json (raw JSON merged into the request for unexposed fal fields).
Outputs: images - the returned pictures batched onto one IMAGE output - plus image_paths and info (request id, estimate, saved files, fal's response). Wire it into a Save node, or into the pack's Option Board if you want a whole variation run laid out on one sheet to judge.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install httpx
Manager route: Install via Git URL with the repo. Then the key:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env beside run_nvidia_gpu.bat. Restart and look under arkennemasis/fal/Image/MiniMax.
Practical notes
Two things make this node work better than it has any right to at one cent: batch width and a fixed reference. Set num_images to 9, keep the same reference image, and vary only the scene description - you're buying nine interpretations of the same person for nine cents, which is a reasonable way to find the one that holds up. Changing the reference between attempts is what makes consistency look broken, not the model.
Also worth knowing: penny images are a draft tier, not a final tier. Generate nine, pick one, then upscale locally rather than paying for more attempts. And if the same run keeps returning the exact same file, that's reuse_identical_run being thrifty - turn it off when you want a fresh sample from an unchanged prompt.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt for image generation (max 1500 characters) | |
| image | IMAGE | URL of the subject reference image to use for consistent character appearance | |
| aspect_ratio | COMBO | 1:1 | Aspect ratio of the generated image |
| num_images | INT | 11–9 | Number of images to generate (1-9) |
| prompt_optimizer | BOOLEAN | false | Whether to enable automatic prompt optimization |
| 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 |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |