PVL SeeDream 4.5 (fal.ai)
ByteDance's SeeDream 4.5, without the ByteDance account
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- IMAGE
SeeDream is ByteDance's flagship image model line, and like every flagship ByteDance ships, it's closed - API-only, no weights, no local runs, no exceptions. This node is the back door into the 4.5 generation via fal.ai's hosted endpoints: fal-ai/bytedance/seedream/v4.5/text-to-image when you give it just a prompt, and fal-ai/bytedance/seedream/v4.5/edit the moment you connect any of the optional image inputs.
It's one of the more interesting nodes in this pack because it switches endpoints on you based on what you plug in. Connect image_1 and it becomes an image editor; leave them all empty and it's a text-to-image node. Same node, two behaviors.
How it works
The logic is in the code: if any image input is connected, it sends the prompt plus your images (as base64 data URIs in image_urls) to the edit endpoint; otherwise it hits the text-to-image endpoint. That's it - the heavy model does the rest on fal's side.
The image_size selector is a nice touch. It maps the friendly presets to SeeDream's internal enums: 1:1 → square_hd, 3:4 → portrait_4_3, and so on, plus auto_2K / auto_4K passthroughs and custom which defers to your width / height fields. The source notes that SeeDream really wants widths and heights between 1920 and 4096, though the node lets you go lower.
The inputs that matter
prompt- the whole job description.image_size,width,height- presets or custom dimensions. Remember the 1920–4096 sweet spot; you're generating at 2K+ here, which is the point of a flagship API model.num_imagesandmax_images- both default to 1, both cap at 8.max_imagesis the API's hard ceiling;num_imagesis how many you actually ask for.seed- -1 for random.retries,timeout_sec,debug_log- this node is one of the few in the pack that exposes its own retry and timeout tuning. If your batches keep dying on transient fal errors, bumpretries(default 2) andtimeout_sec(default 60).- The eight optional
image_1…image_8inputs - connect at least one and you're editing, not generating.
One output: IMAGE.
Installing it
Same pack, same drill:
cd ComfyUI/custom_nodes
git clone https://github.com/pvlprk/comfyui-pvl-api-nodes
Restart, export FAL_KEY="...", done. No downloads, no ByteDance account needed - fal handles the API access, you just pay them.
Common issues
Two things catch people. First, the endpoint switch: if you connect an image input by accident - say a stale wire from a previous layout - your "text-to-image" silently becomes an edit, and results look like the model is fighting your prompt. Disconnect all image inputs for pure generation. Second, enable_safety_checker defaults to off here, the opposite of the Qwen node in this same pack - if you're getting more content through than you expected, that's why, and it's a reminder that what the API allows is not the same as what you can publish. Costs are per generation at 2K–4K resolution, so this node is the priciest in the pack to run carelessly. Start at 1:1 with num_images at 1 and scale from there.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image_size | COMBO | custom | 8 options: 1:1, 3:4, 9:16, 4:3, 16:9, auto_2K, +2 |
| width | INT | 2048512–4096 | — |
| height | INT | 2048512–4096 | — |
| num_images | INT | 11–8 | — |
| max_images | INT | 11–8 | — |
| seed | INT | -1-1–4294967295 | — |
| enable_safety_checker | BOOLEAN | false | — |
| sync_mode | BOOLEAN | false | — |
| retries | INT | 20–10 | — |
| timeout_sec | INT | 605–600 | — |
| debug_log | BOOLEAN | false | — |
| image_1opt | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| image_4opt | IMAGE | — | |
| image_5opt | IMAGE | — | |
| image_6opt | IMAGE | — | |
| image_7opt | IMAGE | — | |
| image_8opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |