MiniMax H3 Digital Humans in ComfyUI: One Presenter, Two Characters, One Audio Lock
Open-source digital humans are usually demonstrated with one person talking to camera. The harder problem is two people exchanging lines while the picture stays coherent β and that is what this episode's second workflow
Open-source digital humans are usually demonstrated with one person talking to camera. The harder problem is two people exchanging lines while the picture stays coherent β and that is what this episode's second workflow is built for.
Two ComfyUI graphs ship with this release, both on the MiniMax H3 ref2va checkpoint with VoxCPM generating the speech and the generated (or concatenated) audio locked as the driving track. One graph is a single-character presenter; the other is a two-character dialogue that trims, pads and merges two clips into one timeline.
No inference was run for this release. Everything below is read from the saved graphs; there is no timing, VRAM or lip-sync claim.
| # | Workflow | Nodes / links | Audio route |
|---|---|---|---|
| 01 | Single character | 25 / 31 | one VoxCPM reference clip, 0β10 s crop |
| 02 | Two-character dialogue | 32 / 38 | two clips, 0β5 s and 0β6 s, concatenated |
The shared engine
Both files load minimax_h3_ref2va_int8_convrot.safetensors, encode text with qwen3vl_32b_minimax_h3_int8_convrot.safetensors (type minimax) and decode through minimax_h3_video_vae_fp16.safetensors plus minimax_h3_audio_vae_fp32.safetensors. Sampling is SamplerCustomAdvanced + KSamplerSelect res_multistep + BasicScheduler simple at 20 steps denoise 1. The reference-to-video node is saved at 1344x768 / 124 frames with ref_image_size=match, on a 16:9 0.9 MP canvas, with an 8-second duration control.
The node that shapes the whole thing is VRGDG_MiniMaxH3AudioDrive. In both saved files it is configured to lock the original audio and let H3 generate picture only. That is the right mental model: H3 is not inventing a voice here, it is matching a performance to a track.
01 β Single character: image + reference audio, one line
The single-character graph is the cleanest read of the recipe. One LoadImage for the character, one LoadAudio for the VoxCPM reference, an AudioCrop at 0:00β0:10, then VoxCPM generates the spoken line and H3 drives the performance. Output goes through CreateVideo at 24 fps and SaveVideo with the prefix video/MiniMax_H3_VoxCPM_εδΊΊη.
The graph's own note says all inputs live on the left side: character image, VoxCPM reference audio, and the line to speak. If the result does not lip-sync, the first thing to check is whether the audio-drive node is actually locked to the generated speech rather than another source.
02 β Two characters: the audio timeline is the real control
The two-character file is where the engineering is. Each character gets an image and an audio clip. The clips are cropped at 0:00β0:05 and 0:00β0:06, then two AudioConcat nodes (with EmptyAudio and a PreviewAudio tap) build a single track. That combined track is what VRGDG_MiniMaxH3AudioDrive locks, and H3 generates the two-person picture against it.
Two practical warnings:
- Fix timing in the audio, not the prompt. If character 2 starts speaking before character 1 finishes, adjusting the prompt will not repair the timeline. Change the crop points.
-
The prompt contract is positional. Subjects are
<Picture 1>and<Picture 2>, audio is<Audio 1>. The saved prompt explicitly forbids extra people, clones and three-view sheets β that is because the graph feeds three image loaders and the model can otherwise interpret the extra reference views as additional characters.
One artifact worth naming: the output node is VHS_VideoCombine and its saved filename prefix is still AnimateDiff. That is a leftover from where the graph was cloned from; it does not mean a different model path. Output is h264 mp4, crf 19, yuv420p.
What to check before queueing
- The character images should be the same person you intend in the output;
ref_image_size=matchmeans the reference is used at matched size, not as a free-form style image. - Confirm which image loader is wired to which reference slot β the two-character graph has three image loaders and only two are the speaking subjects in the saved prompt.
- Confirm the duration control (8 s) matches the combined audio length; the crops are 5 s and 6 s, so concatenation and the 8-second plan are not automatically aligned.
- Voice and likeness rights are your responsibility. VoxCPM and the H3 checkpoints are not bundled and carry their own licenses.
What this is not
Not a benchmark, not a lip-sync test, and not a license grant. The video's framing about "the strongest open-source digital human" is the author's description. The saved prompts, images and audio are demo content, not evidence of an output.
Getting the workflows
Published by this channel. The graphs are free; the H3 checkpoints, VoxCPM model and example media are not bundled.
- Hugging Face: AI-KSK/minimax-h3-voxcpm-digital-human-289 β two JSONs, source covers, SHA256 manifest. Start here.
- ModelScope (ιζ): Sunjian520/minimax-h3-voxcpm-digital-human-289
- Civitai: 01 single character Β· 02 two-character dialogue
-
Run without a local GPU: 01 Β· 02 β these carry the author's invite code
rh-v1111. - Tutorial: YouTube Β· Bilibili
Verify workflow, node, model, VoxCPM, audio, likeness, input-image and cover rights separately. No blanket commercial or redistribution license is asserted for the graphs or the example media.
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.