MiniMax H3 Delivery V2 (Lazy Upscale + RIFE)
Pick the final frames, upscale or not, and optionally smooth to 60fps
- cine_linx
- native_frames
- native_audio
- bridge_last_frame
- ltx23_upscaled_frames
- ltx23_4k_frames
- wan22_upscaled_frames
- delivery_frames
- audio
- bridge_last_frame
- delivery_fps
- upscale_applied
- report
The delivery router is the last decision-maker before your film gets written to disk. It takes the native H3 render and its optional upscaled siblings, picks which one is actually the delivery master, resizes it to the exact target dimensions, and then - if the plan says so - runs RIFE frame interpolation to bump the frame rate. "Lazy upscale" in the display name is the whole architecture: the LTX/Wan branches only get evaluated when this node actually needs them.
How it works
The node receives native_frames and native_audio, plus up to three lazy IMAGE inputs: ltx23_upscaled_frames, ltx23_4k_frames, and wan22_upscaled_frames. It reads the shot plan's upscale_mode and upscale_settings to decide which input (if any) is the source of truth. If upscale_enabled is off, or master_ready is false, the answer is "native" - and thanks to check_lazy_status, none of the LTX/Wan branches execute at all. This is the same pattern as the rest of the pack: a graph full of upscale machinery that costs zero VRAM until a segment actually needs it.
Once a branch is selected, the node resizes the frames to the delivery target on the CPU (_resize_frames_exact_cpu - exact sizing matters because H3's native output and an LTX round trip can disagree by a few pixels). Then the RIFE stage runs if rife_mode is set:
rife_48fps- RIFE 2x, 48 fps.rife_60fps- RIFE 5x to build a 120fps lattice, then takes every second frame to get a true 60fps output without changing the H3 generation clock or the native bridge.off(default) - frames pass through unchanged at the native 24fps.
The clever detail in the 60fps path: by interpolating from the 5x lattice rather than a naive 2.5x, the output is a true 60fps timeline that still syncs to the native 24fps audio.
Inputs and outputs
Inputs: cine_linx, native_frames, native_audio, bridge_last_frame, master_ready, and the three lazy upscale sockets. Outputs: delivery_frames, audio, bridge_last_frame (passed through, so the bridge survives for the next segment), delivery_fps (24/48/60), upscale_applied (a string naming which branch won, e.g. "LTX 2.3", "Wan 2.2 5B", "off/native"), and report. The upscale_applied string is what you should log - it's the ground truth of what made it into the final file.
Installing it
Part of IAMCCS-nodes (Manager, search "IAMCCS", or clone into custom_nodes). The RIFE modes need ComfyUI-Frame-Interpolation (Fannovel16) plus the RIFE model in models/controlnet - the node calls the RIFE VFI node with rife49.pth. Without that pack, any rife mode other than "off" will fail at the moment it's selected.
Gotchas
The lazy inputs cut both ways. If you enabled LTX upscale in the plan but left the ltx23_upscaled_frames socket unconnected, this node raises a ValueError at selection time - it won't silently hand you native frames. Read upscale_applied on every render; "off/native" when you expected an upscale means the plan flag is off or master_ready is false, not that the node is broken.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| cine_linx | IAMCCS_SUPERNODE_LINX | — | |
| native_frames | IMAGE | — | |
| native_audio | AUDIO | — | |
| bridge_last_frame | IMAGE | — | |
| master_readyopt | BOOLEAN | true | — |
| ltx23_upscaled_framesopt | IMAGE | — | |
| ltx23_4k_framesopt | IMAGE | — | |
| wan22_upscaled_framesopt | IMAGE | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| delivery_frames | IMAGE | — |
| audio | AUDIO | — |
| bridge_last_frame | IMAGE | — |
| delivery_fps | INT | — |
| upscale_applied | STRING | — |
| report | STRING | — |