Workflow LipSync (FlowChain ⛓️)
Drive Wav2Lip Studio from ComfyUI — the one FlowChain node with a real dependency
- frames
- audio
- faceswap_image
WorkflowLipSync is FlowChain's odd one out. The other four nodes in the pack are about turning workflows into callable boxes; this one is a remote control for a separate desktop app. It drives LipSync Studio v0.6 - a third-party Wav2Lip-based video app sold on Patreon by the same author who writes FlowChain - through its Gradio API, so you can generate lip-synced, face-swapped talking videos without leaving ComfyUI. If you don't own Wav2Lip Studio, this node does nothing for you. Full stop, no substitute.
It's also the reason the pack ships a dependency at all. The entire FlowChain requirements.txt is one line - gradio_client==0.8.0 - and it exists only for this node. The other nodes need nothing. That's the honest trade: the four workflow nodes are lightweight, this one is a bridge to proprietary software.
How it works
The node expects a running LipSync Studio instance, defaulting to http://127.0.0.1:7860/ (its standard Gradio port). When you run it, the node writes your incoming frames as PNGs into ComfyUI's output folder, converts the incoming audio tensor to a WAV via ffmpeg, then drives the studio through a long sequence of API calls - setting the project, loading frames, analysing the video, setting the audio file, swapping the face, generating a driving video, and finally running wav2lip. The finished video gets copied back into ComfyUI/output/<project_name>/. The same project also lands in LipSync Studio's own projects folder, so you can open it in the studio afterwards and keep refining if the first pass isn't good enough.
The inputs that matter
There are a lot of knobs, but the ones you actually reach for:
- frames (IMAGE) - the video frames to lip-sync. This is your source footage, usually a batch of images.
- audio (AUDIO) - the speech track, in ComfyUI's native AUDIO format (wire in a Load Audio node).
- lipsync_studio_url - where the studio is listening; leave it alone if it's on the same machine.
- project_name - controls both the output folder and the studio project.
- avatar - one of ten built-in avatars; it drives how the output video looks.
- quality - Low / Medium / High; High runs GFPGAN over the result to clean up faces, at a cost in time.
- face_id (0–10) - which detected face to lip-sync, plus faceswap.
- faceswap_image (optional IMAGE) - a face to swap in, if you want a different identity driving the video.
The rest - fps, close_mouth_before_lipsync, skip_first_frames, load_cap, low_vram - are worth leaving at their defaults until a result is wrong. low_vram is there for weak GPUs, and load_cap (0 = all) limits how many frames the studio processes.
The output
There isn't one. The node returns nothing down a socket; it's a terminal output node. Its result is the video file dropped into your ComfyUI output folder, shown in the UI as a video_path. That's the whole return value.
Installing and running it
Install is shared with the pack (Manager → FlowChain, or git clone + pip install -r requirements.txt + restart), but running it needs three things ComfyUI alone can't give you: the LipSync Studio app itself, that app running and reachable at the URL, and ffmpeg on your system (the node uses it to write the audio WAV - it'll borrow the Video Helper Suite ffmpeg or your system install).
Gotchas
The dependency story is the gotcha: gradio_client==0.8.0 is pinned, which is old, and the studio's API can drift between versions - if calls start failing, check that your studio version and the pinned client still agree. If the node errors immediately, the first suspect is the URL: nothing is listening on 7860. And remember the boundary: everything this node does happens in the studio, so the studio's own VRAM and settings are the ones that matter. It's a genuinely useful bridge if you're already paying for the app - and a pointless install if you're not.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| lipsync_studio_url | STRING | http://127.0.0.1:7860/ | — |
| project_name | STRING | project1 | — |
| frames | IMAGE | — | |
| face_id | INT | 00–10 | — |
| fps | FLOAT | 250–60 | — |
| audio | AUDIO | — | |
| avatar | COMBO | 10 options: Avatar 1, Avatar 2, Avatar 3, Avatar 4, Avatar 5, Avatar 6, +4 | |
| close_mouth_before_lipsync | BOOLEAN | true | — |
| quality | COMBO | 3 options: Low, Medium, High | |
| skip_first_frames | INT | 00–10000 | — |
| load_cap | INT | 00–10000 | — |
| low_vram | BOOLEAN | false | — |
| faceswap_imageopt | IMAGE | — |
Outputs (0)
No outputs