BytePlus Create Audio Asset
Keep a voice clip where Seedance can find it
- audio
- asset_id
- group_id
- asset_uri
- info
Seedance 2.5's reference-to-video is multimodal - you can hand it an image, a video and an audio clip, and the audio becomes part of what the generated shot sounds like. Audio goes in as a URL or as an asset, and an asset is what survives between runs. So this node does for sound what its image and video siblings do for pictures: it registers a clip in your BytePlus private asset library and returns an asset_id you can drop into any later workflow.
It's the least-used of the three create nodes, and honestly the most likely one to be overkill. If your audio comes out of a TTS node in the same graph, wiring it straight into the reference-to-video node's reference_audio_N input is fine - the node handles it. Register an asset when the same clip has to show up in ten different runs, or when you're building a library of voice drops you want to reach for by name.
How it works
CreateAsset only accepts an HTTPS URL, so a connected audio input is converted to WAV and uploaded to Comfy.org storage first (Comfy.org login needed), then registered in a group; the node polls until the asset goes Active - up to ten minutes - because Seedance won't take a Processing asset. Re-running with the same clip reuses the same asset instead of spawning duplicates.
BytePlus's rules for an audio asset are narrow: WAV or MP3, 2 to 30 seconds, and no more than 15 MB. That's a sound effect or a line of dialogue, not a music bed.
Inputs and outputs
audio(optional) is the clip to register.audio_urlis the public-HTTPS route that skips the Comfy.org upload entirely - the one to use if you already have the file hosted somewhere.group_idjoins an existing group; leave it empty andgroup_namefinds or creates the virtual-portrait (AIGC) group by exact name.asset_name,project_nameandwait_until_activeare housekeeping. Leavewait_until_activeon unless you enjoy debugging failures from three nodes downstream.- Outputs:
asset_id,group_id,asset_uriandinfo(JSON). Theasset_idis what you connect to anasset_Ninput on BytePlus Seedance 2.5 Reference to Video.
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, or install through Manager by searching BytePlus ModelArk. This node needs the ModelArk API key, IAM AK/SK with asset-library permission, and Dreamina Seedance Advanced Creation Rights. Put them in Settings → BytePlus or user/.env (BYTEPLUS_API_KEY, BYTEPLUS_ACCESS_KEY, BYTEPLUS_SECRET_KEY).
Where people get burned
Two things bite here. First, Comfy.org storage: without a Comfy.org login, a connected clip can't be uploaded, so audio_url becomes your only path. Second, the length limit - people try to register a full song and get rejected at 31 seconds. Audio assets are for short reference material; if you want a 2-minute voiceover to land in a video, that's a Seed Audio or TTS job, not this node.
And the standing warning for the whole asset library: it's for media you're authorized to use. That's why BytePlus gates the feature behind Advanced Creation Rights in the first place.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| group_id | STRING | Reuse 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. | |
| audio_url | STRING | Public HTTPS URL of a .wav or .mp3 file, used instead of the audio input: sent straight to CreateAsset without a Comfy.org upload. | |
| group_name | STRING | ComfyUI Virtual Portraits | Used when group_id is empty: the virtual portrait (AIGC) group, matched by exact name and created if missing. Use one group per person. |
| asset_name | STRING | ComfyUI audio | Name of the new asset. |
| project_name | STRING | default | ModelArk project that holds the asset library. |
| wait_until_active | BOOLEAN | true | Wait (up to 10 min) until the asset is Active and can be used in Seedance. |
| audioopt | AUDIO | Audio to register as a personal asset (2-30 s). Leave unconnected to use audio_url instead. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| asset_id | STRING | — |
| group_id | STRING | — |
| asset_uri | STRING | asset://<asset_id>, for inputs that take URIs. |
| info | STRING | The asset as JSON. |