ComfyUI Node

Seedream

Seedream — ByteDance's image model, the one with no weights to download

By yogurt7771·Created 2 years ago·Updated 6 days ago· 3
Seedream
  • images
  • provider
  • image
  • images
  • text
  • thought
◄prompt►
◄model▾►
◄seed0►
◄watermarkfalse►
◄extra►
◄retry_count1►

ByteDance has the cleanest two-track posture in this whole space: every flagship generation product stays on the API, everything underneath it ships free. Depth Anything, PuLID, SDXL-Lightning, Hyper-SD - all from the same company that will not open Seedream. So when someone in a thread grumbles that Seedream is "yet another non-local model that will get buried", they're describing the situation accurately. There is no checkpoint. If you want it, you call it.

Seedream is the node that makes that call, covering Seedream 5.0 Pro, 5.0 Flash, 5.0 Lite, 4.5 and 4.0 - generation and editing in one place. What makes it worth wiring up rather than curling in a script is that the same model id is spelled differently on every channel, and the pack keeps that mapping honest for you: Volcengine Ark, BytePlus ModelArk (same service, international endpoints), and OpenRouter for the versions that are on it.

How it works

One node, no local model. It builds the request, sends it to the provider that serves the selected version - defaulting to Volcengine Ark, ByteDance's own cloud - polls the async task, and decodes what comes back into ComfyUI tensors. Two things follow from that. First, the model dropdown genuinely changes what the node asks for, because the channels expose different ids. Second, provider choice is not cosmetic: connect a provider with no route for your version and the error names the providers that do have one.

With provider left empty, the official API is used with the key from api_key.json ("seedream" or "ark") or ARK_API_KEY.

The inputs and outputs

  • prompt - your text, or your editing instruction when reference images are attached.
  • model - the version, and choosing one reveals that model's own fields under the dropdown. Expect an output size preset expressed in resolution tiers and ratios (1K through 4K depending on the version), a Custom width and height option, a batch count, a thinking toggle for prompt-optimisation reasoning on text-to-image runs, and on some versions a prompt optimisation switch between standard and fast.
  • seed - passed through where supported; changing it forces a re-run, and 0 lets the API choose.
  • watermark - adds an "AI generated" mark when enabled. It's off, and it should stay off.
  • images - optional reference images; the node advertises up to 14, and each version caps it individually. Batches expand, so a 4-image batch drops four references into the request, and reference images plus generated images cannot exceed 15 in total. That ceiling is where the "generate a related set" behaviour gets constrained too.
  • extra - a JSON object merged into the request, for parameters the node doesn't expose yet. Raw escape hatch, no ceremony.
  • retry_count - total attempts. With a metered API, this is a cost knob as much as a reliability one.

Outputs: image (all results batched, first image only if sizes differ), images as a list, and text / thought for accompanying text. image goes to your Save node; images is what you want if you're iterating over a returned set.

Installing

ComfyUI Manager, search the pack title; or:

cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes && pip install -r requirements.txt

Restart, then look under YogurtNodes/LLM/Image - runtime display names carry the pack's " (Yogurt Nodes)" suffix. Key:

# custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json
{ "seedream": "your-ark-api-key" }

Where people get burned

Channel mismatch, mostly. The Beijing endpoint and the international BytePlus endpoint are separate services with separate keys, and neither is the OpenRouter route. Pick your provider node deliberately - that's the whole reason the pack splits providers from models. A version that simply isn't offered on your channel will tell you so, and switching channel is a single wire.

Then the honest reading on output. Seedream's reference-image editing is genuinely good - people use it for character consistency with a handful of photos and get better results than a hastily trained LoRA - but "batch" here doesn't mean four variations of the same idea. Above one image the model may return a related set, and if that's not what you wanted, you've paid for it. Set the count deliberately.

And the thing the community keeps saying, because it's true: this is a metered capability with no local fallback and no way around the vendor's filter. Use it for what your checkpoints can't do - up to 4K tiers, editing with many references, a model family you can't download - and don't drift into calling it for images your own GPU makes for free.

CategoryYogurtNodes/LLM/Image

Inputs (8)

NameTypeDefaultDescription
promptSTRINGPrompt sent to the model.
modelCOMBOModel version; the inputs below change with the selected model.
seedINT00–2147483647Sent to the API when the model supports it; changing it also forces a re-run. 0 lets the API pick a random seed.
watermarkBOOLEANfalseAdd an 'AI generated' watermark.
extraSTRINGOptional JSON object merged into the request (for parameters not exposed as inputs).
imagesCOMFY_AUTOGROW_V3Optional reference image(s); batches are expanded. Up to 14.
retry_countINT11–10Total attempts on failure.
provideroptYOGURT_LLM_PROVIDERProvider node. When unconnected, the official API is used with keys from api_key.json or environment variables.

Outputs (4)

NameTypeDescription
imageIMAGEAll images as one batch (first image only if sizes differ).
imagesIMAGE—
textSTRING—
thoughtSTRING—