IAMCCS H3 ULTIMATE LATENT · TILED
H3 delivery that keeps one tile in VRAM at a time
- model
- clip
- video_vae
- audio_vae
- sampled_latent
- stage1_conditioning
- cine_linx
- native_frames
- native_audio
- motion_state
- bridge_frame
- first_frame_override
- last_frame_override
- ref_image_1
- ref_image_2
- ref_image_3
- ref_image_4
- ref_video
- ref_video_audio
- ref_audio
- video_path
- report
Upscaling a latent video model the obvious way means holding the entire latent pass in memory. For a long H3 programme that's the difference between "renders overnight" and "OOM in the third segment" - and it's why the interesting work in this area is always about doing the same job in pieces.
IAMCCS_MiniMaxH3UltimateTiledDelivery is the bounded-memory delivery route. Instead of one full-latent pass it keeps exactly one temporal/spatial piece in the sampler at a time, which is what makes it the practical default while the pack's R41 full-latent route stays available as the high-VRAM quality reference.
Inputs
This is a delivery node, so it takes the whole handoff: model, clip, video_vae, audio_vae, sampled_latent, stage1_conditioning, cine_linx, native_frames, native_audio, resolved_render_id, native_saved_report, current_segment, total_segments, context_trim_frames, join_trim_frames, and queue_next_segment (default true).
Optional: motion_state, bridge_frame, first_frame_override, last_frame_override, ref_image_1–ref_image_4, ref_video, ref_video_audio, ref_audio.
Most of those are pass-through from the earlier stages - the point is that this node sits at the end of the universal chain and receives the same provenance the rest of the delivery group exchanges. queue_next_segment is the one you'll actually flip: leave it true and the Shotboard queue continues to the next segment after this one finishes; set it false to render one segment and stop, which is what you want while tuning.
Outputs are video_path and report. The path is the encoded file; the report is your audit line.
The tiling parameters aren't on the node
They live in the pack's H3 settings, and the node reads them from the plan. Worth knowing their shape even so, because it explains the timing:
- Spatial tiles default to 512×512 with 96px overlap and a 32px fade, snapped to multiples of 32.
overlap_width/overlap_heightare clamped to the tile size minus 32 so you can't ask for more overlap than tile. - Temporal chunking defaults to 102 frames, rounded to a multiple of 17 - H3's temporal cadence - with 17-frame overlap, and overlap can never exceed chunk minus 17.
- Overlap handling is
earlierwith a linear blend by default, andanchor_strengthsits at 0.999, which is what keeps the tiles locked to their reference rather than each drifting off on its own.
If your tiled output shows a faint grid, the fade and overlap are too small for your content; if it shows repeated detail, the overlap is working against you and the anchor is too strong. Those two symptoms have opposite fixes, so change one thing at a time.
Dependencies that will stop you
Two, and both are named in the error rather than discovered later:
Comfyui-MMH3-UltimateUpscale- the tiled upscale engine. Without it the node can't do anything and says so.- A MiniMax H3 3D latent upscaler checkpoint in
models/latent_upscale_models, selected in IAMCCS Settings. That's a real download, not a config toggle.
If the RTX path is requested, the target is halved and grid-rounded before the RTX pass finishes it, so the tile job stays cheap and the final size is handled by the dedicated pass.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Or Manager → search IAMCCS, restart. Then add the MMH3 Ultimate Upscale pack and drop the H3 latent upscaler into models/latent_upscale_models.
Native H3 audio stays the final authority in this route - the audio you get out is the one the model generated, not something the upscale touched. And because it's per-shot delivery, it composes with the queue: each segment lands as its own file with its own report, which is a lot easier to review than one enormous master at the end of a four-hour run.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| video_vae | VAE | — | |
| audio_vae | VAE | — | |
| sampled_latent | LATENT | — | |
| stage1_conditioning | CONDITIONING | — | |
| cine_linx | IAMCCS_SUPERNODE_LINX | — | |
| native_frames | IMAGE | — | |
| native_audio | AUDIO | — | |
| resolved_render_id | STRING | — | |
| native_saved_report | STRING | — | |
| current_segment | INT | — | |
| total_segments | INT | — | |
| context_trim_frames | INT | — | |
| join_trim_frames | INT | — | |
| queue_next_segment | BOOLEAN | true | — |
| motion_stateopt | IAMCCS_H3_MOTION_CONTEXT | — | |
| bridge_frameopt | IMAGE | — | |
| first_frame_overrideopt | IMAGE | — | |
| last_frame_overrideopt | IMAGE | — | |
| ref_image_1opt | IMAGE | — | |
| ref_image_2opt | IMAGE | — | |
| ref_image_3opt | IMAGE | — | |
| ref_image_4opt | IMAGE | — | |
| ref_videoopt | IMAGE | — | |
| ref_video_audioopt | AUDIO | — | |
| ref_audioopt | AUDIO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |
| report | STRING | — |