Nodes/ComfyUI-ArkVideoGenerate/Ark Video Generate (Volces)
ComfyUI Node

Ark Video Generate (Volces)

Seedance and Wan, straight from your ComfyUI graph — for a price

By zl9739379·Created about a year ago·Updated about a year ago· 4
Ark Video Generate (Volces)
  • first_frame_image
  • last_frame_image
  • frames
  • frame_count
api_key
model
prompta cat is dancing
resolution720p
ratio16:9
duration5
fps24
seed-1
watermarkfalse
camera_fixedfalse
callback_url

This node does the opposite of what most ComfyUI video nodes do. It doesn't load weights onto your GPU and it doesn't sample a thing locally. ArkVideoGenerate phones ByteDance's Volcengine cloud, waits for a video to come back, and hands you a tensor. No VRAM, no model download, no local diffusion at all. The price of admission is a paid Volcengine account, an API key, and the patience to watch a queue.

Why would you want that? Because of one model on the dropdown: doubao-seedance-1-0-pro-250528. Seedance is ByteDance's flagship video model, and per the classic ByteDance posture, the flagship stays on the API - it has never been and almost certainly will never be open-weighted. This node is one of the few ways to run Seedance inside your normal ComfyUI graph instead of pasting prompts into a web console. If you have a GPU that already runs Wan 2.1 happily, honestly skip this pack's wan2-1-14b-flf2v option and run Wan locally - that model is free on your disk. The draw here is Seedance-grade quality at 1080p without buying a bigger card.

How it works. The mechanism is refreshingly transparent once you read the source. The node builds your prompt text, then appends your settings as flag tokens: --resolution 720p --ratio 16:9 --duration 5 --fps 24 --seed -1 --watermark false --camera_fixed false. That's not a hack - it's literally how Volcengine's Ark content-generation API parses parameters, and the official SDK handles it. Any images you feed in get base64-encoded and attached with first_frame / last_frame roles. Then it creates a task, polls the API every 3 seconds until the status flips to succeeded, downloads the MP4 to ComfyUI/output/ark_video/{task_id}.mp4, and decodes it with OpenCV into a (T, H, W, C) 0–1 float tensor. One thing to know up front: this is a blocking node. It holds its queue slot for however many minutes the cloud takes, so don't put ten of them in a batch and expect a quick afternoon.

Inputs that matter. The only truly required one is api_key - a plain string, no default, and nothing happens without it. model is a two-choice dropdown (Seedance Pro or hosted Wan 2.1 FLF2V). Then the quick settings: resolution (480p/720p/1080p), ratio (from 16:9 through 9:21, plus keep_ratio and adaptive), duration (5 or 10s), and fps (16 or 24). seed defaults to -1 for random. watermark and camera_fixed pass straight through as flags - turn the watermark on if you want the safety net, off if you hate it. The two IMAGE inputs are the interesting part: first_frame_image is your I2V anchor, last_frame_image optionally locks the ending - but it requires a first frame, enforced in code with a ValueError, so don't wire a last frame alone. callback_url is optional and the node polls regardless, so you can mostly ignore it.

Outputs. Two: frames, an IMAGE tensor (T, H, W, C) in 0–1, and frame_count, an INT of how many frames you got. Wire frames straight into a video preview or save node (or a VHS-style loader for downstream work). That's the whole pipeline - cloud in, tensor out.

Install. Clone it into your custom nodes and restart:

cd ComfyUI/custom_nodes/
git clone https://github.com/zl9739379/ComfyUI-ArkVideoGenerate

ComfyUI Manager may not list it - it's a small pack (this page sees about three impressions a month) - so the clone is the reliable path. requirements.txt pulls in the official volcengine-python-sdk[ark], plus numpy, Pillow and torch. The code also imports cv2 and requests, which aren't in that file - ComfyUI bundles opencv-python and requests in its own environment, so it usually just works. If you hit a ModuleNotFoundError: cv2, pip install opencv-python fixes it.

Troubleshooting. The README's list is short and honest. "Cannot open video" means the download was incomplete - bad network, retry. API calls failing usually means a wrong key or no balance left, and "status stuck pending" just means the cloud queue is busy; it's a server-side queue, so waiting is the correct move. The one gotcha nobody mentions: the key is a per-node plain-text input, so a workflow JSON you share contains your API key. Use a throwaway key for anything you post publicly, or rotate it after.

Also worth knowing: this pack is essentially untested by the community - I found zero meaningful discussion of it anywhere. It's a one-person, MIT-licensed bridge, so treat your first run as a probe: short clip, low resolution, watch what the console prints. The mechanism is sound, but this is a "verify before you trust it in a production workflow" situation.

Categoryvideo

Inputs (13)

NameTypeDefaultDescription
api_keySTRING
modelCOMBO2 options: doubao-seedance-1-0-pro-250528, wan2-1-14b-flf2v
promptSTRINGa cat is dancing
resolutionCOMBO720p3 options: 480p, 720p, 1080p
ratioCOMBO16:99 options: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, +3
durationCOMBO52 options: 5, 10
fpsCOMBO242 options: 16, 24
seedINT-1-1–4294967295
watermarkCOMBOfalse2 options: false, true
camera_fixedCOMBOfalse2 options: false, true
first_frame_imageoptIMAGE
last_frame_imageoptIMAGE
callback_urloptSTRING

Outputs (2)

NameTypeDescription
framesIMAGE
frame_countINT