WaveSpeedAI ByteDance Seedream V4
Seedream 4.0 at up to 4096×4096, without hunting down an API script
- client
- output_image
ByteDance's Seedream has been quietly excellent at the one thing most image models still fumble: native resolution and text. Seedream 4.0 (the "V4" here) renders clean, readable lettering and holds detail at sizes that would melt a consumer GPU - up to 4096×4096 in this node's preset list. The catch is there are no open weights, so the only way to use it is through a host. This node is that host, dropped into ComfyUI as a text-to-image node from the razvanmatei-sf/razv-wavespeed pack.
Plainly: it's a paid API call, not local generation. You need a WaveSpeed AI key, and every image is billed. What you get in exchange is a node that behaves like the rest of your graph - real IMAGE output you can feed straight into SaveImage - instead of a screenshot of a web demo.
How it works
Wire a WaveSpeedAI Client node into client, type a prompt, pick a preset, and the node POSTs to the /api/v3/bytedance/seedream-v4 endpoint. In async mode (the default here) it grabs a task ID and polls every half-second until the image is done; sync mode waits on the response directly. Output URLs come back and are converted to a torch IMAGE tensor, so output_image plugs into anything that expects an image - preview, save, upscale, you name it.
The resolution list is the star. Nine presets cover everything from square to ultrawide: 2048x2048 (1:1) is the default, and it runs up to 4096x4096 (1:1). There's also 4:3, 3:4, 16:9, 9:16, 3:2, 2:3, and 21:9. You don't get a custom-size box like some nodes here - you work within the presets, and honestly that's a feature: Seedream is tuned around these.
The inputs that matter
- prompt - the image description. This is a model that takes detail well; be specific about composition, not just subject.
- size_preset - the nine resolutions above. Default
2048x2048 (1:1). - seed - and here's a subtle trap: 0 means random for this API, not -1. The tooltip says seed 0 is the default and the field only gets sent if it's non-zero. So if you set seed to 0 expecting reproducibility, you get the opposite. Pick a real number when you want to lock a result.
- enable_sync_mode - defaults off. Flip it on to make the node block until the image is ready.
That's the entire input surface. No negative prompt, no guidance slider - Seedream's API handles those on its side. It's the simplest node in the pack and one of the most capable.
Install
Shared pack, one install:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed
# restart ComfyUI
Or ComfyUI Manager → search "razv-wavespeed" → Install. Then add a WaveSpeed AI API key: type it into the WaveSpeedAI Client node, copy config.ini.tmp → config.ini in the pack folder and fill in [API], or set WAVESPEED_API_KEY as an env var.
Common issues
- It costs money, and 4096×4096 costs more than the rest. The resolution choices are essentially price tiers in disguise; budget accordingly.
- The seed-0 trap above is the one that'll actually bite you - the pack's other nodes use -1 for random, Seedream uses 0. Read the tooltip.
- Missing nodes after install: the pack's
requirements.txtis bare but the code pulls inav,torchaudio,pydantic, andcomfy_apiat load time. ComfyUI usually has them; if zero WaveSpeed nodes appear, that's the silent import failure to chase. - Queue time on big resolutions is real. Async mode keeps ComfyUI responsive while you wait, which is why it's the default.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Text description of the image to generate | |
| size_preset | COMBO | 2048x2048 (1:1) | Resolution preset for the generated image |
| seed | INT | 00–18446744073709550000 | Random seed for reproducible results |
| enable_sync_mode | BOOLEAN | false | Wait for generation to complete before returning |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_image | IMAGE | — |