Zhenzhen_lip_sync
Give Your Generated Clip a Voice, Text or Audio
- video
- video_url
- task_id
- response
You generated a Kling video of a person talking... but they're not talking. This node fixes that. It's Kling's lip-sync, which takes a video you already made, adds a voice, and makes the mouth move in sync with it. Two input modes: text2video, where you type the line and the API picks a TTS voice, and audio2video, where you supply your own audio file and the model syncs the lips to that.
The author's own notes are refreshingly honest about it: the effect is "okay-ish" and the speed is "so-so." Which is accurate - this is not a $50-a-month dedicated avatar tool, it's Kling's lip-sync bolted onto your existing generation. But for "my character should say this one line" it's remarkably useful, and it works in both Chinese and English, which most of this ecosystem's tools can't claim.
How it works
The important quirk: this node doesn't generate a fresh video. It consumes one. You give it the video_id and task_id from a previous Kling generation (the outputs you were told to keep from the text2video / multi-image nodes - this is why), or a direct video_url. Then it runs TTS + lip-sync through the proxy and returns a new video with the mouth moving.
The inputs that matter
- video_id / task_id - the two strings from your earlier Kling node run. Get these wrong (or leave them empty and only use
video_url) and the node has nothing to sync. - mode -
text2video(type the line, pick a voice) oraudio2video(bring your own audio). - text - the line to speak. Only used in
text2videomode. - voice_language -
zhoren. Pick before picking a voice, obviously. - zh_voice - 35 Chinese voices, and they're genuinely characterful: everything from 阳光少年 (sunny youth) to 东北老铁 (Northeastern bro) to 刀片烟嗓 (raspy smoker). This is the most fun dropdown in the pack.
- en_voice - 27 English voices, from
SunnytoSiren. - voice_speed -
0.8–2.0, default1.0. - audio_type / audio_file / audio_url - for
audio2videomode:fileorurl, then the path or link. The file form takes a local path string. - seed - lock a take.
Outputs: video (VIDEO), video_url (STRING), task_id (STRING), response (STRING).
Install
Manager → Comfyui_Comfly, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ainewsto/Comfyui_Comfly
Restart. No model downloads; requirements.txt is the standard aiohttp/requests/Pillow/numpy set. Key from ai.comfly.chat in Comflyapi.json or the node's api_key.
Where people get burned
The biggest one is architectural: people drop a brand-new Comfly_kling_text2video node in, expect lip-sync output, and get nothing - because this node needs the already-generated video's ids, not a fresh prompt. Also, the speaking-face quality ceiling is real; keep the character's mouth relatively visible in the source clip and the effect lands much better than a tiny distant face. And keep your line short - long monologues drift off-sync, and the author's own "so-so" speed rating means every extra second is more render time. Oh, and the voice dropdowns are Chinese-first: the EN voices are there, but the zh list is where the personality lives.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| video_id | STRING | — | |
| task_id | STRING | — | |
| mode | COMBO | text2video | 2 options: text2video, audio2video |
| text | STRING | — | |
| voice_language | COMBO | zh | 2 options: zh, en |
| zh_voice | COMBO | 阳光少年 | 35 options: 阳光少年, 懂事小弟, 运动少年, 青春少女, 温柔小妹, 元气少女, +29 |
| en_voice | COMBO | Sunny | 27 options: Sunny, Sage, Ace, Blossom, Peppy, Dove, +21 |
| voice_speed | FLOAT | 1.00.8–2 | — |
| seed | INT | 00–2147483647 | — |
| api_keyopt | STRING | — | |
| video_urlopt | STRING | — | |
| audio_typeopt | COMBO | file | 2 options: file, url |
| audio_fileopt | STRING | — | |
| audio_urlopt | STRING | — | |
| skip_erroropt | BOOLEAN | false | 开启后,节点失败时不报错、按旧行为返回默认空结果;关闭时(默认)失败直接抛出错误。 |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| task_id | STRING | — |
| response | STRING | — |