NS WaveSpeed Seedream V4 Edit
Edit a reference image with Seedream V4, at up to 4096px, with zero VRAM
- client
- output_image
This node is a doorway to ByteDance's Seedream V4 image editor, and the doorway is the whole point: Seedream is a closed model you cannot download, so the only way to get its edits inside a ComfyUI graph is to call it. The NSWaveSpeedSeedreamV4Edit node from the symbiotica-ai/comfyui-nodes pack sends your image and prompt to WaveSpeed's hosted API and drops the result back into the graph as a normal IMAGE tensor. From the canvas it looks like any other img2img step. Underneath it is an HTTP call with your API key baked in, and a bill every time it runs.
How it works
There is no model on your machine. The node takes your input image's URL, wraps it with your edit prompt, and POSTs to WaveSpeed (/api/v3/bytedance/seedream-v4/edit) with a Bearer token from your key. enable_sync_mode is off by default, which means the node submits the job and then polls the task endpoint every second until it's done - it looks like ComfyUI is thinking, and it is, for a few tens of seconds. Either mode blocks the graph until the render finishes, and pressing Cancel during the poll actually stops the wait (the client checks ComfyUI's interrupt flag), which is nicer than some API nodes manage.
The inputs that matter
image_url- your source image. The tooltip says "connect from Upload Image node": that's ComfyUI's core Upload Image node, which hands you a URL string for the file, and you wire that into here. It's a string input, not an image tensor.prompt- plain language for the edit. "Turn the shirt blue", "remove the people in the background" - Seedream V4 handles instruction-style edits well.size_preset- nine resolution presets from 2048x2048 up to a genuine 4096x4096, plus cinematic ratios like 21:9. This is where Seedream justifies its existence: 4K edits out of a node that costs you zero GPU.seed- 0 means random for this API, so set a non-zero value if you want the exact same edit back again.client- the requiredWAVESPEED_AI_API_CLIENTsocket, which you get from the pack's "NS WaveSpeed Client" node.
The single output is output_image (IMAGE), so wire it straight into a preview or a Save Image. Done.
How to install
The pack is one install covering every node in it - you don't grab this node alone.
# ComfyUI Manager: search "Symbiotica" and click Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart ComfyUI after installing. No model weights download for this node - the only real dependencies are requests and pillow, so it installs in seconds. You do need a WaveSpeed (wavespeed.ai) account with a few dollars on it; the API is pay-per-image, and you top up in chunks.
Common issues
The node errors with "API_KEY is empty." You forgot the client. Add the "NS WaveSpeed Client" node, paste your key into its api_key field, and wire the client output into this node. Or set the key once in ComfyUI Settings → search "Symbiotica" → WAVESPEED_API_KEY, or export WAVESPEED_API_KEY - the client checks the widget, then Settings, then config.ini, then the environment.
It's billing me every run. That's the model. This is a per-call API node - the community's standing objection to the whole category is that cost adds up and your prompt and image leave your machine (external-api-nodes.md). Seedream also enforces ByteDance's moderation, and there is no local patch around that.
One naming trap worth knowing: in ComfyUI circles "WaveSpeed" more often means the local first-block-cache acceleration trick for Flux/Hunyuan - a completely different thing from the wavespeed.ai platform this node calls. If a shared workflow is complaining about a missing "WaveSpeed" node, figure out which one it wants before you install anything.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Description of the image editing you want to apply | |
| image_url | STRING | URL of input image (connect from Upload Image node) | |
| 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 | — |