arkennemasis fal · Flux Subject · $0.04/MP
Keep one specific thing, generate everything around it
- image
- images
- image_paths
- seed
- timings
- prompt
- has_nsfw_concepts
- info
Flux Subject puts a specific thing back into a generated scene. Not a face, in the PuLID sense - a product, a bag, a mug, a brand identity, a style reference. You supply the picture of the subject, describe the scene you want it in, and it renders that scene with your object in it. Schema-wise it's Schnell with a subject input: fast endpoint, 8 default steps, and the cheapest subject-conditioning option in this pack at $0.04/MP.
That price point is why it's interesting. Four cents a megapixel is a hair above PuLID, well under Fill, and far under the Ultra endpoints, so you can generate a product-shot matrix - five backgrounds, four angles - without doing arithmetic first. If you've done the customer-photo-to-catalogue thing with local LoRAs, this is the "no training, no dataset, just a reference and a prompt" version of the job, and the trade you're making is fidelity for speed. Don't expect a LoRA's precision from one reference image.
Inputs
- image - the subject. One image, clean crop, plain-ish background if you have the choice.
- prompt - the scene you want built around it. The description does the heavy lifting; the subject socket only holds one thing constant.
- image_size -
square_hdis the default here (unlike the landscape default on the other Flux nodes in this pack), withsquare, the landscape/portrait presets andcustomplusimage_size_width/image_size_heightavailable. Billing is per output megapixel, so this is the price dial. - num_inference_steps - default
8, up to 50. The endpoint is the "super fast" Schnell branch; the defaults are where the speed is. - guidance_scale - default
3.5. - num_images (up to 4), seed, output_format (png by default here), enable_safety_checker.
- The shared four: max_cost_usd, reuse_identical_run, extra_json, max_concurrent.
Outputs
images and image_paths (files under output/fal/fal-ai_flux-subject/), seed as an INT, plus prompt, timings, has_nsfw_concepts and info - JSON containing the request id, the cost estimate, the saved files and fal's full answer. Wiring is the usual: image socket into SaveImage, or into a fill/erase node, or into an upscaler if 1 MP isn't enough.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
or install comfyui-arkennemasis from ComfyUI Manager. Restart, then add the key line to the .env in the folder that holds run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
No downloads, no Python dependencies for this node, no key widget - the pack reads the .env and nowhere else, which is exactly why your key can't end up inside a workflow file.
Where it goes wrong
Subject conditioning is sensitive to the reference crop. A tight, well-lit, single-object photo with the whole object in frame works; a cluttered shot with three similar items gets you an amalgam of all three. If the output keeps morphing your product, that's the model's guess showing - crop harder and describe less.
There's also an expectation mismatch worth naming: "Subject" sounds like it guarantees consistency across a set, and it doesn't - it biases one generation toward one reference. For a run of twenty images that must all show the same object, you want a trained LoRA, or the pack's Variation pipeline, or an edit model. This node is the fast first draft of that project, not the guarantee.
And the pack-wide caveats: the safety checker returns black images rather than errors, and switching it off needs account authorisation on fal; reuse_identical_run hands back cached files for identical inputs unless you turn it off; a missing key or an empty fal balance stops the run before it bills; and the free Recover Result node rescues a job whose ComfyUI died mid-wait.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| image | IMAGE | URL of image of the subject | |
| image_size | COMBO | square_hd | The size of the generated image. 'custom' uses the width and height below. |
| image_size_width | INT | 102416–14142 | Width in pixels when image_size is 'custom'. |
| image_size_height | INT | 102416–14142 | Height in pixels when image_size is 'custom'. |
| num_inference_steps | INT | 81–50 | The number of inference steps to perform. |
| seed | INT | -1-1–2147483647 | The same seed and the same prompt given to the same version of the model will output the same image every time. -1 leaves it to the model. |
| guidance_scale | FLOAT | 3.500–20 | The CFG (Classifier Free Guidance) scale is a measure of how close you want the model to stick to your prompt when looking for a related image to show you. |
| num_images | INT | 11–4 | The number of images to generate. |
| enable_safety_checker | BOOLEAN | true | If set to true, the safety checker will be enabled. Disabling it requires account authorization; unauthorized requests are always checked, and images flagged as unsafe are returned as black images. |
| output_format | COMBO | png | The format of the generated image. |
| 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 (7)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| seed | INT | — |
| timings | STRING | — |
| prompt | STRING | — |
| has_nsfw_concepts | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |