MiniMax H3 Aicg AV 解码 T8
Where MiniMax H3's joint latent finally becomes pictures and sound
- av_latent
- video_vae
- audio_vae
- frames
- generated_audio
- video_latent
- audio_latent
Up to this point in the graph you have been shuffling one tensor that contains both a movie and its soundtrack, and nothing you can look at. AICG3D_H3AVDecodeT8GH (AV 解码, "AV decode") is the node that splits the joint latent and runs each half through its own VAE, because H3 has two of them - a video VAE and a separate audio VAE. One latent in, four things out, two of them watchable.
It's three inputs, no widgets, no settings. The interesting part is what it hands back and what it quietly fixes on the way.
What's happening inside
The input av_latent gets split into its video and audio parts, and video_vae decodes the video half while audio_vae decodes the audio half into a proper waveform. If the video VAE returns a 5-dimensional tensor, it gets flattened to a plain frame batch for you - the sort of detail that otherwise shows up as a shape-mismatch error three nodes later.
Then there's the audio cleanup, oddly specific in a way that says the author watched a lot of outputs. When the audio is flagged as model-generated (not a locked source track), the first ~0.75s get analysed in 10ms RMS windows: if a short burst inside the first 50ms is followed by near-silence and then a sustained signal, that burst gets faded out. Audio that runs straight into speech or music from frame zero is left alone - the guard that stops it eating real dialogue. If you've heard a little thump at the head of an H3 clip, this was meant to remove it.
video_latent and audio_latent exist so you don't have to re-sample: the separate, single-modality latents, each carrying its own half of the noise mask. Run a latent upscale on the picture only, or re-decode audio at a different setting, without paying for the sampler again.
The other two are the payoff. frames is a batched IMAGE - your 24fps clip as a tensor. generated_audio is an AUDIO object. Neither is an output node, so nothing gets written to disk until you attach something that saves.
Wiring
[SamplerCustom] ─ LATENT ─► av_latent
[Adapter] ─ video_vae ────► video_vae
[Adapter] ─ audio_vae ────► audio_vae
[AICG3D_H3AVDecodeT8GH]
frames ──────────► SaveVideo / VHS Video Combine
generated_audio ─► SaveAudio, or the audio slot of
whatever muxes frames + sound
video_latent ────► upscale / second pass
The one thing beginners get wrong: frames and generated_audio are two separate streams. If you save the frames with a plain video-save node you get a silent MP4, and it'll look like the node dropped the audio. It didn't. You either feed both into a node that muxes them, or you use the pack's own combine node (in the 13 workflow) - which is where the FFmpeg dependency in the README actually comes from. The audio is still there in generated_audio whether or not it reaches the file.
Install
ComfyUI Manager, search AICG3D or 短剧工作台 (aicg3d-h3-suite on the Registry). Or:
cd ComfyUI/custom_nodes
git clone https://github.com/JGRFW/comfyui-AICG3D
Restart, then right-click → AICG3D → H3 集成. Requirements are imageio-ffmpeg, psutil, requests, aiohttp; torch and torchaudio come from your ComfyUI install. If you plan on writing MP4s with sound, the pack prefers the bundled imageio-ffmpeg binary, falls back to ffmpeg on PATH, and honours VHS_FORCE_FFMPEG_PATH. Install those into the same Python environment ComfyUI runs in - a pip install into system Python is the classic reason "FFmpeg still missing" persists. And you need a recent ComfyUI: the integration module imports H3 support at load.
Where it bites
Garbage colours or noise instead of a picture. You're passing the wrong VAE. Use the video_vae and audio_vae the Adapter hands back - they're the exact ones the conditioning was built with. A same-named file from a different H3 export can still be the wrong one.
The nodes aren't in the menu at all. That's the pack failing to import (usually an old ComfyUI), not this node misbehaving.
Video comes out silent. As above - decode gives you two streams, and nothing muxes them for you. Add the audio to the write path.
A pause and a VRAM dip right before the result appears. Intended - the node garbage-collects and soft-clears the cache after decoding so both VAE outputs aren't left pinned while the rest of the graph runs.
Don't install the old PromptSplit pack alongside this one, or a second H3 integration fork - the AICG3D_H3_ prefix exists precisely because these packs collided, and a duplicate node ID will break the front-end panel faster than anything you can do inside this node.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| av_latent | LATENT | — | |
| video_vae | VAE | — | |
| audio_vae | VAE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| generated_audio | AUDIO | — |
| video_latent | LATENT | — |
| audio_latent | LATENT | — |