MiniMax H3 Local MV Vocal Lock Renderer V2 / 独立人声锁定生成 (Advanced EXP/T8)
The V2 vocal-lock renderer
- model
- clip
- video_vae
- audio_vae
- reference_image
- full_song
- vocal_lock_audio
- mv_vocal_lock_prompt_plan
- video
- video_path
- manifest_path
- completed_scenes
- status
- report_json
The V1 renderer conditions every scene on the full song mix, and that's its weakness: the model has to work out which part of a loud, busy master is the voice worth syncing to. This V2 renderer fixes the input problem at the source - it demands a separate, timeline-aligned isolated vocal track and feeds that into each H3 scene's lock_source, so the mouth is driven by clean vocals instead of an inference the model has to make over a wall of instruments.
The two-track contract
Concretely, you connect full_song and vocal_lock_audio. The full song never enters H3 and never conditions any scene - it's held back and muxed exactly once onto the finished, assembled video at the end. The isolated vocal (or clear dialogue) is what each scene's H3 lock_source window actually hears. Two roles, deliberately split: vocal for the face, master for the final render. This is the "vocal lock" architecture that separates this whole V2/V3 line from the compatibility V1 route.
Everything else about the renderer is the serial-resume machinery the V1 node introduced, so I won't re-litigate it: scenes run strictly one at a time through your connected local model (with the Qwen3-VL clip and the video/audio VAEs), accepted scenes are saved atomically under a contract bound to your chain_id (default my_h3_local_mv_vocal_lock_v2), and re-running the same chain after an interrupt resumes instead of restarting. No HTTP /prompt, no remote anything - fully local and serial by design.
Inputs and outputs
Inputs that matter:
model,clip,video_vae,audio_vae,reference_image(performer identity),full_song,vocal_lock_audio, and themv_vocal_lock_prompt_planfrom the Vocal Lock Prompt Compiler V2.width/height- default 1056×608, multiples of 32.steps- default 8, withsampler_name/schedulerdefaulting todual_clock_euler/native_flowandshift_video/shift_audioat 6/3. Note the tension I'll flag below: this renderer defaults to the 8-step recipe that the pack's own A/B testing later abandoned for the official 4-step route.chain_id,base_seed,resume_existing(true),filename_prefix,crf/bit_depthfor encode,model_id(audit-only).
Outputs: video + preview, video_path, manifest_path, completed_scenes, status, report_json.
V2 or V3? Read this first
Now the part that decides whether you use V2 or jump to V3. The pack's own history is blunt here: V2's single-scene clear-speech sample passed SyncNet (0-frame offset) and normal-speed human lip-sync review, but the performer's surroundings looked soft, and a later V2-era attempt died on a giant background duplicate face. Their controlled follow-up - same image, same audio, same failing seed - traced the culprit to the recipe bundle, not the seed or the H3 base model: they had combined a generic LarryVrh EMA Turbo LoRA with a non-official 8-step / shift-6:3 Ref2VA schedule. The accepted fix pins the official Ref2V Turbo v0.1 LoRA at 4 steps, Euler/simple, shift 12/3 - and that configuration is exactly what the V3 renderer ships as its defaults. So V2 remains in the pack as the historical 8-step Ref2VA route and for lighter single-clip work, but the README's recommendation for verified long-MV lip-sync is the V3 chain (same V2 planner, Visual Director V3 for the one-person/one-face shot contract, and the V3 renderer).
If you use V2 anyway - say, you want the 8-step quality headroom on a short clip - the lesson to take from their findings is: don't bolt a random EMA Turbo LoRA onto a Ref2VA schedule, and expect double-face ghosting if you do. Start locked-off on the camera too; dynamic moves are where subject edges smear.
Installing it
Install is pack-standard: ComfyUI Manager search MiniMax H3 Audio T8, or git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git into custom_nodes, restart, and update ComfyUI core first. Source your isolated vocal locally before you start - this node won't separate stems for you, and the whole route fails if vocal_lock_audio isn't genuinely timeline-aligned with full_song. The dated V2 workflow in examples/workflows/24-mv-lipsync shows the correct dual-audio wiring.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | 本地 MiniMax H3 MODEL。 | |
| clip | CLIP | 本地 MiniMax H3 Qwen3-VL CLIP。 | |
| video_vae | VAE | — | |
| audio_vae | VAE | — | |
| reference_image | IMAGE | 歌手/说话人物的身份参考图。 | |
| full_song | AUDIO | 只在最终交付时一次性混入的完整原曲。 | |
| vocal_lock_audio | AUDIO | 必需:与full_song同时间线的本地隔离人声/清晰对白,逐场景直接驱动H3。 | |
| mv_vocal_lock_prompt_plan | H3_T8_MV_VOCAL_LOCK_PROMPT_PLAN | — | |
| chain_id | STRING | my_h3_local_mv_vocal_lock_v2 | — |
| width | INT | 105632–16384 | — |
| height | INT | 60832–16384 | — |
| base_seed | INT | 1234567890–18446744073709550000 | — |
| steps | INT | 81–1000 | — |
| shift_video | FLOAT | 6.000.01–100 | — |
| shift_audio | FLOAT | 3.000.01–100 | — |
| sampler_name | COMBO | dual_clock_euler | 45 options: dual_clock_euler, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| scheduler | COMBO | native_flow | 11 options: native_flow, beta57, simple, sgm_uniform, karras, exponential, +5 |
| resume_existing | BOOLEAN | true | — |
| filename_prefix | STRING | H3_Local_MV_VocalLock_V2 | — |
| bit_depth | COMBO | 8 | 2 options: 8, 10 |
| crf | INT | 180–51 | — |
| model_id | STRING | user-selected-local-h3-ref2va-vocal-lock | 只写入审计报告,不校验模型文件名、大小或哈希。 |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| manifest_path | STRING | — |
| completed_scenes | INT | — |
| status | STRING | — |
| report_json | STRING | — |