Save MiniMax H3 AV Latent
Bank the sampler output so a 33B video render isn't a one-shot
- samples
- samples
MiniMax H3's selling point is that it generates the picture and the audio together - dialogue, room tone, stereo - rather than leaving you to bolt sound onto a silent clip. That also makes its latent an awkward thing to keep: it isn't the single 4D tensor ComfyUI's own save nodes expect. It's a nested structure with more than one member. Which is the whole reason this node exists.
Save MiniMax H3 AV Latent writes that latent to output/latents/MiniMaxH3/ as a .h3latent file, and passes the latent straight through so you can wire it into your VAE decode as if the node weren't there.
Why you'd reach for it
Sampling is the expensive part of an H3 run - the model is a 33B omni-modal transformer, and the community consensus on day one was that the quality was real and the compute bill was the price. Everything after the sampler is comparatively cheap: decode the video, decode the audio, mux. So when you're tuning the last stages, or comparing two decodes, or your audio path failed and you want to fix it without re-sampling twenty minutes of video, you want the latent on disk.
The other use is the boring one: an uninterrupted artifact trail. One .h3latent per run, named after the clip, sitting next to its boxes and masks.
How it works
The node unpacks the latent's members - unbind() on a NestedTensor, or the tensor itself if it's a plain one - and refuses an empty one rather than writing a zero-member file. Then it writes them with ComfyUI's own save_torch_file, which means safetensors, not pickle: latent_0, latent_1, and so on, plus a tensor_count field that the loader uses to rebuild the structure. The dtype you saved is preserved.
Metadata rides along unless you've launched ComfyUI with --disable-metadata: the format tag, the version, the tensor count, the full prompt JSON, and whatever's in extra_pnginfo. Note what isn't in there - there's no VAE name and no model hash. An image file embeds the workflow that made it, so you can drag it back in and rebuild the graph. A latent can't do that. It's a coordinate in one specific VAE's latent space, and if you decode it with a different VAE you get noise, correctly and confidently. Keep the file with a note, or keep it in a workflow that already loads the right VAE.
Inputs and output
samples- theLATENT. Required. Goes straight from your sampler.subfolder- defaults tolatents/MiniMaxH3; the loader's default matches, so leave both alone unless you're organising by project.filename_prefix- defaultMiniMaxH3, used only when nothing better names the file.basename/video_filename/timestamp- the pack-wide naming trio. Feedbasenamefrom Build Media IO Basename and the file lands asyour_clip_20260925_104402.h3latent, matching the boxes and masks from that run.
Output is samples, the LATENT, unchanged. Chain it into VAE Decode and nothing downstream notices.
Install
Manager, search the pack title, or:
cd ComfyUI/custom_nodes
git clone https://github.com/swanjohn99/comfyUIcostumNodes
Restart ComfyUI. Nothing to pip install and no models to download - comfy.utils.save_torch_file and safetensors are already there.
Where people get burned
An old ComfyUI can take the whole pack down with it. This module imports comfy.nested_tensor at load time, and on a build from before H3 support that import fails - which fails the pack's __init__.py, so the bounding box and mask nodes vanish from your menus too, not just the H3 ones. If every node from this pack disappeared after a git pull, check your ComfyUI is current before you go hunting for a Python problem.
The licence is the other thing to get straight before you invest in a workflow, and it's not a node issue: H3's open weights ship under a community licence whose Applicable Territory excludes the US, EU, UK and South Korea. The hosted Hailuo API is available globally; the downloadable weights are not licensed for those regions. Worth knowing before you build your pipeline around it.
And a mild one - the file's subfolder is what the loader looks in, so if you save with a custom subfolder, remember to set the same one on Load MiniMax H3 AV Latent, or the dropdown will come up empty and you'll assume the save failed.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | — | |
| filename_prefix | STRING | MiniMaxH3 | — |
| subfolder | STRING | latents/MiniMaxH3 | — |
| basenameopt | STRING | — | |
| video_filenameopt | STRING | — | |
| timestampopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| samples | LATENT | — |