Seedream4.0 - Text to Image
Up to 4K, up to six images, one call
- image
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Seedream 4.0 is ByteDance's current text-to-image endpoint, and the pitch is resolution plus multiplicity: pick an aspect ratio, pick 1K, 2K or 4K, and ask for up to six images that the model composes in a single pass. It's the node you reach for when you want a print-sized asset or a small set of variations at once, without owning the hardware for 4K synthesis.
Be clear-eyed about whether you need it. Local text-to-image in 2026 is excellent and free after your electricity bill - Flux-family and Qwen-based checkpoints, plus whatever your favorite merge is, cover most of this ground. Seedream's edge is specific: very high output resolution out of one call, strong prompt adherence, and typography that actually reads. If none of those is your bottleneck, you're paying per image for a convenience you already have. If one of them is, this node is a good deal cheaper than the GPU you'd need to match it.
Inputs and outputs
prompt is required - multiline, docs cap it at 5,000 characters, and the shipped default is a blackboard with a system of linear equations drawn on it, which is a decent hint about how much math and text this model can spell correctly.
image_size (default square_hd) now offers nine shapes: square_hd, square, portrait_4_3, portrait_3_2, portrait_16_9, landscape_4_3, landscape_3_2, landscape_16_9 and landscape_21_9. image_resolution multiplies it - 1K, 2K, 4K. The two combine: the tooltip's example is 4:3 at 4K giving 4096 × 3072, so think of image_size as aspect and image_resolution as scale, then pick both.
max_images is the one people misread. It's a FLOAT, default 1, range 1–6, and it caps how many images a single run can produce. Here's the catch, straight from the author's tooltip: because the set is composed in one shot rather than as separate requests, you have to state the exact number in the prompt as well, so the setting and the request agree. Set max_images to 4 and never say "four variations" and you'll get whatever the model felt like. Say it and you get four.
seed is there for reproducibility. nsfw_checker defaults to true on this node - different from the Seedance nodes - and the KIE note attached to it is that choosing false disables their content filtering, with no promise that everything gets caught anyway. timeout_seconds and callback_url are the shared fields; leave the callback alone unless you're running a server that receives webhooks.
Outputs: image, url, all_urls_json (the one that matters when you asked for six), task_id, raw_json, credits_consumed, credits_left - plus the on-node credits-spent/remaining display after each run.
Install
Manager → search KIE.ai Nodes Next (publisher id felipeosilva) → install; if it isn't listed yet, the README's registry publication is still described as prepared rather than done, so:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r ComfyUI-KIE-Nodes-Next/requirements.txt
Restart ComfyUI. Four light dependencies, no model downloads, no local inference - that's the trade. Windows users have a one-click .vbs installer in dist/, plus a full uninstaller. Then set your key once: Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key, validated against KIE before it replaces a saved one, with only a masked fingerprint reaching the frontend. KIE_API_KEY overrides it on headless installs.
Gotchas
Cost scales with ambition. Six images at 4K in one call is one request but not one unit of effort, and this is a metered API. Draft your prompt at 1K and one image; scale up when the composition is right. The habit the video nodes forced on people - iterate cheap, commit expensive - applies here too.
ByteDance's flagships are API-only, permanently. Seedream is a product on a rate card, not a weights release, and ByteDance's pattern of shipping components free while holding flagship generation behind the endpoint has held without exception. Plan around that instead of waiting.
High image_resolution is not an upscale. You get a model natively composing at that scale, which is why it looks different from a local 1K-then-upscale chain - sometimes better, sometimes just differently artifacted. And remember your prompt still has to earn it: 4K of a vague idea is a very large vague idea.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Draw the following system of binary linear equations and the corresponding solution steps on the blackboard: 5x + 2y = 26; 2x -y = 5. | The text prompt used to generate the image (Max length: 5000 characters) |
| image_sizeopt | COMBO | square_hd | The size of the generated image. |
| image_resolutionopt | COMBO | 1K | Final image resolution is determined by combining image_size (aspect ratio) and image_resolution (pixel scale). For example, choosing 4:3 + 4K gives 4096 × 3072px |
| max_imagesopt | FLOAT | 1.001–6 | Set this value (1–6) to cap how many images a single generation run can produce in one set—because they’re created in one shot rather than separate requests, you must also state the exact number you want in the prompt so both settings align. (Min: 1, Max: 6, Step: 1) (step: 1) |
| seedopt | INT | 50331296-2147483648–2147483647 | Random seed to control the stochasticity of image generation |
| nsfw_checkeropt | BOOLEAN | true | Defaults to false. You can set it to false based on your needs. If set to false, our content filtering will be disabled, and all results will be returned directly by the model itself. Note: There is no guarantee that everything can be filtered out; if you are not satisfied with the results, you will need to make your own arrangements. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |