NS WaveSpeed Seedream V4 Edit Sequential
One prompt, up to ten reference images, a whole series back
- client
- output_images
If you've ever wanted to run the same instruction across a stack of reference images - "recolor these ten product shots", "put all four character refs in the same style" - the single-image Seedream edit node makes you queue ten times. This one, NSWaveSpeedSeedreamV4EditSequential from symbiotica-ai/comfyui-nodes, folds that loop into one node: up to ten input images, one prompt, one API call per image, and a batched IMAGE tensor out the other side.
How it works
Same engine as its single-image sibling - ByteDance Seedream V4, hosted on WaveSpeed's API, no local model and no VRAM. The difference is plumbing. Instead of one image_url, you get ten optional inputs (image_1 through image_10), all of them URL strings meant to come from ComfyUI's Upload Image node. Each one you wire in gets edited by the shared prompt at the chosen size_preset, and the results come back stacked as one batch on the output_images output - exactly what a downstream grid, contact sheet, or per-item save loop wants to eat.
max_images (1–15) caps how many results you ask for. The author's tooltip is unusually specific about the catch: the number has to match what your prompt says. If you say "a series of" in the prompt but set max_images to 3, the model gets told one thing and the node expects another, and you'll get a mismatch instead of a nice batch. This node is edit-first - the prompt should describe the edit you're applying to each reference, and the series phrasing keeps the results feeling like one set rather than ten strangers.
The inputs that matter
image_1…image_10- your reference images as URL strings (Upload Image node → here). Leave unconnected and they're just skipped.prompt- the edit, phrased as a series: "apply the same neon-noir grade to each image."max_images- how many results you expect; align it with the prompt.size_preset- the nine Seedream V4 presets, up to 4096x4096.seed- 0 means random on this API; set non-zero for reproducible edits.client- theWAVESPEED_AI_API_CLIENTsocket from the pack's NS WaveSpeed Client node.
Output is output_images (IMAGE, batched). Wire it to a save loop or an image comparer.
Install and keys
This ships in the same pack as all the NS WaveSpeed nodes, so it's one install:
# ComfyUI Manager: search "Symbiotica", or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart, add the NS WaveSpeed Client node, and put your wavespeed.ai key in its api_key field (or once in Settings → Symbiotica, or as WAVESPEED_API_KEY). Wire client into here. No model files, no heavy deps.
Common issues
Prompt says three, max_images says ten. You'll get a result that ignores your count or errors. Treat the two fields as a contract and keep them in sync.
Nothing comes out because the client node is missing. Every WaveSpeed node in this pack requires that client wire - the key lives there, not on this node. If you see "API_KEY is empty", that's the cause.
And the standing caveat for the whole family: this is a paid cloud call, your references leave your machine, and ByteDance's content filter applies to whatever you send (external-api-nodes.md). Great for batch production work where consistency across a set is worth the money; a waste for a single throwaway edit, where the plain Seedream edit node is the cheaper, simpler route.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Description of the image editing/generation task. Specify the number of images to generate and use phrases like 'a series of' or 'group of images' for consistency. | |
| max_images | INT | 21–15 | Number of images to generate. Must align with prompt description. |
| size_preset | COMBO | 2048x2048 (1:1) | Resolution preset for the generated images |
| seed | INT | 00–18446744073709550000 | Random seed for reproducible results |
| enable_sync_mode | BOOLEAN | false | Wait for generation to complete before returning |
| image_1opt | STRING | First input image URL (connect from Upload Image node) | |
| image_2opt | STRING | Second input image URL (connect from Upload Image node) | |
| image_3opt | STRING | Third input image URL (connect from Upload Image node) | |
| image_4opt | STRING | Fourth input image URL (connect from Upload Image node) | |
| image_5opt | STRING | Fifth input image URL (connect from Upload Image node) | |
| image_6opt | STRING | Sixth input image URL (connect from Upload Image node) | |
| image_7opt | STRING | Seventh input image URL (connect from Upload Image node) | |
| image_8opt | STRING | Eighth input image URL (connect from Upload Image node) | |
| image_9opt | STRING | Ninth input image URL (connect from Upload Image node) | |
| image_10opt | STRING | Tenth input image URL (connect from Upload Image node) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_images | IMAGE | — |