Nodes/Volcengine Seedance/Seedance 2.0 Generate (Volcengine)
ComfyUI Node

Seedance 2.0 Generate (Volcengine)

Seedance in ComfyUI without the VRAM question — it's an API call

By kuangrenaigc-stack·Created 3 months ago·Updated 3 months ago· 1
Seedance 2.0 Generate (Volcengine)
  • image
  • last_frame_image
  • video_path
  • video_url
  • last_frame_path
  • last_frame_url
  • task_id
  • status
  • response_json
api_key
prompt
modeldoubao-seedance-2-0-260128
resolution720p
ratioadaptive
duration5
seed-1
generate_audiotrue
watermarkfalse
return_last_framefalse
wait_for_resulttrue
download_videotrue
download_last_framefalse
poll_interval30
timeout_seconds1800
image_rolefirst_frame
first_frame_url
last_frame_url
reference_image_urls
reference_video_urls
reference_audio_urls
execution_expires_after172800
priority0
safety_identifier
callback_url
base_urlhttps://ark.cn-beijing.volces.com/api/v3
extra_json{}

The name is a small lie: nothing here runs on your GPU. Seedance 2.0 is ByteDance's flagship text-to-video model, and like everything else in the Seedream/Seedance line it is API-only - the weights were never released, and people who go looking for a 12 GB VRAM recipe get a one-line answer: "It's a closed model, API only." This node is the front door to that API, so you get Seedance 2.0's leaderboard-topping quality while your local machine just babysits the HTTP calls. If you already have a Volcengine Ark key, it's the fastest way to put a commercial-grade video model in an existing ComfyUI workflow without swapping out your whole setup.

How it works

Under the hood it's embarrassingly clean - which is the point. The pack uses only Python's standard library (urllib), so there's no heavy dependency to fight. The node assembles your prompt and any images into a JSON content array, POSTs it to the Ark endpoint (contents/generations/tasks), then, when wait_for_result is on, polls the task every poll_interval seconds until it hits a terminal status. On success it downloads the mp4 to ComfyUI/output/seedance/ and hands you the path.

The model string defaults to doubao-seedance-2-0-260128, and base_url defaults to the Ark v3 endpoint - you normally leave both alone.

Inputs that actually matter

You'll set maybe five of these, and the rest have sane defaults:

  • api_key - paste your Ark key here, or set ARK_API_KEY as an environment variable so it never lands in a shared workflow. The node checks the field first, then the env var.
  • prompt - text-to-video: prompt alone is enough.
  • image + image_role - wire a ComfyUI IMAGE in for first-frame image-to-video (first_frame), or use it as a style reference (reference_image). last_frame_image / last_frame_url set the end frame for first-and-last-frame generation.
  • resolution, ratio (adaptive, 16:9, 9:16, …), duration (5s default, up to 15), seed (-1 for random).
  • generate_audio (on by default), watermark (off by default - yes, that's a thing you can control).

There are also reference URL fields (reference_image_urls, reference_video_urls, reference_audio_urls) for public URLs, asset://... IDs, or data URIs - the README's "reference image + reference video" edit example maps straight onto them. extra_json merges arbitrary fields into the request body if Ark adds a parameter the node doesn't expose yet; it overrides auto-built content if you include content. callback_url and safety_identifier are for serious pipeline users; ignore them until you need them.

The three toggles that shape your workflow

wait_for_result (default true) blocks the whole ComfyUI queue until the job finishes, fails, or trips timeout_seconds (default 30 min). That's fine for an interactive run; for batch or queue-heavy use, turn it off, let the node return the task_id, and collect results later with the sibling Seedance Query Task node. download_video (default true) saves the mp4 locally; return_last_frame tells the API to also generate a last frame, which download_last_frame then pulls.

Outputs

Seven strings: video_path and video_url (the local file and the Ark-hosted URL), last_frame_path / last_frame_url when you asked for a last frame, plus task_id, status, and response_json for debugging. video_path is the one that feeds the rest of a workflow (e.g. into a VHS or preview node); task_id is what you hand to the Query node.

Install

Through ComfyUI Manager, search for "Volcengine Seedance", or clone it:

cd ComfyUI/custom_nodes
git clone https://github.com/kuangrenaigc-stack/ComfyUI-Volcengine-Seedance

Restart ComfyUI. There is no requirements.txt worth mentioning - no model downloads, no torch version headaches. The only setup that actually matters is the Ark account and key, which (fair warning) historically wanted a Chinese phone number, though third-party resellers exist.

Where people get burned

  • Blocked queue. wait_for_result sleeps on the ComfyUI execution thread. For long generations this freezes everything behind it - flip it off and query later.
  • Role conflicts. The API forbids mixing first/last-frame mode with multimodal reference inputs. The node catches the obvious ones - two first frames, or a last frame without a first - and raises a clear error, but the fix is on you: pick one mode.
  • Huge images. Anything wired into image gets base64-encoded as PNG into the request. A 4K frame is megabytes of base64; keep inputs reasonable or use URLs.
  • Task died. If the job ends failed/cancelled/expired, or the poll times out, the node raises with the raw error in response_json - paste that into the Ark docs before assuming the node is broken.

It's a thin, MIT-licensed wrapper around a paid API, and that's the right way to think about it: if you want Seedance 2.0 in your ComfyUI graph, this is the least-friction door to it.

CategoryVolcengine/Seedance

Inputs (29)

NameTypeDefaultDescription
api_keySTRING
promptSTRING
modelSTRINGdoubao-seedance-2-0-260128
resolutionCOMBO720p3 options: 720p, 480p, 1080p
ratioCOMBOadaptive7 options: adaptive, 16:9, 4:3, 1:1, 3:4, 9:16, +1
durationINT5-1–15
seedINT-1-1–4294967295
generate_audioBOOLEANtrue
watermarkBOOLEANfalse
return_last_frameBOOLEANfalse
wait_for_resultBOOLEANtrue
download_videoBOOLEANtrue
download_last_frameBOOLEANfalse
poll_intervalINT305–120
timeout_secondsINT180060–7200
image_roleCOMBOfirst_frame3 options: first_frame, reference_image, none
first_frame_urlSTRING
last_frame_urlSTRING
reference_image_urlsSTRING
reference_video_urlsSTRING
reference_audio_urlsSTRING
execution_expires_afterINT1728003600–259200
priorityINT00–9
safety_identifierSTRING
callback_urlSTRING
base_urlSTRINGhttps://ark.cn-beijing.volces.com/api/v3
extra_jsonSTRING{}
imageoptIMAGE
last_frame_imageoptIMAGE

Outputs (7)

NameTypeDescription
video_pathSTRING
video_urlSTRING
last_frame_pathSTRING
last_frame_urlSTRING
task_idSTRING
statusSTRING
response_jsonSTRING