Nodes/ComfyUI-MiniMaxH3-Contex-Loop/MiniMax H3 Upscale Loop End
ComfyUI Node

MiniMax H3 Upscale Loop End

The recursive engine that walks your MiniMax H3 upscale chain, one scene at a time

By ethanfel·Created 17 days ago·Updated about 18 hours ago· 315
MiniMax H3 Upscale Loop End
  • flow
  • state
  • images
  • segment
  • upscaled_latent
  • manifest
  • manifest_json
  • last_context_frames
  • last_context_latent

Upscale Loop End is the recursion point of the child upscale graph - the mirror image of the main loop's Loop End, but for the deferred upscale pass. It receives the scene you just refined and persisted, advances the child graph to the next scene, and when the selected range completes, emits a mergeable manifest. If Upscale Adapter is where the child run is born and Upscale Current is where each scene gets loaded, this node is the heartbeat that keeps the loop going until the last scene is done.

The mechanism is the same recursive GraphBuilder trick the whole pack uses for the generation chain: one sampling body, cloned per iteration, carrying only the previous clip's compact context forward. In the upscale child, the carry is the upscaled_latent (the transient HQ latent for the next scene) and the previous scene's delivered HQ context frames - enough continuity for the upscale body to keep motion consistent without re-loading the entire production.

What it needs and gives

  • flow - connect directly from Upscale Adapter. This raw link defines the recursive child-loop body, and it's how the node knows which scene comes next.
  • state - the current child-run state from Upscale Current.
  • images - the same RAW HQ frames you sent to Upscale Segment Save. Feed both from the same output so the loop's frame accounting matches what was actually persisted.
  • segment - the persisted HQ scene record from Upscale Segment Save.

The optional upscaled_latent is the transient HQ carry for the next scene - deliberately independent of the Adapter's save_latent setting, so you can hand context forward in memory without committing the big latent to disk on every scene.

Outputs: manifest (the complete verified child manifest for Upscale Merger, or a partial one if the range stopped short), manifest_json (the readable JSON form), last_context_frames (the delivered HQ tail from the last processed scene), and last_context_latent (the transient HQ latent, if connected). That last pair is what a downstream "continue from here" or a merge step can consume if you want to keep going after the manifest.

Where it fits in the bigger picture

The child upscale loop is the "finishing" half of the pack's production model: generate scene by scene with review, checkpoint, and resume on the generation side, then run a separate deferred pass over the accepted checkpoints to refine them - H3 latent upscale, an LTX 2.5 V2V pass, or a custom recipe - with its own resume. That separation is what lets you regenerate scene two for content reasons without redoing the upscale of scenes one and three, or tweak the upscale recipe without touching the accepted generations. The manifest this node emits is the contract that makes merge possible; without it, the Merger would have no idea which scenes were actually upscaled and in what order.

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; expects a current ComfyUI with native Add Guide for MiniMax H3. H3 weights aren't bundled and are geofenced out of the US/EU/UK/South Korea under the Community License; an LTX-based body additionally needs the LTX packs.

Gotchas

The images input is where people trip: it must be the same RAW HQ frames that went to Segment Save - the loop's frame count has to agree with what's on disk, or the manifest records a scene whose persisted length doesn't match what the loop thinks. And don't expect a manifest from a loop that never completed: you get a partial manifest, which is honest but isn't what Upscale Merger wants. Finish the range, then merge.

Categoryconditioning/minimax/contex_loop/upscale

Inputs (5)

NameTypeDefaultDescription
flowH3_CHAIN_UPSCALE_FLOWConnect directly from Upscale Adapter; this raw link defines the recursive child-loop body.
stateH3_CHAIN_UPSCALE_STATECurrent child-run state from Upscale Current Scene.
imagesIMAGESame RAW HQ frames sent to Upscale Segment Save.
segmentH3_CHAIN_UPSCALE_SEGMENTPersisted HQ scene record from Upscale Segment Save.
upscaled_latentoptLATENTOptional transient HQ carry for the next scene. It is independent of save_latent.

Outputs (4)

NameTypeDescription
manifestH3_CHAIN_UPSCALE_MANIFESTComplete verified child manifest for Upscale Merger, or a partial manifest.
manifest_jsonSTRINGReadable JSON form of the emitted child manifest.
last_context_framesIMAGEDelivered HQ tail retained from the last processed scene.
last_context_latentLATENTTransient HQ latent retained from the last processed scene, if connected.