VolcengineChat(NYJY)
A vision-capable Doubao chat node that runs inside ComfyUI
- images
- Answer
Most LLM-in-ComfyUI is local - ollama nodes, llama.cpp, that whole dance of quantization and VRAM math. VolcengineChat is the other direction: it calls ByteDance's Doubao Seed model over the cloud API and drops the answer straight into your graph. Zero VRAM, no model download, and - the reason it stands out - it's a vision model by default, so it can look at the images already sitting in your workflow.
It's part of ComfyUI_NYJY, aidenli's pack whose Volcengine section is basically a thin client for ByteDance's Volcano Engine cloud. ByteDance's flagship models are famously API-only - the Seedream image line, Seedance video, and Doubao chat all ship closed, as the KB's ByteDance panel notes - so this node is the way a ComfyUI user actually touches them.
How it works. The node talks to the Volcano Engine Ark endpoint (https://ark.cn-beijing.volces.com/api/v3), streaming the reply. If you wire images in, each image is converted to a base64 data URL and sent along with the prompt, which is how the vision side works. The thinking input (disabled / enabled / auto) controls the reasoning pass - handy for prompt-refinement jobs where you want the model to think before answering, and off when you want speed.
The inputs that matter:
model- defaultdoubao-seed-1-6-vision-250815(the date is the build, 2025-08-15). It's a text field, so you can type any Ark model ID.prompt- your instruction.images- optional; any IMAGE you connect makes this a vision call. This is where the node earns its keep: caption the image currently in your graph, ask it to write a prompt for it, check composition.max_tokens- default 4096, up to 8192. Bump it for long outputs.api_key- leave empty to use the pack config, or paste a key here to override.
Output. A single Answer string. Wire it into a text display, a prompt encoder, or a JsonLoads node when the model returns structured data.
The API key is the actual project. You need a Volcano Engine (火山引擎) Ark key. Either paste it into the node's api_key field or write it once into config.json in the pack folder (copy config.json.template, set "volcengine": { "api_key": "..." }). The friction is the sign-up: Ark is ByteDance's China cloud, and getting a key has historically meant real-name verification and mainland credentials, which is a wall for non-China users - community reports of "I couldn't get an API key because you need a Chinese ID" are from 2025 and the situation improves only patchily with Volcengine's newer international onboarding. Scope out whether you can even register before you build a workflow around it.
The gotcha. When the call fails, the node doesn't error the queue - it returns the error text as the Answer output. So a node that outputs something that reads like an exception message means "check the console and your key", not "the model said this". The console also streams the tokens live as it answers, which is actually nice for watching long generations.
Install. It ships with the pack; the node itself needs volcengine-python-sdk[ark]:
cd ComfyUI/custom_nodes
git clone https://github.com/aidenli/ComfyUI_NYJY
pip install -r requirements.txt
or ComfyUI Manager → "Install via Git URL" → https://github.com/aidenli/ComfyUI_NYJY. The requirements are heavy because the pack also ships local captioning; if you only want the cloud nodes, volcengine-python-sdk[ark] is the one that matters.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | STRING | doubao-seed-1-6-vision-250815 | — |
| prompt | STRING | — | |
| imagesopt | IMAGE | — | |
| thinkingopt | COMBO | disabled | 3 options: disabled, enabled, auto |
| api_keyopt | STRING | — | |
| max_tokensopt | INT | 40961–8192 | — |
| seedopt | INT | 00–2147483647 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Answer | STRING | — |