H3 Video Outpaint · 保存所选扩画 (EXP)
Save the outpaint — and it will refuse if the first frame moved
- sampled
- video_vae
- video
- delivery_report
You've reviewed a first frame, confirmed it, and spent the evening generating the rest. MiniMaxH3VideoOutpaintComposeCandidateT8 is the node that turns the finished windows into an MP4 - and it's the most paranoid node in the pack, for good reason.
Three inputs: sampled (from Continue, or from Load Completed Selection if you're recovering a finished job), video_vae, and output_name (default selected_outpaint). Outputs: video as a VIDEO object and delivery_report as JSON. The file lands in ComfyUI/output/T8_H3_Outpaint/ with an auto-incrementing suffix, plus a .outpaint.json sidecar.
It re-checks the thing you approved
Here's the mechanism that makes this node interesting. When you confirmed the candidate, an archive was written containing the preview's RGB hash and the colour/geometry settings used to produce it. This node reads that record, applies the same settings, and after composing, compares the recomposed first frame against the hash of the preview you signed off on. Mismatch, and it refuses to publish.
Why bother? Because in a long chained run there are a dozen ways for the settings to drift - a different mode, a different colour-match strength, a re-run of one stage with different defaults. Any of those and you'd be shipping a video whose first frame is not the frame you approved, and you'd probably never notice, because it looks fine. The check converts a silent quality regression into a hard error. I'd like more video nodes to do this.
The consequence: you don't get to change color_match or source_mode here. They're inherited from the candidate, which is exactly what "候选模式沿用" (the candidate's mode carries through) means in the pack's docs. If you want a different mode, generate a new candidate and review it.
Colour and geometry, inherited
The color_match and geometry_align settings don't appear as widgets because they were fixed at candidate time. Color match here is the shot-local boundary tint correction: paired RGB offsets measured on matching inner source strips, faded into the expanded area only, reset at each hard cut so a previous shot's tint can't bleed into the next. It applies in preserve_source mode; joint decode skips it along with geometry correction. geometry_align is the experimental OpenCV contour correction, off unless you turned it on at the candidate.
The source audio
Preserved. The soundtrack is validated by container packet, timeline and decoded PCM before being copied into the finished file - not re-generated, not re-mixed. A silent source delivers silent.
What the file actually is
A conservative encode: full-intra H.264, single-threaded x264, chosen after the author reproduced multithread decode corruption locally. Files are noticeably larger than a normal delivery encode. That's the trade the pack chose deliberately, and I'd take it - a slightly fat file that plays everywhere beats a slim one with glitched frames on someone else's machine. Odd-height canvases switch to High 4:4:4 rather than being refused.
Install
Manager: search MiniMax H3 Audio T8, then restart ComfyUI completely. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
requirements.txt is empty by design - the pack won't touch your Torch/CUDA stack. You will need ffmpeg on PATH for the encode and audio mux, the H3 video VAE in models/vae, and - for the generation stages that fed this one - the full model set plus ComfyUI-KJNodes.
Where to check first when it errors
A refusal naming the first-frame hash means something between the candidate and here changed. Walk back: was the candidate generated with a different source_mode? Did you re-run any stage with a different colour setting? If the answer is "I don't know", regenerate the candidate - you get a fresh preview and a fresh approval, which takes minutes, versus debugging a hash mismatch that takes an hour.
If it errors on a missing or unreadable archive, the answer is usually the ID. The candidate and selection IDs are 64-character strings; paste them whole. Truncating one gets you a lookup failure, not a helpful "did you mean". And if the sampling finished but the save crashed, don't re-sample - use the load-completed-selection node, which feeds this same input without ever loading the H3 model.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| sampled | T8_H3_OUTPAINT_SELECTED_SAMPLED | — | |
| video_vae | VAE | — | |
| output_name | STRING | selected_outpaint | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| delivery_report | STRING | — |