ModelArk Seedance 2.0 (Soze)
No Local GPU, Just an ARK_API_KEY
- first_frame_image
- last_frame_image
- reference_image_1
- reference_image_2
- reference_image_3
- reference_image_4
- reference_image_5
- reference_image_6
- reference_image_7
- reference_image_8
- reference_image_9
- reference_video_1
- reference_video_2
- reference_video_3
- reference_audio_1
- reference_audio_2
- reference_audio_3
- video
- video_url
- last_frame_image
- last_frame_url
- task_id
- config
- status
Seedance is ByteDance's flagship video line, and like every flagship ByteDance generation model it is API-only - you will never download these weights, no matter how good your GPU is. ModelArk Seedance 2.0 is the node that talks to the API directly: it submits a task to BytePlus's ModelArk endpoint, polls until the video is done, and hands you the finished clip as a ComfyUI VIDEO. Cloud video generation with no local diffusion, no VRAM, and a per-run bill.
The setup is two environment variables: ARK_API_KEY (required) and optionally ARK_BASE_URL if your account lives in a different region than the default Asia-Pacific Southeast host. There's also a second, easy-to-miss requirement: if you connect any image, video, or audio reference, the node uploads it to FAL's CDN so ModelArk can fetch it at a public URL - which means media-input runs also need FAL_KEY. The generation itself is entirely on ModelArk's side; FAL is just being used as a file host. Don't skip that key and wonder why reference runs 401.
Inputs that matter
tier-standardvsfast, which map todreamina-seedance-2-0-260128and its-fast-sibling. Fast is cheaper/quicker, standard is the full quality tier.prompt- the creative load, plus a separatenegative_promptif you know what you don't want.resolution- 480p / 720p / 1080p.ratio- the usual 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 menu.duration--1for auto (ModelArk picks) or an explicit 4–15 seconds.generate_audio- on by default. Turn it off if you want silent clips (cheaper, and lets you score it yourself later).seed- 0 to 2^32; 0 means ModelArk picks. Don't expect tight reproducibility from a cloud API anyway.
The reference slots are where Seedance gets interesting: up to nine reference_image_N, three reference_video_N, three reference_audio_N, plus first_frame_image / last_frame_image for image-to-video or first/last-frame animation. Here's the convention that bites people: references are cited in the prompt with @Image1, @Video2, @Audio3. Slots alone do nothing useful - the model only applies them where you point at them in the text. "Make the character from @Image1 walk through the room from @Video2" is the shape of a real prompt.
Outputs & the last-frame trick
You get video and video_url, plus task_id and a config string describing what was actually submitted. There's also last_frame_image and last_frame_url - but only populated if you turn on return_last_frame. That's a genuinely handy output for chaining: video out, last frame out, feed the frame into a second pass. If you don't enable it, the image output is just a blank placeholder, so don't wire it up and wonder why it's black.
Install & notes
cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt
Then export ARK_API_KEY (and FAL_KEY for any reference media). A submission that's blank on every front - no prompt, no frames, no references - short-circuits without spending a call, which is the kind of small mercy batch workflows appreciate. Watch poll_timeout (default 600s): cloud video tasks are minutes, not seconds, and an impatient timeout just wastes the run you already paid for.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| tier | COMBO | standard | 'fast' uses the *-fast-* model id. |
| prompt | STRING | — | |
| resolution | COMBO | 720p | 3 options: 480p, 720p, 1080p |
| ratio | COMBO | 16:9 | 6 options: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 |
| duration | COMBO | -1 | -1 = auto (ModelArk picks). 4-15 = explicit seconds. |
| generate_audio | BOOLEAN | true | — |
| seed | INT | 00–4294967296 | 0 = let ModelArk choose. Max 4294967296 (2^32) per ModelArk API. |
| negative_promptopt | STRING | — | |
| return_last_frameopt | BOOLEAN | false | If True, the task also returns the final frame in the response. |
| callback_urlopt | STRING | Optional webhook ModelArk will hit when the task completes. | |
| first_frame_imageopt | IMAGE | Optional first-frame anchor (role=first_frame). Use for image-to-video or FF/LF; leave empty for pure reference-to-video. | |
| last_frame_imageopt | IMAGE | Optional last-frame anchor (role=last_frame). Pair with first_frame_image for FF/LF. | |
| poll_intervalopt | INT | 51–60 | Seconds between status polls. |
| poll_timeoutopt | INT | 60030–3600 | Max seconds to wait for the task before giving up. |
| reference_image_1opt | IMAGE | Reference image slot 1 (role=reference_image). Cite as @Image1 in the prompt. | |
| reference_image_2opt | IMAGE | Reference image slot 2 (role=reference_image). Cite as @Image2 in the prompt. | |
| reference_image_3opt | IMAGE | Reference image slot 3 (role=reference_image). Cite as @Image3 in the prompt. | |
| reference_image_4opt | IMAGE | Reference image slot 4 (role=reference_image). Cite as @Image4 in the prompt. | |
| reference_image_5opt | IMAGE | Reference image slot 5 (role=reference_image). Cite as @Image5 in the prompt. | |
| reference_image_6opt | IMAGE | Reference image slot 6 (role=reference_image). Cite as @Image6 in the prompt. | |
| reference_image_7opt | IMAGE | Reference image slot 7 (role=reference_image). Cite as @Image7 in the prompt. | |
| reference_image_8opt | IMAGE | Reference image slot 8 (role=reference_image). Cite as @Image8 in the prompt. | |
| reference_image_9opt | IMAGE | Reference image slot 9 (role=reference_image). Cite as @Image9 in the prompt. | |
| reference_video_1opt | VIDEO | Reference video slot 1 (role=reference_video). Cite as @Video1 in the prompt. | |
| reference_video_2opt | VIDEO | Reference video slot 2 (role=reference_video). Cite as @Video2 in the prompt. | |
| reference_video_3opt | VIDEO | Reference video slot 3 (role=reference_video). Cite as @Video3 in the prompt. | |
| reference_audio_1opt | AUDIO | Reference audio slot 1 (role=reference_audio). Cite as @Audio1 in the prompt. | |
| reference_audio_2opt | AUDIO | Reference audio slot 2 (role=reference_audio). Cite as @Audio2 in the prompt. | |
| reference_audio_3opt | AUDIO | Reference audio slot 3 (role=reference_audio). Cite as @Audio3 in the prompt. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| last_frame_image | IMAGE | — |
| last_frame_url | STRING | — |
| task_id | STRING | — |
| config | STRING | — |
| status | STRING | — |