Fal Text-to-Image
FLUX.1 [dev], Seedream, Recraft — every fal text-to-image model in one dropdown
- image
- image_url
- info
Want to run FLUX.1 [dev], Seedream 5.0, or Recraft on your ComfyUI canvas without owning the GPU to hold them? That's the whole job of Fal Text-to-Image. It's the text-to-image half of ComfyUI-Fal-Gateway, a pack that turns fal.ai - the pay-per-call inference host - into plain ComfyUI nodes. Pick a model, type a prompt, hit Queue, and a normal IMAGE tensor lands on the wire like a local generator made it.
The trick that makes it worth your time is the dropdown. Other fal wrappers ship one Python class per model - every new release means a PR and an update. This one reads fal's own OpenAPI catalog and renders the model list live, so "new model appears in dropdown, no code change" actually holds. Type-ahead even clusters families: type seedance or kling and the matching entries cluster together. At last count there were a couple hundred text-to-image entries in the category filter.
Inputs and outputs
Only two inputs, and one of them you barely touch:
- model_id - the big dropdown. Everything from
[fal-ai] FLUX.1 [dev]through[bytedance] Seedreamand[bria] Recraft-style editors, each labeled with its provider. - prompt - a multiline box. Same prompt discipline as local: the model's own prompt guide wins. Since many of these are instruction-tuned, your wording matters more than SD-era keyword spam.
Three outputs:
- image - a single-frame IMAGE tensor. Wire it straight into
SaveImage(or VHS-style savers) and you're done. - image_url - the fal-hosted source URL, handy if you want to log or re-fetch it.
- info - a JSON string dump of fal's full result object. Overkill for most runs, but it carries the seed, timings, and safety flags if you build anything that tracks them.
How it works
You queue → the node calls fal's endpoint with your prompt → fal runs the model on their hardware → the node downloads the bytes and decodes them into a tensor with PIL. No model files ever touch your disk. The whole thing is one HTTP client with your key attached - which is also the honest read on the security posture: an API node is arbitrary Python that holds a credential and phones home by design, so only install packs you can read and that you got from somewhere with a reputation to lose. This one is Apache 2.0 and open.
Install
The pack isn't in the ComfyUI Manager registry yet (the PR is pending), so manual it is:
cd ComfyUI/custom_nodes
git clone https://github.com/modbender/ComfyUI-Fal-Gateway
Then install the Python deps into your ComfyUI venv - fal-client, aiohttp, opencv-python, Pillow, numpy, pydantic - and set your key:
pip install -r requirements.txt
export FAL_KEY=your_key_from_fal_ai_dashboard_keys
You can also copy config.ini.example to config.ini and paste the key there instead. Restart ComfyUI and you'll find all the nodes under Fal-Gateway in Add Node.
Gotchas that actually bite
- It's paid, per image. fal is metered credits, and an empty balance just stops generation. The node paints a cost-per-run badge (green → red) in its title bar as you change widgets, which is more honesty than most API nodes give you. For heavy iterating, local is still the right tool; this is for when the model is closed or your VRAM isn't.
- Fresh nodes can briefly show
<no models available>in the dropdown while the background catalog fetch finishes. Wait a few seconds, or right-click the node → "Fal-Gateway: refresh catalog cache". New models that just launched need that refresh plus a ComfyUI restart to appear. - No key → hard error. If
FAL_KEYisn't set, execution raises "FAL_KEY not set" - the README and the error both tell you exactly where to fix it.
Health check if things look off:
curl http://127.0.0.1:8188/fal_gateway/health
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model_id | COMBO | 195 options: [alibaba] Qwen Image 3 Text to Image, [bria] Fibo, [bria] Fibo Bbq Preview, [bria] Fibo Gen 1.5 Text to Image, [bria] Fibo Lite, [bytedance] Seedream, +189 | |
| prompt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| image_url | STRING | — |
| info | STRING | — |