MiniMax H3 Safe AV Save / 安全音视频保存 (Advanced EXP/T8)
A save node that refuses to write a corrupt H3 MP4
- images
- audio
- video
- saved_path
- report_json
MiniMax H3's whole trick is that the audio is generated with the picture, not bolted on after. So your save node matters more than it does for a silent model - and this one is built like the author has been burned by a corrupt encode one too many times. MiniMaxH3SafeAVSaveT8Advanced (display name: "MiniMax H3 Safe AV Save / 安全音视频保存") is the defensive end-of-the-line saver for the T8 pack: feed it raw image frames plus audio, and it won't hand you an MP4 until it has encoded the thing, decoded it back, and verified it's intact.
It's the node doing the saving in the pack's VDN two-pass workflows (which is why its default filename prefix is MiniMaxH3/VDN_Refine), but you can drop it on the end of any H3 generation that produces even-sized, 24fps frames with an AUDIO tensor. It's flagged Advanced EXP, so treat it as the author's strictest path rather than the only one.
How it works
Nothing here calls an API or needs a key - this is pure local encoding, and that's the point. The node pipes your frames into an isolated, single-thread ffmpeg subprocess (rawvideo in, libx264 all-intra baseline out), muxes the audio as AAC, and then runs a strict decode (ffmpeg -xerror) on the result before it publishes the file with an atomic hard link. No overwrite: if the target already exists, it refuses rather than clobbering. A side effect of all that paranoia is a useful one - the node also refuses to save if your source audio is clipped, so you find out the audio is bad while you can still do something about it.
Requirements: FFmpeg on your PATH. That's it. There's no pip dependency - the pack leans on the torch/numpy/Pillow ComfyUI already ships, which is rare for a video pack this size.
The inputs and outputs that matter
Only four inputs, and you'll touch two of them:
- images (IMAGE) - raw
[frames, height, width, channels]frames. Must be even-sized (height and width both divisible by 2) and RGB or RGBA; the H3 decoders hand you this shape naturally. - audio (AUDIO) - the AV dict from your H3 pipeline, carrying sample rate.
- filename_prefix - where it lands under
output/, defaulting toMiniMaxH3/VDN_Refine. - crf - x264 quality, 18 default, 0–51. Lower is bigger and cleaner; 18 is a fine starting point for video meant to survive re-encoding later.
Outputs are the fun part: video is a reusable VIDEO object - the whole reason you don't add a second SaveVideo after this node. You also get saved_path (STRING, the file path) and report_json, which carries the SHA-256 of your source frames and of the published file, the frame count, CRF, and an audio report. It's essentially a receipt proving what was written and that it decodes.
Installing it
Search "MiniMax H3 Audio T8" in ComfyUI Manager and restart - or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Then fully restart ComfyUI. This pack depends on ComfyUI's native MiniMax H3 support, so if nodes come up red the fix is usually updating ComfyUI itself, the frontend, and Manager - not just this plugin.
Where people get stuck
- "H3 safe output requires even-size" - your frames are odd dimensions; crop or pad before this node.
- "must be a new MP4" - rerunning a finished workflow hits the no-overwrite guard. Change the prefix or clear the file; that error is the safety doing its job.
- No ffmpeg on PATH - install FFmpeg and make sure
ffmpegresolves from your shell. - "refuses clipped source audio" - your audio is peaking; fix the source rather than fighting the node.
If you're here for the two-pass VDN route, this is the save node waiting at both ends of it - the first-pass save keeps a recoverable copy, and the final save writes the refined result without re-encoding audio. That's covered by its sibling planner node, MiniMaxH3VDNRefinePlanT8Advanced.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| audio | AUDIO | — | |
| filename_prefix | STRING | MiniMaxH3/VDN_Refine | — |
| crf | INT | 180–51 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| saved_path | STRING | — |
| report_json | STRING | — |