H3 Audio Sync Pixaroma
Make MiniMax H3 sing your track, not a made-up one
- model
- latent
- audio_vae
- track
- model
- latent
- audio
H3 Audio Sync Pixaroma solves the most maddening quirk of MiniMax H3: the model creates the picture and the sound together, as one joined latent. Left alone it invents its own audio - and the mouth moves to a song that doesn't exist. That's why you can't simply mute what it made and lay your own track on top afterwards; the mouth was never moving to your song in the first place.
This node fixes it at the right layer. It drops your real recording into the sound half of the latent and pins it there, so the sampler can only change the picture - and the only picture that fits a fixed soundtrack is one whose mouth matches it. The author's notes are refreshingly honest about the mechanism: it holds the audio stream still using ComfyUI's own nested denoise_mask feature (ones for video, zeros for audio), which the sampler carries through untouched every step. The model passes through completely unchanged.
Required inputs
model- your MiniMax H3 model; passes straight through untouched.latent- the joined picture-and-sound latent from an H3 node (Empty MiniMax H3 AV Latent, or the latent out of MiniMax H3 Image to Video / Reference to Video). Feed it a non-H3 latent and it refuses with a clear message rather than quietly doing the wrong thing.audio_vae- H3's audio VAE, the same one the H3 conditioning node uses.track(AUDIO) - the real recording you want the video to perform. Trim it first with Load Audio Pixaroma if you only want part of it.
Outputs
model- unchanged, so the node can sit inline in the chain instead of being wired around.latent- the latent with your track locked into its sound half; wire this into the sampler.audio- your track cut to exactly the length of the clip, ready for the save node so the finished file has picture and sound the same length.
The node works out the clip length by itself, so you never type a duration. If your track is shorter than the clip it fills the rest with real silence or loops it, whichever you picked - and it says so on the node, because padding the latent with zeros would decode to a tone, not silence. If the clip runs past about 15 seconds it warns you before the render, since H3 was only trained to roughly that length.
Install
Same pack, same drill: ComfyUI Manager → search Pixaroma → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://gitlab.com/pixaroma/comfyui-pixaroma.git
This node assumes you already have a MiniMax H3 setup working; it won't conjure one. No extra Python dependencies on top. The usual update warning applies: hard-refresh the tab (Ctrl+Shift+R / Cmd+Shift+R) if a node looks broken after upgrading the pack.
The honest caveat: holding the audio clean doesn't tell the model "this audio is clean," because ComfyUI's core has no hook for that. The node deliberately doesn't fake one - the author calls a wrong guess here "invisible rather than loud." In practice it works: people use it for lipsync and music videos with H3, and the mouth tracks the recording. But it's a best-effort alignment, not a guarantee of perfect articulation.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Your MiniMax H3 model. It passes straight through untouched. | |
| latent | LATENT | The joined picture-and-sound latent from an H3 node, such as Empty MiniMax H3 AV Latent or MiniMax H3 Image to Video. | |
| audio_vae | VAE | H3's audio VAE, the same one the H3 conditioning node uses. | |
| track | AUDIO | The real recording you want the video to perform: a song, a line of dialogue, anything. Trim it first with Load Audio Pixaroma if you only want part of it. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Your model, unchanged. Wire it on to the sampler so this node sits in the chain instead of being wired around. |
| latent | LATENT | The latent with your track locked into its sound half. Wire this into the sampler. |
| audio | AUDIO | Your track cut to exactly the length of the clip, ready for the save node so the finished file has picture and sound the same length. |