FAL Text2Image
The Only Way to Run FLUX Pro Inside ComfyUI
- image
- image_url
- context_id_out
- safety_applied
FAL Text2Image is the reason this pack exists. You can run FLUX Dev and Schnell locally, but FLUX Pro v1.1 and Pro "new" only ever exist behind an API - there are no weights to download. This node is a thin client that makes fal.ai's hosted FLUX the backend of a ComfyUI node, which means you get the API-only tiers without leaving your graph.
Be honest with yourself about what you're buying, though. For Dev and Schnell you're paying per image to run something your own GPU could handle. The sensible use is the Pro models, or the days when you want results without babysitting VRAM and offloading. That trade is the whole pitch.
How it works
Under the hood it's a queue poller, not a local sampler. The node builds a JSON payload and POSTs it to https://queue.fal.run/<model_id>, then polls the status endpoint every ~0.8s until the job is COMPLETED, errors out, or your timeout_sec expires. Transient failures retry with a short backoff, and once the image is ready the node downloads it and converts the URL into a numpy array (HWC, 0-1) so the rest of ComfyUI treats it like any locally generated image. Every run logs model_id, seed, and safety_applied to the console.
One nice touch: the payload is filtered per model. The node only sends parameters the endpoint actually accepts - so if you pick flux-pro-v1.1, which doesn't take steps or guidance, those inputs are silently ignored rather than causing a 400.
The inputs that matter
- model_id - feed it from FAL Model Select, or type an endpoint id like
fal-ai/flux/devdirectly. - prompt - plain English works great; FLUX's T5 encoder likes full sentences, not comma soup.
- width / height - 1024 default, up to 2048. FLUX holds up fine in the two-megapixel range.
- steps - 28 default. Dev likes 20-40; Schnell genuinely only needs about 4.
- guidance - 3.5 default, and here's the community's standing complaint: 3.5 is too high for a lot of prompts. If things look overcooked, drop toward 2.5.
- seed - 0 means random.
- num_images - 1-4, and remember every one of them is a separate billable render.
- safety_mode -
auto/enabled/disabled. Some endpoints ignore your flag and force filtering anyway; the node retries without the flag and reports that asforced_by_model(more on this below).
It outputs image (wire it into Save Image), image_url, a context_id_out for Kontext chaining, and safety_applied.
Install
Grab it via ComfyUI Manager (search "ComfyUI_fal_image"), or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/Paddel87/ComfyUI_fal_image.git
pip install -r ComfyUI_fal_image/requirements.txt
Dependencies are just requests, Pillow, and numpy - nothing heavy, no model files. Then set your key and restart:
export FAL_KEY="fal-..."
Get the key at fal.ai/dashboard/keys. On the Windows portable build, run the pip install with its bundled python_embeded/python.exe instead. Nodes show up under fal.ai/Image.
Common issues
- "FAL_KEY missing" - you didn't set the env var (or a
config.iniwith a[fal] key = ...line). - Timeout errors - Pro models and big batches are slow. Raise
timeout_sec(up to 600) before you blame the node. safety_applied=forced_by_model- the endpoint rejected your safety flag and regenerated with the filter on. That's fal's call, not the node's; if a prompt keeps tripping it, that's why.- The bill - every click spends real money. It's the pack's dirty secret and nobody mentions it.
num_imagesis where people get burned.
It's a small, early-stage pack from a solo author, so treat it as a convenience wrapper rather than a supported product. But for reaching FLUX Pro from ComfyUI, it's currently one of the only games in town.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model_id | STRING | — | |
| prompt | STRING | — | |
| width | INT | 102464–2048 | — |
| height | INT | 102464–2048 | — |
| num_images | INT | 11–4 | — |
| seed | INT | 0 | — |
| steps | INT | 281–100 | — |
| guidance | FLOAT | 3.500–20 | — |
| safety_mode | COMBO | 3 options: auto, enabled, disabled | |
| timeout_sec | INT | 6010–600 | — |
| retries | INT | 20–5 | — |
| context_idopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| image_url | STRING | — |
| context_id_out | STRING | — |
| safety_applied | STRING | — |