KlingAI Lip-Sync
New audio for an existing video, done in the cloud
- video
Dubbing done right is a pain in the neck. This node is the shortcut: you give it an existing video and an audio track, and Kling re-animates the mouth to match the new audio. No required prompt, no reference images - just video and audio in, a re-synced VIDEO out. It's Kling AI Lip-Sync, and it's the node that turns "I need to change what this person says" from a reshoot into a single cloud call.
Why you'd reach for it
Local lip-sync tooling exists but it's fiddly - face mesh, audio conditioning, and a lot of nodes that occasionally melt down. This is one node doing the whole job on Runware's GPUs: keep the performance, replace the words. That covers localization, fixing a botched line, ADR, or just swapping in a different take of dialogue. The providerSettings give you real control over the mix, which is the part people usually miss.
How it works
Both required inputs are strings: video and audio each take a URL, a file path, or a Runware media UUID. They go to the Runware REST API via the runware SDK, Kling regenerates the mouth/lip motion to the new track, and the result returns as a native ComfyUI VIDEO. Because the inputs are references rather than tensors, you can point it at anything Runware can fetch - including clips you've already generated in the same graph.
Inputs that matter
video(STRING) - required. The source clip (URL/path/UUID).audio(STRING) - required. The new audio track (URL/path/UUID).providerSettings.klingai.originalAudioVolume(0–2, default 1) - how much of the source clip's original sound survives. Set 0 to kill it completely.providerSettings.klingai.soundVolume(0–2, default 1) - the volume of the newly generated audio. These two are how you balance old ambience against new speech.numberResults(1–4) - variations, each a separate cost.outputFormat(MP4/WEBM/MOV),outputQuality(95).safety.mode-none/fast/fullcontent checking.
Output: one video socket (VIDEO type).
Install and the API key
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart ComfyUI (or Runware via ComfyUI Manager). Key from the Runware dashboard → Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Gotchas
- The inputs are strings, not VIDEO/AUDIO tensors. Trying to wire a video node's output directly in will fail - export/reference it by path or URL first.
- Head-turns and profile shots are where lip-sync degrades first; straight-on, talking-to-camera footage gives the cleanest result.
- It's closed Kuaishou tech, paid per run, with the cost printed on the title bar. Loop with
numberResultsat 1. - If your source audio has useful ambience you want to keep, raise
originalAudioVolume- the default blend is often better than going full mute.
For anyone who's ever re-recorded a line and wished the mouth would just follow, this node is the fix that's actually good.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| video | STRING | Video input (UUID or URL). | |
| audio | STRING | Audio input (UUID or URL). | |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| providerSettings.klingai.originalAudioVolumeopt | FLOAT | 1.000–2 | Volume level of original audio from input video. 0 removes the original audio completely; higher values blend it with the new synchronized audio. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| safety.modeopt | COMBO | fast | Safety checking mode for video generation. |
| providerSettings.klingai.soundVolumeopt | FLOAT | 1.000–2 | Volume level of generated audio. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP4 | File format for the generated video. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |