MiniMax H3 Native Master -> One-Film Upscale
The gate that hands the whole film to the upscaler only when it's done
- current_frames
- current_audio
- cine_linx
- master_frames
- master_audio
- master_ready
- master_path
- resolved_render_id
- report
Here's a design decision most people don't expect: the H3 Shotboard doesn't upscale segment-by-segment. It renders all the native segments first, stitches them into one film, and only then runs the LTX/Wan finishing pass over the whole thing. The Native Master Load is the gate that enforces that order. Until the last segment is rendered, it's a cheap pass-through that says "not ready." On the final pass, it loads the stitched native movie from disk and hands it to the upscaler as one continuous programme.
Why "one-film upscale" instead of per-segment
The display name says it all: "Native Master → One-Film Upscale." Upscaling each segment separately and then gluing them together gives you seams - the upscaler doesn't know what's coming next, so lighting and grain drift across cuts. Stitch first, upscale the whole film, and the finishing pass sees continuous temporal context. The cost is that nothing upscale-related can run until every segment is committed, which is exactly why this node exists as a lock.
How it works
It takes current_frames, current_audio, the resolved_render_id, current_segment, total_segments, and fps. If current_segment + 1 < total_segments, it returns the current chunk as-is with master_ready = False and a report saying "upscale branch locked" - a cheap pass-through that costs almost nothing. On the final segment it locates the stitched master file (<prefix>_<render_id>_<stage>_full.mp4 - the one the Native Checkpoint Save's merge_segments has been building), decodes it back to frames and audio, and returns master_ready = True along with master_path so downstream nodes can reference the actual file.
The IS_CHANGED override returning NaN is the important bit for queueing: it forces the node to re-evaluate on every queue run rather than relying on cached inputs, because "is the master ready" is a stateful question about files on disk, not about the tensors in the graph.
Inputs and outputs
Required: current_frames, current_audio, resolved_render_id, current_segment, total_segments, fps. Optional: filename_prefix, stage_label. Outputs: master_frames, master_audio, master_ready (BOOLEAN - the one to gate on), master_path, resolved_render_id, report.
Installing it
Part of IAMCCS-nodes: ComfyUI Manager (search "IAMCCS") or git clone https://github.com/IAMCCS/IAMCCS-nodes.git into custom_nodes, restart. Needs ffmpeg for the decode; nothing else.
Gotchas
The pass-through output on intermediate passes is the current chunk, not a master - gate every downstream upscale node on master_ready, or you'll upscale the last segment and think you're done. And the master path must line up with what the checkpoint save produced: same resolved_render_id, same stage_label, same filename_prefix. Mismatch one and the final pass can't find its own film.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| current_frames | IMAGE | — | |
| current_audio | AUDIO | — | |
| resolved_render_id | STRING | — | |
| current_segment | INT | — | |
| total_segments | INT | — | |
| fps | INT | — | |
| filename_prefixopt | STRING | IAMCCS/MiniMaxH3/segment | — |
| stage_labelopt | STRING | native | — |
| cine_linxopt | IAMCCS_SUPERNODE_LINX | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| master_frames | IMAGE | — |
| master_audio | AUDIO | — |
| master_ready | BOOLEAN | — |
| master_path | STRING | — |
| resolved_render_id | STRING | — |
| report | STRING | — |