ComfyPilotComfyPilot
工作流 / 视频工具 / 口型同步:MiniMax H3 Max
口型同步:MiniMax H3 Max

口型同步:MiniMax H3 Max

Lip Sync: MiniMax H3 Max

使用 MiniMax H3 Max 唇形同步,让肖像随音频轨道动起来。连接一张图像和一段语音片段,模型即可渲染表演,让嘴型与音频匹配,并保持录制时长,支持 480P 至 2K。可选的转录处理会用口述文本引导嘴型。非常适合口播广告、旁白以及为静态肖像配音。

视频工具 5 个节点 2 个输入 19 次使用 ComfyUI ≥ 0.44.0 ComfyUI 17 KB

下载工作流 JSON 查看官方来源

下载后把文件拖进 ComfyUI 窗口即可打开。

节点构成

LoadImage × 1
LoadAudio × 1
MinimaxHailuo03MaxLipSyncNode × 1
SaveVideo × 1
MarkdownNote × 1

官方标注的模型

MiniMax H3

工作流 JSON

和上面「下载工作流 JSON」是同一份文件。

1{
2 "id": "e68a47ed-7536-485a-8597-dc8fbd2ac52b",
3 "revision": 0,
4 "last_node_id": 5,
5 "last_link_id": 3,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "LoadImage",
10 "pos": [
11 100,
12 130
13 ],
14 "size": [
15 282.8,
16 320
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [
23 {
24 "name": "IMAGE",
25 "type": "IMAGE",
26 "links": [
27 1
28 ]
29 },
30 {
31 "name": "MASK",
32 "type": "MASK",
33 "links": null
34 }
35 ],
36 "properties": {
37 "Node name for S&R": "LoadImage"
38 },
39 "widgets_values": [
40 "api_minimax_h3_max_lipsync_input.png",
41 "image"
42 ],
43 "widgets_values_named": {
44 "image": "api_minimax_h3_max_lipsync_input.png",
45 "upload": "image"
46 }
47 },
48 {
49 "id": 2,
50 "type": "LoadAudio",
51 "pos": [
52 101.61294061980271,
53 572.2149307478045
54 ],
55 "size": [
56 282.8,
57 136
58 ],
59 "flags": [],
60 "order": 1,
61 "mode": 0,
62 "inputs": [],
63 "outputs": [
64 {
65 "name": "AUDIO",
66 "type": "AUDIO",
67 "links": [
68 2
69 ]
70 }
71 ],
72 "properties": {
73 "Node name for S&R": "LoadAudio"
74 },
75 "widgets_values": [
76 "api_minimax_h3_max_lipsync_audio.mp3",
77 ""
78 ],
79 "widgets_values_named": {
80 "audio": "api_minimax_h3_max_lipsync_audio.mp3",
81 "upload": ""
82 }
83 },
84 {
85 "id": 3,
86 "type": "MinimaxHailuo03MaxLipSyncNode",
87 "pos": [
88 520,
89 130
90 ],
91 "size": [
92 420,
93 300
94 ],
95 "flags": [],
96 "order": 3,
97 "mode": 0,
98 "showAdvanced": true,
99 "inputs": [
100 {
101 "name": "model.image",
102 "type": "IMAGE",
103 "link": 1
104 },
105 {
106 "name": "model.audio",
107 "type": "AUDIO",
108 "link": 2
109 }
110 ],
111 "outputs": [
112 {
113 "name": "VIDEO",
114 "type": "VIDEO",
115 "links": [
116 3
117 ]
118 }
119 ],
120 "properties": {
121 "Node name for S&R": "MinimaxHailuo03MaxLipSyncNode"
122 },
123 "widgets_values": [
124 "MiniMax H3 Max",
125 "768P",
126 true,
127 42,
128 "randomize",
129 "randomize"
130 ],
131 "widgets_values_named": {
132 "model": "MiniMax H3 Max",
133 "model.resolution": "768P",
134 "model.transcription": true,
135 "model.seed": 42,
136 "control_after_generate#1": "randomize",
137 "control_after_generate": "randomize"
138 },
139 "color": "#432",
140 "bgcolor": "#653"
141 },
142 {
143 "id": 4,
144 "type": "SaveVideo",
145 "pos": [
146 1000,
147 130
148 ],
149 "size": [
150 453.8,
151 300
152 ],
153 "flags": [],
154 "order": 4,
155 "mode": 0,
156 "inputs": [
157 {
158 "name": "video",
159 "type": "VIDEO",
160 "link": 3
161 }
162 ],
163 "outputs": [
164 {
165 "name": "video",
166 "type": "VIDEO",
167 "links": null
168 }
169 ],
170 "properties": [],
171 "widgets_values": [
172 "api_minimax_h3_max_lipsync",
173 "auto",
174 "auto",
175 "auto"
176 ],
177 "widgets_values_named": {
178 "filename_prefix": "api_minimax_h3_max_lipsync",
179 "format": "auto",
180 "format.codec": "auto",
181 "codec": "auto"
182 }
183 },
184 {
185 "id": 5,
186 "type": "MarkdownNote",
187 "pos": [
188 -411.7966153212633,
189 132.93053609046802
190 ],
191 "size": [
192 441.7276611328125,
193 714.5486450195312
194 ],
195 "flags": [],
196 "order": 2,
197 "mode": 0,
198 "inputs": [],
199 "outputs": [],
200 "properties": [],
201 "widgets_values": [
202 "## Lip Sync: MiniMax H3 Max\n\n**Make a still portrait talk.** Give the node a face and a voice track and it animates the mouth to the audio, keeping the rest of the frame still. The clip comes back exactly as long as the audio.\n\n**Input Assets:**\n- [api_minimax_h3_max_lipsync_input.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_input.png)\n- [api_minimax_h3_max_lipsync_audio.mp3](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_audio.mp3)\n---\n\n### What this graph does\n\n1. **Load Image**: the portrait to animate, at least 256 x 256, aspect ratio between 0.4 and 2.5.\n2. **Load Audio**: the voice track, 5 to 899 seconds.\n3. **MiniMax H3 Max Lip Sync**: animates the mouth to the audio.\n4. **Save Video**: writes the MP4.\n\n---\n\n### Controls\n\n| Control | What it does |\n|---|---|\n| `model` | `MiniMax H3 Max` is the only option on this node |\n| `resolution` | `480P`, `768P`, `1080P` or `2K`, default `768P`. The output aspect ratio is the supported one nearest to the image |\n| `transcription` | Transcribes the audio first to guide the lip sync. Off by default; on in this graph |\n| `seed` | Same audio and seed give similar, not identical, results |\n\n---\n\n### Gotchas\n\n- The audio must be at least 5 seconds. A 4.4 second line is rejected before generation, so pad the tail or use a longer take.\n- Output length equals audio length, and there is no duration widget. Trim the audio to the length you want the clip to be.\n- The output is a talking portrait, not a full performance: hands, camera moves and background action are not driven by the audio.\n- Pick a portrait that is already lit the way you want it. The node animates the mouth, it does not relight the shot.\n"
203 ],
204 "widgets_values_named": {
205 "text": "## Lip Sync: MiniMax H3 Max\n\n**Make a still portrait talk.** Give the node a face and a voice track and it animates the mouth to the audio, keeping the rest of the frame still. The clip comes back exactly as long as the audio.\n\n**Input Assets:**\n- [api_minimax_h3_max_lipsync_input.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_input.png)\n- [api_minimax_h3_max_lipsync_audio.mp3](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_audio.mp3)\n---\n\n### What this graph does\n\n1. **Load Image**: the portrait to animate, at least 256 x 256, aspect ratio between 0.4 and 2.5.\n2. **Load Audio**: the voice track, 5 to 899 seconds.\n3. **MiniMax H3 Max Lip Sync**: animates the mouth to the audio.\n4. **Save Video**: writes the MP4.\n\n---\n\n### Controls\n\n| Control | What it does |\n|---|---|\n| `model` | `MiniMax H3 Max` is the only option on this node |\n| `resolution` | `480P`, `768P`, `1080P` or `2K`, default `768P`. The output aspect ratio is the supported one nearest to the image |\n| `transcription` | Transcribes the audio first to guide the lip sync. Off by default; on in this graph |\n| `seed` | Same audio and seed give similar, not identical, results |\n\n---\n\n### Gotchas\n\n- The audio must be at least 5 seconds. A 4.4 second line is rejected before generation, so pad the tail or use a longer take.\n- Output length equals audio length, and there is no duration widget. Trim the audio to the length you want the clip to be.\n- The output is a talking portrait, not a full performance: hands, camera moves and background action are not driven by the audio.\n- Pick a portrait that is already lit the way you want it. The node animates the mouth, it does not relight the shot.\n"
206 },
207 "color": "#222",
208 "bgcolor": "#000"
209 }
210 ],
211 "links": [
212 [
213 1,
214 1,
215 0,
216 3,
217 0,
218 "IMAGE"
219 ],
220 [
221 2,
222 2,
223 0,
224 3,
225 1,
226 "AUDIO"
227 ],
228 [
229 3,
230 3,
231 0,
232 4,
233 0,
234 "VIDEO"
235 ]
236 ],
237 "groups": [],
238 "config": [],
239 "extra": {
240 "ds": {
241 "scale": 0.7513148009015777,
242 "offset": [
243 1288.9133592256635,
244 429.21926644839107
245 ]
246 },
247 "frontendVersion": "1.58.5"
248 },
249 "extensions": {
250 "extra_pnginfo": {
251 "workflow": {
252 "id": "e68a47ed-7536-485a-8597-dc8fbd2ac52b",
253 "revision": 0,
254 "last_node_id": 5,
255 "last_link_id": 3,
256 "nodes": [
257 {
258 "id": 1,
259 "type": "LoadImage",
260 "pos": [
261 100,
262 130
263 ],
264 "size": [
265 282.8,
266 320
267 ],
268 "flags": [],
269 "order": 0,
270 "mode": 0,
271 "inputs": [],
272 "outputs": [
273 {
274 "name": "IMAGE",
275 "type": "IMAGE",
276 "links": [
277 1
278 ]
279 },
280 {
281 "name": "MASK",
282 "type": "MASK",
283 "links": null
284 }
285 ],
286 "properties": {
287 "Node name for S&R": "LoadImage"
288 },
289 "widgets_values": [
290 "api_minimax_h3_max_lipsync_input.png",
291 "image"
292 ],
293 "widgets_values_named": {
294 "image": "api_minimax_h3_max_lipsync_input.png",
295 "upload": "image"
296 }
297 },
298 {
299 "id": 2,
300 "type": "LoadAudio",
301 "pos": [
302 100,
303 320
304 ],
305 "size": [
306 282.8,
307 120
308 ],
309 "flags": [],
310 "order": 1,
311 "mode": 0,
312 "inputs": [],
313 "outputs": [
314 {
315 "name": "AUDIO",
316 "type": "AUDIO",
317 "links": [
318 2
319 ]
320 }
321 ],
322 "properties": {
323 "Node name for S&R": "LoadAudio"
324 },
325 "widgets_values": [
326 "api_minimax_h3_max_lipsync_audio.mp3"
327 ],
328 "widgets_values_named": {
329 "audio": "api_minimax_h3_max_lipsync_audio.mp3"
330 }
331 },
332 {
333 "id": 3,
334 "type": "MinimaxHailuo03MaxLipSyncNode",
335 "pos": [
336 520,
337 130
338 ],
339 "size": [
340 420,
341 300
342 ],
343 "flags": [],
344 "order": 2,
345 "mode": 0,
346 "inputs": [
347 {
348 "name": "model.image",
349 "type": "IMAGE",
350 "link": 1
351 },
352 {
353 "name": "model.audio",
354 "type": "AUDIO",
355 "link": 2
356 }
357 ],
358 "outputs": [
359 {
360 "name": "VIDEO",
361 "type": "VIDEO",
362 "links": [
363 3
364 ]
365 }
366 ],
367 "properties": {
368 "Node name for S&R": "MinimaxHailuo03MaxLipSyncNode"
369 },
370 "widgets_values": [
371 "MiniMax H3 Max",
372 "768P",
373 true,
374 42,
375 "randomize"
376 ],
377 "widgets_values_named": {
378 "model": "MiniMax H3 Max",
379 "model.resolution": "768P",
380 "model.transcription": true,
381 "model.seed": 42,
382 "control_after_generate": "randomize"
383 }
384 },
385 {
386 "id": 4,
387 "type": "SaveVideo",
388 "pos": [
389 1000,
390 130
391 ],
392 "size": [
393 453.8,
394 300
395 ],
396 "flags": [],
397 "order": 3,
398 "mode": 0,
399 "inputs": [
400 {
401 "name": "video",
402 "type": "VIDEO",
403 "link": 3
404 }
405 ],
406 "outputs": [
407 {
408 "name": "video",
409 "type": "VIDEO",
410 "links": null
411 }
412 ],
413 "properties": [],
414 "widgets_values": [
415 "api_minimax_h3_max_lipsync",
416 "auto",
417 "auto",
418 "auto"
419 ],
420 "widgets_values_named": {
421 "filename_prefix": "api_minimax_h3_max_lipsync",
422 "format": "auto",
423 "format.codec": "auto",
424 "codec": "auto"
425 }
426 },
427 {
428 "id": 5,
429 "type": "MarkdownNote",
430 "pos": [
431 -300,
432 620
433 ],
434 "size": [
435 1120,
436 860
437 ],
438 "flags": [],
439 "order": 4,
440 "mode": 0,
441 "inputs": [],
442 "outputs": [],
443 "properties": [],
444 "widgets_values": [
445 "## Lip Sync: MiniMax H3 Max\n\n**Make a still portrait talk.** Give the node a face and a voice track and it animates the mouth to the audio, keeping the rest of the frame still. The clip comes back exactly as long as the audio.\n\n---\n\n### What this graph does\n\n1. **Load Image**: the portrait to animate, at least 256 x 256, aspect ratio between 0.4 and 2.5.\n2. **Load Audio**: the voice track, 5 to 899 seconds.\n3. **MiniMax H3 Max Lip Sync**: animates the mouth to the audio.\n4. **Save Video**: writes the MP4.\n\n**Input Assets:** [api_minimax_h3_max_lipsync_input.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_input.png) — 1344 x 896 · [api_minimax_h3_max_lipsync_input.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_input.png) — 5.62 seconds, mono 44.1 kHz\n\n---\n\n### Controls\n\n| Control | What it does |\n|---|---|\n| `model` | `MiniMax H3 Max` is the only option on this node |\n| `resolution` | `480P`, `768P`, `1080P` or `2K`, default `768P`. The output aspect ratio is the supported one nearest to the image |\n| `transcription` | Transcribes the audio first to guide the lip sync. Off by default; on in this graph |\n| `seed` | Same audio and seed give similar, not identical, results |\n\n---\n\n### Gotchas\n\n- The audio must be at least 5 seconds. A 4.4 second line is rejected before generation, so pad the tail or use a longer take.\n- Output length equals audio length, and there is no duration widget. Trim the audio to the length you want the clip to be.\n- The output is a talking portrait, not a full performance: hands, camera moves and background action are not driven by the audio.\n- Pick a portrait that is already lit the way you want it. The node animates the mouth, it does not relight the shot.\n"
446 ],
447 "widgets_values_named": {
448 "text": "## Lip Sync: MiniMax H3 Max\n\n**Make a still portrait talk.** Give the node a face and a voice track and it animates the mouth to the audio, keeping the rest of the frame still. The clip comes back exactly as long as the audio.\n\n---\n\n### What this graph does\n\n1. **Load Image**: the portrait to animate, at least 256 x 256, aspect ratio between 0.4 and 2.5.\n2. **Load Audio**: the voice track, 5 to 899 seconds.\n3. **MiniMax H3 Max Lip Sync**: animates the mouth to the audio.\n4. **Save Video**: writes the MP4.\n\n**Input Assets:** [api_minimax_h3_max_lipsync_input.png](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_input.png) — 1344 x 896 · [api_minimax_h3_max_lipsync_audio.mp3](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/api_minimax_h3_max_lipsync_audio.mp3) — 5.62 seconds, mono 44.1 kHz\n\n---\n\n### Controls\n\n| Control | What it does |\n|---|---|\n| `model` | `MiniMax H3 Max` is the only option on this node |\n| `resolution` | `480P`, `768P`, `1080P` or `2K`, default `768P`. The output aspect ratio is the supported one nearest to the image |\n| `transcription` | Transcribes the audio first to guide the lip sync. Off by default; on in this graph |\n| `seed` | Same audio and seed give similar, not identical, results |\n\n---\n\n### Gotchas\n\n- The audio must be at least 5 seconds. A 4.4 second line is rejected before generation, so pad the tail or use a longer take.\n- Output length equals audio length, and there is no duration widget. Trim the audio to the length you want the clip to be.\n- The output is a talking portrait, not a full performance: hands, camera moves and background action are not driven by the audio.\n- Pick a portrait that is already lit the way you want it. The node animates the mouth, it does not relight the shot.\n"
449 }
450 }
451 ],
452 "links": [
453 [
454 1,
455 1,
456 0,
457 3,
458 0,
459 "IMAGE"
460 ],
461 [
462 2,
463 2,
464 0,
465 3,
466 1,
467 "AUDIO"
468 ],
469 [
470 3,
471 3,
472 0,
473 4,
474 0,
475 "VIDEO"
476 ]
477 ],
478 "groups": [],
479 "config": [],
480 "extra": {
481 "ds": {
482 "scale": 0.5,
483 "offset": [
484 120,
485 -50
486 ]
487 },
488 "frontendVersion": "1.57.6"
489 },
490 "version": 0.4
491 }
492 }
493 },
494 "version": 0.4
495}