Dreamina v3.1 Text-to-Image (fal)
Running ByteDance's closed image model from ComfyUI
- IMAGE
Reach for this node when you want ByteDance's Dreamina model inside a ComfyUI graph and you don't have (or don't want to burn) a local GPU to get it. Dreamina is the image model behind ByteDance's consumer creation app, and like everything ByteDance actually charges for, it's API-only: there's no checkpoint you can download and load with a normal Load Checkpoint node. ByteDance's whole posture is that the products stay closed while the components (SDXL-Lightning, PuLID, Depth Anything) ship open - Dreamina sits firmly on the closed side, right next to the Seedream line. So if you want it in ComfyUI at all, a bridge like this one is the only door in.
What it actually does
This is not local generation, and getting that straight up front saves a lot of confusion. Nothing runs on your machine. The node bundles your prompt and settings, ships them to fal.ai, fal runs Dreamina on its servers, and hands you back a finished picture. Two consequences follow that you should decide you're okay with: your prompts leave your computer, and every click costs real money billed by fal. In exchange you get a strong closed model with zero VRAM, zero model downloads, and near-instant results.
One small mercy on the cost side: the pack keeps a persistent result cache, so an identical call - same prompt, same settings, same seed - gets served from disk for free on the next run instead of billing you twice. Change anything and it's a fresh, paid generation.
The inputs that matter
Compared to a local sampler, this node is almost bare, and that's the point. There's no CFG, no steps, no sampler, no negative prompt, so don't go hunting for them. The handful you actually set:
- prompt: plain natural language. This is a modern model, so write a sentence, not a tag soup.
- image_size: an aspect-ratio preset -
square_hd,square,portrait_4_3,portrait_16_9,landscape_4_3,landscape_16_9, orcustom. Stick to the named presets; there are no separate width/height fields on this node forcustomto size against. - num_images: 1 to 4 per run. A cheap way to roll several options at once - except you pay per image.
- seed: leave at
-1for random; set a fixed number when you want to reproduce a result. - enhance_prompt: off by default; flip it on to let the service rewrite and expand your prompt. Handy for a terse prompt, but it will change your wording, so it can drift from what you meant.
- output_format:
png(default) orjpeg. Switch tojpegif you're generating a lot and want smaller files.
There's also a sync_mode toggle that changes how fal delivers the result; the default is fine and you can ignore it. The single output is an IMAGE. Wire it straight into a Save Image or Preview Image, or feed it downstream to an upscaler or any node that takes an image - it behaves like any other ComfyUI image from there.
Installing it
Easiest path: open ComfyUI Manager, search for ComfyUI-fal-API, install, restart. Manual path:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-fal-API.git
cd ComfyUI-fal-API
pip install -r requirements.txt
Then restart ComfyUI. There's no model file to place in models/; the real dependency is the fal-client Python package (pulled in by requirements.txt) and, more importantly, a fal API key. Get one from your fal dashboard, then either copy config.ini.example to config.ini inside the pack folder and paste your key under [API], or export FAL_KEY in your environment before launching ComfyUI. Without a key, the node loads but every generation fails.
Where people get burned
The number-one issue is the key: no FAL_KEY, no images. If ComfyUI Windows Portable throws an import error, install the client into its embedded interpreter directly with .\python_embeded\python.exe -m pip install fal-client.
After that, the failures are mostly the model talking back. This pack surfaces fal's real error text instead of silently returning a blank, so read it - it usually names the exact problem. The common ones are content-policy refusals (some prompts simply won't be served), input validation, and quota or balance limits. And keep an eye on spend: because generations are billed per image and num_images can quadruple a single click, it's easy to run up a tab faster than you would locally. Set a fixed seed while you're dialing in a prompt so you're not paying to re-roll randomness you didn't mean to change.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image_size | COMBO | square_hd | 7 options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, +1 |
| num_imagesopt | INT | 11–4 | — |
| sync_modeopt | BOOLEAN | false | — |
| output_formatopt | COMBO | png | 2 options: jpeg, png |
| seedopt | INT | -1-1–4294967295 | — |
| enhance_promptopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |