MiniMax H3 Upscale Merger
Stitch your upscaled MiniMax H3 scenes into one HQ MP4
- manifest
- source_audio
- source_timeline
- video_path
Upscale Merger is where the child upscale loop finally pays out: it takes the completed child manifest, verifies every HQ scene segment, reuses the source audio contract, and publishes the assembled movie under upscaled/<profile>/final. This is the node you run once, at the end, when you're happy with the refined scenes. It's the upscale half's equivalent of the main loop's Assemble node - and it's refreshingly small, because the hard work already happened scene by scene.
What it does
Input is the manifest from Upscale Loop End - and the tooltip is specific: a complete manifest, emitted after the child loop reached the final source scene. If you hand it a partial manifest (the loop stopped early), don't expect a clean final movie. The Merger verifies the HQ child segments before joining, so a corrupted or missing scene surfaces as an error rather than a broken seam in your output.
The audio story is where this node is smarter than it looks. The default audio_source is plan, which follows the parent chain's configured audio mode - so a generation run that was set to "generated" yields an HQ final with the checkpointed generated audio, a "source" run recovers the saved upstream track, and "none" stays silent. You can override per-merge with source, generated, or none. The optional source_audio input is the original full source track for when audio_source resolves to source, and the optional source_timeline usually isn't needed because the parent manifest's recovery descriptor already carries the audio.
Two more small controls: filename (final MP4 basename, default final, collisions versioned automatically) and audio_bitrate (AAC bitrate in kbps when audio is muxed, default 256).
Output: one video_path - the absolute path of the verified merged HQ MP4 under the child profile. That's it. A terminal output node, as simple as the job deserves.
Why this design is right
The whole Contex Loop philosophy is "write early, join late." You review and persist each scene independently on the generation side, then upscale each scene independently on the child side, and only at the very end do you join anything. The Merger's one-job narrowness is the payoff: by the time you're here, everything that could have gone wrong has already gone wrong earlier and been fixed in isolation. If the merge fails, the failure is in verification - a segment that isn't what the manifest claims - not in some god-node trying to do ten things at once.
Install
From ComfyUI-MiniMaxH3-Contex-Loop. ComfyUI Manager → search the pack, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-MiniMaxH3-Contex-Loop.git
Restart. No pip deps; ffmpeg on PATH is preferred for the merge encoding, with ComfyUI's bundled PyAV as fallback. Current ComfyUI with native Add Guide for MiniMax H3 expected on the generation side. H3 weights aren't bundled (and are geofenced out of the US/EU/UK/South Korea under the Community License).
Gotchas
The classic mistake is merging off a partial manifest after stopping the child loop early and expecting a full movie - you get a partial, and the node will tell you so, but only if you read it. The subtler one is the audio contract: audio_source: plan inherits whatever the parent chain said, so if you changed the audio policy mid-production you may get an unexpected soundtrack in the HQ final. Check the resolved audio source before you queue the merge; re-merging is cheap, but a silent mismatch is easy to miss until you watch the file.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| manifest | H3_CHAIN_UPSCALE_MANIFEST | Complete manifest emitted after the child loop reaches the final source scene. | |
| audio_source | COMBO | plan | Final audio policy. plan follows the parent chain's configured mode. |
| filename | STRING | final | Final MP4 basename; collisions are versioned. |
| audio_bitrate | INT | 25664–512 | AAC bitrate in kbps when audio is muxed. |
| source_audioopt | AUDIO | Original full source track when audio_source resolves to source. | |
| source_timelineopt | H3_SOURCE_TIMELINE | Optional 0.5 Source Timeline. Usually the parent manifest's recovery descriptor is enough. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | Absolute path of the verified merged HQ MP4 under the child profile. |