PixVerse LipSync
Make any video talk, and mean it
- referenceVideos
- speech
- video
PixVerse LipSync is the node that makes characters actually talk on cue. You hand it a video of a face and an audio track, and it resyncs the mouth to the words - a vocal performance layered onto footage you already have. This is the classic dubbing, meme, and character-animation move, and it's normally locked inside PixVerse's own web app. The Runware pack breaks it out as a node that returns a native VIDEO.
The mechanism is worth understanding before you queue it: this isn't generating the person or the scene, it's warping a face's mouth region to match speech. So the two things that matter are the source video (a clear, front-facing face that stays in frame) and the audio (the words it has to match). Everything else is polish.
What you actually set
referenceVideos- required, and it's a builder socket, not a file picker. You'll use aRunware/Paramsreference-videos node to supply the clip. The pack's model nodes stay clean; the media hangs off a typed builder.audio- aSTRINGtaking a UUID or URL of the speech track. So you need that audio somewhere reachable: uploaded to Runware, or hosted at a URL.speech- aRUNWARE_SPEECHbuilder socket, which is the alternative path when you're not supplying audio directly.numberResults- up to 4 takes, each seeded differently.outputFormat-MP4(default),WEBM, orMOV.
Output is a single video socket of type VIDEO. It'll preview in a video node and save to your output folder. Two-node workflow at minimum: a reference-videos builder feeding this, and a video preview out the back.
Install
Standard pack install, once: ComfyUI Manager → search Runware → install → restart, or
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Runware API key into ComfyUI Settings → Runware API key (or RUNWARE_API_KEY). Nothing heavy to install - runware-sdk, pillow, soundfile - and no model weights anywhere on your disk.
Where people get burned
- Garbage in, garbage out. A side-profile face, heavy occlusion, or someone turning away mid-clip will produce mushy lip warping. Front-facing and steady wins.
safety.modedefaults tonone. Content checking is off unless you turn it on (fastorfull). That's your call, but know it's there.- Audio has to be reachable. A local file path won't work for the
audiostring - it wants a UUID (from an upload) or a hosted URL. This is the most common "why is it failing" moment with the media-input nodes in this pack. - Video runs cost. One lip-sync pass is a paid cloud run; four variations are four paid runs. Watch the title-bar cost.
The honest take: it's a fun, narrow tool, and it does exactly one job well. If your workflow is characters talking, it beats splicing audio and hoping. If you never need speech on video, there are more general PixVerse nodes in the pack.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| referenceVideos | RUNWARE_REFERENCEVIDEOS | — | |
| speechopt | RUNWARE_SPEECH | — | |
| audioopt | 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. |
| 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. |
| 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 | — |