arkennemasis fal · Flux 2 Flex · $0.05/MP
The expensive Flux 2 that's actually about the text in your image
- images
- image_paths
- seed
- info
At $0.05 per megapixel, Flex is four times the price of the plain Flux 2 node - and rounded up to the nearest megapixel, so even a 512×512 test renders as a full dollar-cent amount. That's not a bargain, and it isn't meant to be. Flex is the tier where Black Forest Labs exposes the control knobs and pushes typography: real inference steps you can raise, a guidance value you can dial, and a safety tolerance slider. If you want the model to render a poster that says exactly what you typed, this is the endpoint that's built for it.
What's different from the other Flux 2 nodes
The full Flux 2 node gives you steps and an acceleration dial but no safety tolerance. Flash gives you neither. Flex gives you num_inference_steps, guidance_scale and safety_tolerance on a 1-5 scale - and it's the branch of the family whose pitch is text rendering: signs, labels, packaging, typographic layouts.
It also returns fewer outputs than its siblings. There's no timing blob and no NSFW-concepts field on this node - just the images, their paths, the seed and the info JSON. Nothing lost that matters, but don't go looking for a port that isn't there.
The inputs
prompt - sentences. This model's text encoder reads your prompt as an instruction, not a bag of tags, and prompt weighting syntax is a no-op. For typographic work, say the words you want on the sign explicitly and in order.
num_inference_steps - 28. Fal bills per megapixel, not per step, so raising this costs you seconds, not dollars. On a $0.05/MP endpoint, that's a good deal and you should use it.
guidance_scale - 3.5 here, higher than the 2.5 the plain Flux 2 node ships with.
safety_tolerance - 2 by default, 1 strictest through 5 most permissive. Separate from enable_safety_checker, which is the blunt on/off. If a legitimate render keeps coming back refused and you have the account authorisation to loosen things, this is the dial that actually moves.
image_size - presets with landscape_4_3 as the default, or custom plus image_size_width / image_size_height.
output_format - defaults to jpeg here, not png. Change it if you're going to keep editing the result.
seed (-1), plus the pack's usual max_cost_usd, reuse_identical_run, extra_json and max_concurrent.
Outputs
images is the IMAGE output - batch if num_images is above 1. image_paths is a STRING giving you where they were written, seed is an INT you can lock, and info is a JSON string holding the request id, the cost estimate, the saved files and fal's raw answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI; the node appears under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL does the same. The pack pins one dependency, httpx, for its ChatGPT/Codex nodes - fal needs nothing beyond the standard library, so your Python environment is untouched.
Then, in the .env alongside run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
The rounding. Billing rounds up to the nearest megapixel on both sides, so a 0.26MP test render costs the same as a 1MP one. Do your prompt-dialling on the cheap nodes; spend Flex's money on the render you're actually shipping.
Expecting CFG behaviour. Do not port your SDXL habits over. Guidance here is in the 3-ish range, not 7, and on this flow-matching family wild CFG values don't sharpen adherence so much as cook the image.
Assuming more references means more cost - that's Flex Edit's territory, and there the input side is capped at 1MP regardless of how many pictures you attach.
Repeated runs returning identical files. reuse_identical_run defaults on, so an identical rerun is served from output/fal instead of billed. That's your safety net against paying twice; flip it off when you want a new take from the same prompt. And if a run stops before anything uploads, check max_cost_usd - the estimate is compared to the cap before the paid call, so tripping it is free.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| image_size | COMBO | landscape_4_3 | 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'. |
| seed | INT | -1-1–2147483647 | The seed to use for the generation. -1 leaves it to the model. |
| safety_tolerance | COMBO | 2 | The safety tolerance level for the generated image. 1 being the most strict and 5 being the most permissive. |
| enable_safety_checker | BOOLEAN | true | Whether to enable the safety checker. Disabling it requires account authorization; unauthorized requests are always checked. |
| output_format | COMBO | jpeg | The format of the generated image. |
| guidance_scale | FLOAT | 3.501.5–10 | The guidance scale to use for the generation. |
| num_inference_steps | INT | 282–50 | The number of inference steps to perform. |
| 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 (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| seed | INT | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |