Nodes/ComfyUI-MiniMax-H3-Guide/MiniMax H3 Pack AV Latent (Frame-Locked)
ComfyUI Node

MiniMax H3 Pack AV Latent (Frame-Locked)

Recombine video and audio latents frame-locked to 40 Hz

By ethanfel·Created 22 days ago·Updated 14 days ago· 207
MiniMax H3 Pack AV Latent (Frame-Locked)
  • video_latent
  • audio_latent
  • av_latent
  • sync_report

The pack's AV-split node gets you out of an H3 latent; Pack AV Latent (Frame-Locked) gets you back in. It takes a video latent and an audio latent and recombines them into the nested joint latent H3's sampler expects - and it fixes the thing that breaks every naive joiner: the audio length.

The problem is the two clocks. H3 video runs on the 5k+2 latent grid at 24 FPS; H3 audio runs at 40 latent steps per second. If you just shove the streams together, the audio is almost certainly not the exact length the video grid implies, and the model gets confused about what to generate - or the tail drifts out of sync. This node computes the output duration from the video latent, then sets audio to round(frames / 24 × 40) exactly. Extra audio gets trimmed from the tail; short audio gets silence-padded at the tail.

Two details make it genuinely useful rather than a dumb concat:

  • Origin stays at zero. Padding is added at the tail, not the head, so lip-sync doesn't get a compensating offset that pushes dialogue off the picture.
  • Masks are handled correctly. If either input carries a noise mask, the node builds a matching nested mask, and a silence-padded audio tail gets mask value 1 - meaning the model generates that missing tail instead of pinning silence. That's the difference between "silent tail" and "generated tail."

Inputs and outputs

  • video_latent - a plain H3 video latent (from Split AV or VAE Encode), or an AV latent whose video stream should be kept.
  • audio_latent - optional. A plain H3 audio latent or an AV latent's audio stream. Omit it for silence - the node will generate the correct number of silent audio latents for you, which is a neat way to build an audio-from-scratch start.
  • Outputs: av_latent (the nested joint latent) and sync_report (video latents, derived frame count/duration, audio locked to 40/s, and what was trimmed or padded).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-MiniMax-H3-Guide

Restart, look under MiniMax H3/Latent. No extra dependencies.

Gotchas

  • Batch sizes must match. H3 video and audio batch sizes are validated to be equal; a mismatch is rejected.
  • Non-H3 channel layouts are rejected. This node is opinionated by design - feed it an LTX latent and you'll get a validation error that saves you from a corrupted generation.
  • The LTX route still tempts people. The pack's docs are explicit: on the split → swap → repack route, replace LTXVSeparateAVLatent / LTXVConcatAVLatent with this pair. LTX's joiner doesn't reconcile audio length, so even if the split happens to work, the repack can silently produce wrong-length audio.

The canonical pattern from the docs: first-pass H3 AV → Split (audio) + refined H3 AV → Split (video) → Pack → sampler. If you've ever lost a good audio pass to a video refinement, this pair is the answer - and it's the reason the two nodes exist.

CategoryMiniMax H3/Latent

Inputs (2)

NameTypeDefaultDescription
video_latentLATENTPlain H3 video latent from Split AV/VAE Encode, or an H3 AV latent whose video stream should be kept.
audio_latentoptLATENTPlain H3 audio latent from Split AV/VAE Encode Audio, or an H3 AV latent whose audio stream should be kept. Omit for silence.

Outputs (2)

NameTypeDescription
av_latentLATENT
sync_reportSTRING