arkennemasis fal · Flux 2 LoRA · $0.021/MP
The 32B quality ceiling with your own style weights
- images
- image_paths
- seed
- prompt
- timings
- has_nsfw_concepts
- info
Here's the honest pitch for this one. FLUX.2 [dev] is a 32B transformer with a 24B Mistral-3 encoder - call it 53GB of weights, and the reason the community mostly rejected it for local use. People who do have the hardware still call it the best open editor and one of the best text-to-image models around. This node rents it at $0.021 a megapixel and lets you stack LoRAs on it, which is the combination you cannot buy locally unless you own a workstation card.
What it is
One thin wrapper over fal's fal-ai/flux-2/lora endpoint, generated from a JSON spec in the pack. Your prompt goes out, the images land in output/fal/fal-ai_flux-2_lora/, and the node behaves like any other generator with an IMAGE output. Everything about the local-vs-cloud tradeoff in the KB applies: performance without VRAM, and your prompt and reference images leaving your machine.
This is [dev], not klein - so the default step count is different. num_inference_steps runs 4 to 50 with a default of 28, and guidance_scale sits at 2.5. That's the real, non-distilled workflow, not the 4-step trick.
Inputs
prompt first. Flux 2's encoder is a vision-language model reading a chat turn: write sentences, name what owns what, skip the tag-soup flourishes and the (word:1.4) weighting syntax. guidance_scale (0–20, default 2.5) is how hard the model is pushed toward your prompt - raise it a little if the composition ignores you, but Flux 2 does not want SDXL's 7.
loras is the reason you're here: a JSON list, maximum three, each entry a URL, HuggingFace repo ID or local path. Empty leaves the field out. acceleration is a three-way combo - none, regular, high - with regular as the default balance of speed and quality; high is the one to try when you're iterating and the final render matters less.
enable_prompt_expansion is off by default and worth knowing: flip it and an LLM inflates your prompt before generation. Good for lazy one-liners, bad when you want exactly what you typed. image_size defaults to landscape_4_3 with the usual preset list plus custom for explicit width and height, and num_images (1–4) generates a batch in one call. output_format defaults to png here. The safety checker is on, and it returns unsafe output as black images rather than failing the run.
Then the four shared ones: max_cost_usd ($20 default) is checked before anything is uploaded; reuse_identical_run hashes the settings and the bytes of any inputs so a repeat run is free; extra_json merges a raw object into the request for fields with no box on the node; max_concurrent keeps billed calls serialised across the graph unless you raise it.
Outputs
images for the graph, image_paths for the files, seed and prompt back out for reproducibility and logging, timings and has_nsfw_concepts from fal, and info - a JSON blob with the request id, the cost estimate and fal's whole answer. That's your receipt.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, then one line in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
The fal provider is standard-library only, so nothing to pip install for these nodes. There is no key box on the node by design - a key in a widget gets saved into the workflow file and travelled with every screenshot.
Where people get burned
The price is not the badge. $0.021 per megapixel is the base rate, and fal adds 50% per gigabyte on LoRAs over 2GB - a 2–3GB stack multiplies the whole request by 1.5×, up to 2.5× for 4–5GB. The node's estimate and live badge don't know how big your LoRAs are, so a heavy stack costs more than the number shown. Check fal's dashboard after a serious session, not just the node.
Second: Flux 2 Dev never got a big LoRA ecosystem, precisely because training it wants something like an RTX 6000 Pro, so the LoRA you find is more likely to be a Klein LoRA - wrong architecture, silent no-op. Third: 28 steps at 2.5 guidance on a full-strength model is slow by API standards; if you're exploring composition, draft on something cheaper and finish here.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| guidance_scale | FLOAT | 2.500–20 | 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. |
| seed | INT | -1-1–2147483647 | The seed to use for the generation. If not provided, a random seed will be used. -1 leaves it to the model. |
| num_inference_steps | INT | 284–50 | The number of inference steps to perform. |
| image_size | COMBO | landscape_4_3 | The size of the image to generate. The width and height must be between 512 and 2048 pixels. '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_images | INT | 11–4 | The number of images to generate. |
| acceleration | COMBO | regular | The acceleration level to use for the image generation. |
| enable_prompt_expansion | BOOLEAN | false | If set to true, the prompt will be expanded for better results. |
| 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. |
| loras | STRING | List of LoRA weights to apply (maximum 3). Each LoRA can be a URL, HuggingFace repo ID, or local path. JSON. Empty leaves it out. | |
| 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 | — |
| prompt | STRING | — |
| timings | STRING | — |
| has_nsfw_concepts | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |