Nodes/ComfyUI-BytePlus-ModelArk/BytePlus Create Video Asset
ComfyUI Node

BytePlus Create Video Asset

Put a clip in Seedance's reference library

By byteplus-sa·Created 8 days ago·Updated about 8 hours ago· 3
BytePlus Create Video Asset
  • video
  • asset_id
  • group_id
  • asset_uri
  • info
◄group_id►
◄video_url►
◄group_nameComfyUI Virtual Portraits►
◄asset_nameComfyUI video►
◄project_namedefault►
◄wait_until_activetrue►

Reference-to-video is where Seedance earns its keep - feed it a clip and it can edit it, extend it, or keep a person's motion consistent across a new shot. The catch is that Seedance 2.0/2.5 want references as links, and a clip sitting in your ComfyUI output folder isn't a link. This node is the bridge: it registers a video as a private BytePlus asset and gives you an ID that works in every later run.

If you're extending a video you just generated, and it's long enough that re-uploading it every single run is annoying, this is the node that stops the churn.

How it works

CreateAsset takes an HTTPS URL only. A connected video is therefore uploaded to Comfy.org storage first - which means a Comfy.org login is required unless you supply video_url yourself. The asset is then created in a group and the node polls until BytePlus flips it to Active (up to ten minutes), because a Processing asset is not usable as a Seedance reference. Re-running with the same media reuses the existing asset rather than piling up duplicates.

Inputs and outputs

  • video (optional) is the clip to register; video_url is the public-HTTPS alternative that skips the Comfy.org upload.
  • group_id for an existing group (a virtual-portrait AIGC group, or a verified real person's group), or leave it empty and group_name finds or creates one by exact name. One group per person or per project keeps this manageable.
  • asset_name, project_name and wait_until_active are the housekeeping trio. I'd leave wait_until_active on: it costs you a wait, and it saves you a confusing failure three nodes later.
  • Outputs: asset_id, group_id, asset_uri and info (the asset as JSON). Feed asset_id to an asset_N socket on BytePlus Seedance 2.5 Reference to Video - that's the whole payoff.

The clip has to fit BytePlus's asset rules, which are stricter than "it's an mp4": 2 to 30 seconds, 407,696 to 8,295,044 total pixels (so a vertical short in the right ballpark and nothing tiny), 24–60 fps, and under 200 MB.

Install and keys

cd ComfyUI/custom_nodes
git clone https://github.com/byteplus-sa/ComfyUI-BytePlus-ModelArk
pip install -r ComfyUI-BytePlus-ModelArk/requirements.txt

Restart after that (ComfyUI 0.31.0+), or grab it via Manager by searching BytePlus ModelArk. For this node you need all three credential sets: the ModelArk key, IAM AK/SK with asset-library permission, and Advanced Creation Rights. Set them in Settings → BytePlus or in user/.env as BYTEPLUS_API_KEY, BYTEPLUS_ACCESS_KEY, BYTEPLUS_SECRET_KEY. Only the ModelArk key gets validated at save time; the others fail at run time instead.

Where people get burned

The Comfy.org login trips people up more on this node than anywhere else in the pack, because video is the file you least want to re-upload - and if Comfy.org storage isn't available, nothing goes to CreateAsset. If you're already hosting clips somewhere public (S3, a CDN, your own box), video_url is the smoother road.

Second: don't register a video just to use it once. If the clip lives in the same workflow that consumes it, connecting it directly to Reference to Video's reference_video_N inputs is fine - the node handles the upload for you. This node is worth it when the same reference shows up across many runs and many workflows, because then the asset ID is a stable thing you can paste into anything.

Third, the familiar asset-library trap: these are authorized media. Registering someone else's footage is on you, not on the node.

CategoryBytePlus ModelArk

Inputs (7)

NameTypeDefaultDescription
group_idSTRINGReuse an existing asset group ID to add more assets of the same person: a virtual portrait (AIGC) group, or a verified real person's LivenessFace group. Leave empty to find or create the virtual portrait (AIGC) group named group_name. Real-person verification is a QR-code flow in the ModelArk console (BytePlus has no API for it), so unlike ComfyUI core's node this node does not start it: verify the person in the console, then paste the group ID here.
video_urlSTRINGPublic HTTPS URL of the video (mp4/mov), used instead of the video input: sent straight to CreateAsset without a Comfy.org upload.
group_nameSTRINGComfyUI Virtual PortraitsUsed when group_id is empty: the virtual portrait (AIGC) group, matched by exact name and created if missing. Use one group per person.
asset_nameSTRINGComfyUI videoName of the new asset.
project_nameSTRINGdefaultModelArk project that holds the asset library.
wait_until_activeBOOLEANtrueWait (up to 10 min) until the asset is Active and can be used in Seedance.
videooptVIDEOVideo to register as a personal asset. Leave unconnected to use video_url instead.

Outputs (4)

NameTypeDescription
asset_idSTRING—
group_idSTRING—
asset_uriSTRINGasset://<asset_id>, for inputs that take URIs.
infoSTRINGThe asset as JSON.