Volcengine video to video lip sync
Make a face say your audio, as a node
- video_url
- audio_url
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
What it is
KIE_Next_volcengine_video_to_video_lip_sync_77b9f652 takes a video of a person and an audio clip, and returns the same video with the mouth moving to that audio. It's Volcengine's (ByteDance's cloud) lip-sync service, reached through KIE.ai's marketplace, wrapped as a single ComfyUI node with a VIDEO input, an AUDIO input and a VIDEO output.
This is the API route to the thing people usually solve locally with audio-driven avatar models - talking-head generation from a driving voice. Local options exist and they're decent, but they're a whole dependency stack, and they want a GPU that's already busy. If what you need is "this shot, this voice, done", paying per call is a reasonable trade, and the node means the result lands in your graph ready for the rest of your edit.
The honest caveats, same as any API node: your footage leaves your machine, and your KIE credit balance absorbs the cost.
How it works
The node assembles the request, submits it to KIE's task queue, then waits for it, polling at 2.5-second intervals and backing off toward 15 until the job resolves or timeout_seconds (1200 by default, up to 7200) expires. On success it downloads the result and hands back a native ComfyUI VIDEO object. The model travels as KIE's marketplace id for Volcengine's lip-sync endpoint.
The nice part is that media handling is automatic. The video_url and audio_url fields are real VIDEO and AUDIO sockets, so you can wire a loaded video and a TTS output straight in - the pack uploads both to KIE for you and substitutes the URLs. No hosting, no copy-pasting links.
The inputs
mode- required, and worth understanding before you queue:liteis for single-person frontal footage and is the faster option;basicis for single-person complex scenes and adds scene segmentation and speaker identification. Start onlite.video_url- required, aVIDEOsocket. Documented limits matter here: 360p to 1080p (above 1080p gets compressed down, below 360p isn't accepted), MOV/MP4/HDR with H.264 recommended, 24–60 fps, max 500 MB. Other formats or codecs may get transcoded behind the scenes.audio_url- required, anAUDIOsocket, and the docs describe it as pure vocal audio: mpeg, wav, aac, mp4 or ogg, max 10 MB. A track with music in it is not what this wants.separate_vocal- false by default. Turn it on and the service tries to suppress background noise in the audio before driving the mouth with it.open_scenedet- false by default, usable only inbasicmode. Scene segmentation and speaker identification.align_audio- true by default, and this one is a real editorial decision: inlitemode it loops the video when the audio is longer than the picture, instead of letting the audio run past the end.align_audio_reverse- false by default,liteonly, and it needsalign_audioon to mean anything: loops the video backwards instead of forwards.templ_start_seconds- 0 by default,liteonly: a start offset into the template video, in seconds.
Outputs
video - the lip-synced clip as a native ComfyUI video. url - the primary result URL. all_urls_json - every URL the response contained. task_id - the job handle, handy if you want to poll or keep a record. raw_json - the full provider response, where failure reasons live. credits_consumed and credits_left - what the call cost.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt
Restart ComfyUI. Dependencies are requests, Pillow, numpy, PyYAML - no models to download and no local inference at all. There's a one-click Windows installer in the repo's dist/ folder for anyone who'd rather skip the shell. ComfyUI Manager support is where the project is headed (the repo carries registry metadata under publisher felipeosilva); the clone is the install that works now.
Paste your KIE.ai key once at Settings → KIE.ai Nodes Next → Connection - validated before it replaces a working key, shown only as a masked fingerprint. KIE_API_KEY in the environment overrides the saved key on headless installs.
What'll bite you
Two people in frame. Both modes are documented as single-person; the extra face confuses the driver.
Music instead of a voice. The audio side wants clean vocals, and 10 MB is a hard ceiling. Run a TTS output or a separated vocal stem in, not a full mix - the stem separation node in this same pack is a sensible upstream.
Odd footage. Under 360p, over 1080p, or an exotic codec: expect a transcode, a compression, or a rejection. Pre-transcoding to H.264 MP4 in the 720p–1080p band is the cheap way to remove a variable.
A timeout that looks like a failure. These jobs can outlast the default wait. Check task_id with KIE • Task Status or KIE • Wait for Task before resubmitting, because a resubmit is another paid call.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | lite | Service mode for lip-sync generation. - `lite`: For single-person frontal videos. Faster processing. - `basic`: For single-person complex scenes. Supports scene segmentation and speaker identification. |
| video_url | VIDEO | — | |
| audio_url | AUDIO | — | |
| separate_vocalopt | BOOLEAN | false | Enable vocal separation to suppress background noise. Default value: `false`. |
| open_scenedetopt | BOOLEAN | false | Whether to enable scene segmentation and speaker identification. Supported only in Basic mode. Default value: `false`. |
| align_audioopt | BOOLEAN | true | Supported in Lite mode. Whether to loop the video when the audio is longer than the video. Default value: `true`. |
| align_audio_reverseopt | BOOLEAN | false | Supported in Lite mode. Whether to loop the video in reverse (backward). Requires `align_audio` to be set to `true`. Default value: `false`. |
| templ_start_secondsopt | FLOAT | 0.00-10000–10000 | Supported in Lite mode. Start time of the template video, in seconds. Default value: `0`. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |