Zhenzhen Doubao Seedance 2.0
The paid Comfly wrapper
- first_frame
- last_frame
- ref_image1
- ref_image2
- ref_image3
- ref_image4
- ref_image5
- ref_image6
- ref_image7
- ref_image8
- ref_image9
- video1
- video2
- video3
- audio1
- audio2
- audio3
- video
- task_id
- response
- video_url
- last_frame_image
Let's get the honest version out front: this node does not run a model on your machine. Comfly_Doubao_Seedance2_0 is a paid API client. You feed it a prompt (and optionally reference media), it ships the job to Doubao's Seedance 2.0 video model through the Comfly relay, waits for the render, and hands you back a video. No checkpoint downloads, no VRAM bar, just a per-generation bill. If you want Seedance-quality video without owning a 5090, that trade is the whole point of the Comfly pack.
Where this node earns its keep is references. Text-only works, but the fun starts when you wire in a first_frame image and a prompt like "the character from the first frame walks toward the camera" - Seedance 2.0 is genuinely good at character-consistent video. Beyond that you get last_frame for closing a loop, up to nine ref_image slots for style/subject grounding, three video references, three audio references, and a generate_audio toggle (default on) so Seedance produces sound instead of silence.
The inputs that actually matter
- prompt - multiline, required. Write it as a scene description, not a Midjourney one-liner.
- model -
doubao-seedance-2-0-260128or the-fastvariant. Fast is cheaper and worse; standard is the default for a reason. - duration - 4 to 15 seconds, step 1.
- ratio - 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, 9:21, or
adaptive. - resolution - 720p, 480p, or
native1080p. Native is what you want for final renders; 720p keeps the bill down while you iterate. - return_last_frame - flip this on and you get the final frame out as an image. Handy for chaining scenes or seeding the next video.
- watermark - default off, so you're not stuck with one.
Outputs: video (the VIDEO object - the README explicitly confirms these video outputs plug straight into ComfyUI's native Save Video node), plus task_id, response, video_url, and last_frame_image for the debug/asset side of things.
The asset bundle path
For heavy multi-reference jobs there's a newer, cheaper route: upload your media once with Comfly_Doubao_Seedance2_0_Asset (you get stable asset_ids back), bundle them with Comfly_Doubao_Seedance2_0_AssetIdBundle, and feed that into this node's asset_bundle input. It avoids re-uploading (and re-paying for) the same files on every run - the pack even ships a "seedance2.0 上传素材ID 多参工作流.json" example workflow for exactly this.
Install and key
Same as every Comfly node - grab the pack once and it's shared:
cd ComfyUI/custom_nodes
git clone https://github.com/ainewsto/Comfyui_Comfly
Restart ComfyUI, or just use ComfyUI Manager and search "Comfyui_Comfly". There are no models to download because nothing runs locally. You need an account and credits at https://ai.comfly.chat - put the key in Comflyapi.json (or the Comfly_api_set node) and every node in the pack reads it. The per-node apikey input is just an override.
Where people get burned
It's a paid, async call that takes minutes - a run isn't free retry practice. The good news: failed tasks refund, and the relay keeps async task logs at ai.comfly.chat so you can see exactly what the API said instead of guessing. And since this is a third-party relay, outages happen; that's what the hk/us fallback lines in Comfly_api_set exist for. Author only tests on Windows 11, so if you're on Linux or macOS and something odd happens, issues page is the way in.
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| model | COMBO | doubao-seedance-2-0-260128 | 3 options: doubao-seedance-2-0-260128, doubao-seedance-2-0-fast-260128, doubao-seedance-2.0-mini |
| duration | INT | 54–15 | — |
| ratio | COMBO | 16:9 | 8 options: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, +2 |
| resolution | COMBO | 720p | 7 options: 720p, 480p, native1080p, 1080p, 2k, 4k, +1 |
| apikeyopt | STRING | — | |
| first_frameopt | IMAGE | — | |
| last_frameopt | IMAGE | — | |
| ref_image1opt | IMAGE | — | |
| ref_image2opt | IMAGE | — | |
| ref_image3opt | IMAGE | — | |
| ref_image4opt | IMAGE | — | |
| ref_image5opt | IMAGE | — | |
| ref_image6opt | IMAGE | — | |
| ref_image7opt | IMAGE | — | |
| ref_image8opt | IMAGE | — | |
| ref_image9opt | IMAGE | — | |
| video1opt | VIDEO | Reference video input. | |
| video2opt | VIDEO | Reference video input. | |
| video3opt | VIDEO | Reference video input. | |
| audio1opt | AUDIO | Reference audio input. | |
| audio2opt | AUDIO | Reference audio input. | |
| audio3opt | AUDIO | Reference audio input. | |
| generate_audioopt | BOOLEAN | true | — |
| return_last_frameopt | BOOLEAN | false | — |
| web_searchopt | BOOLEAN | false | — |
| watermarkopt | BOOLEAN | false | — |
| seedopt | INT | -1-1–2147483647 | — |
| asset_bundleopt | STRING | Wire from «Asset ID Bundle» output. JSON built from Asset Upload asset_id strings per slot. | |
| skip_erroropt | BOOLEAN | false | 开启后,节点失败时不报错、按旧行为返回默认空结果;关闭时(默认)失败直接抛出错误。 |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task_id | STRING | — |
| response | STRING | — |
| video_url | STRING | — |
| last_frame_image | IMAGE | — |