Nodes/ComfyUI-YogurtNodes/Provider: BytePlus ModelArk
ComfyUI Node

Provider: BytePlus ModelArk

Seedream Has Two Doors and This Is the One You Can Pay For

By yogurt7771·Created 2 years ago·Updated 8 days ago· 3
Provider: BytePlus ModelArk
    • provider
    ◄api_key►
    ◄base_url►
    ◄proxy_url►
    ◄timeout0►

    Seedream is one of the closed models people actually want in their graph - no weights, no local option, and a reputation for rendering text and product shots cleanly. It lives behind two doors, and they are not interchangeable: Volcengine Ark, the China endpoint, and BytePlus ModelArk, the international one. This node is the second door. If you signed up on the BytePlus side and got ark.ap-southeast.bytepluses.com in your dashboard, this is the node you plug in.

    What it actually is

    A provider node. It runs no model and generates nothing. Its only job is to hold connection settings and hand them downstream through a provider output of type YOGURT_LLM_PROVIDER - a small object carrying the provider's kind plus whatever you typed into the fields. You wire that into a model node (the pack's Seedream node, or the custom-model nodes), and the model node does the HTTP call.

    That split is the whole point of this pack's LLM half. The same Seedream model is reachable through several providers, and swapping providers is a re-wire, not a re-prompt. Connect a provider that doesn't serve the model you picked and the run stops with an error that names the providers that do - annoying, but honest, and much better than silently generating something else.

    The four fields

    All four are always visible, which is unusual for this pack - compare the model nodes, where the inputs change with the version you pick.

    • api_key - empty is fine if you've set up api_key.json or the environment variable. The resolution order is strict: field first, then byteplus in custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json, then BYTEPLUS_API_KEY. Nothing found means the run dies with a message telling you exactly which two places to put it.
    • base_url - defaults to https://ark.ap-southeast.bytepluses.com/api/v3 when left blank. Set it only if BytePlus gives you a different regional host.
    • proxy_url - http://127.0.0.1:7890 or socks5://127.0.0.1:1080 style. Useful when the model endpoint is reachable but your own network isn't cooperative.
    • timeout - seconds, 0 means no limit. Image generation regularly takes tens of seconds to a couple of minutes; leave it at 0 unless you have a reason.

    The output is a single provider socket. That's it - one wire, no previews.

    Install

    The pack is on the Comfy Registry, so ComfyUI Manager → search "YogurtNodes" → install, then restart. Manual route:

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

    That installs five packages (numpy, pillow, openai, google-genai, requests) - use the same Python ComfyUI runs under, which on the Windows portable build means python_embeded\python.exe -m pip .... The README also lists opencv-python, and its pyproject.toml agrees, but requirements.txt doesn't include it. For provider and LLM nodes that's irrelevant; it only bites the Poisson Blend image node.

    Then drop your key in a file rather than the widget if you have more than one provider in play:

    { "byteplus": "your-key-here" }
    

    That's custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json. Keep it out of workflow shares - API keys typed into a node widget travel with the workflow JSON.

    Where people get tripped up

    Wrong door. A BytePlus key on the Volcengine endpoint (or vice versa) fails as an auth error, which reads like "my key is broken." It isn't; it's the wrong host. Defaults are correct if you leave base_url empty and genuinely bought from BytePlus.

    Model name doesn't match the door. BytePlus serves the same Seedream line with slightly different model IDs than the China Ark. The pack's Seedream node routes per provider, so let it - if you're hand-typing a model ID into a custom-model node, copy it out of the BytePlus console rather than from a Chinese blog post.

    Expecting it to be a chat model. This provider exposes both chat and image protocols, but the thing you came for is image generation. Point it at a chat node with a model id that doesn't exist there and you'll get a 404 dressed up as RuntimeError: ... failed after 1 attempt(s).

    Worth knowing before you pay

    Per-call pricing is the honest catch with every closed model in a graph (the KB's external-api-nodes.md covers the tradeoffs), and Seedream is no exception - it's the single most common reason people bounce off API nodes and go back to something local. The flip side is the reason this node exists at all: you cannot run Seedream locally at any VRAM, so the only question is which door you go through.

    One last thing. retry_count lives on the model node, not here. Keep it at 1 while you're debugging so you see the real error instead of three identical failures.

    CategoryYogurtNodes/LLM/Providers

    Inputs (4)

    NameTypeDefaultDescription
    api_keySTRINGLeave empty to use 'byteplus' from api_key.json, then the BYTEPLUS_API_KEY environment variable.
    base_urlSTRINGDefault https://ark.ap-southeast.bytepluses.com/api/v3.
    proxy_urlSTRINGProxy URL, e.g. http://127.0.0.1:7890 or socks5://127.0.0.1:1080.
    timeoutINT00–3600Request timeout in seconds; 0 means no limit.

    Outputs (1)

    NameTypeDescription
    providerYOGURT_LLM_PROVIDER—