MiniMax H3 LMS Upscale Guide (Experimental)
Let the model redraw your upscaled scene, not a tile grid
- state
- clip
- video_vae
- images
- video
- positive
- latent
- width
- height
- raw_frames
- status
Most video upscaling arguments are two people doing different jobs. The upscaling essay splits it cleanly: more pixels is interpolation, more detail is generation, and "more pixels over time" is the unsolved one. This node is squarely the third job, and it picks a side - instead of tiling a still-image upscaler across frames, it hands the whole enlarged scene back to H3 as a guide and lets the model re-denoise it at that size with LMS.
It is marked Experimental in the display name for a reason. Read the memory section before you queue it.
The mechanism
You take one complete enlarged RAW scene - from DLSS5 or any other frame-preserving upscaler - and this node encodes it with the H3 video VAE into a native H3 video guide, wiring it as a minimax_keyframes entry at frame zero. Alongside it, the node allocates a fresh empty joint AV latent at exactly the same width, height and frame count. So you are not re-noising the source; you are sampling a new video that is conditioned on the enlarged frames, at full length, in one pass.
Three details matter. Only the enhancement caption goes to Qwen - no visual references, no Ref2VA cache reconstruction, no images pushed into the text encoder. Geometry is pinned: the encoded guide must come out as exactly (1, 24, (raw - 5) // 17 * 5 + 2, h // 16, w // 16), the H3 token grid for that frame count, and a mismatch is an error rather than an implicit resize. And where ComfyUI's native AddGuide would push the batch through an unconditional PIL/Lanczos resize, this node encodes your pixels unchanged and builds the same keyframe payload itself.
Inputs and outputs that matter
state- the current scene, from a pixel Upscale Adapter. Its RAW frame clock has to match the guide exactly, and the backend must bepixel.clipandvideo_vae- the H3 Qwen encoder and the H3 video VAE.prompt- the enhancement caption, defaulting to "Enhance this video with sharp, crisp details while preserving a natural photorealistic appearance." Changing it is how you steer sharpness versus plasticity.imagesorvideo- exactly one.imagesis your enlarged RAW scene as an IMAGE batch;videois a file-backed route for a video upscaler at 24 fps. Both are decoded as one full scene in RAM.
On the way out: positive (caption plus the full-length guide) goes to your Guider; latent is the fresh AV target for the sampler; width, height and raw_frames keep downstream nodes honest; status states the guide route, the memory warning and the audio contract - send it to Preview Any.
The recipe is not the low-denoise CAT recipe. Use RandomNoise, denoise 1, and LMS (the author's minimax_h3_lms_v1.0_r64 LoRA) plus Ref2V Turbo on the model. Do not use Pass-2 AV Prepare. Split the sampled latent and decode video only: the sampled audio is deliberately discarded, and Upscale Segment Save restores the original checkpoint's sound.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/seitanism/ComfyUI-H3-Motion-Context-MultiRef.git
git clone --branch main https://github.com/ethanfel/ComfyUI-MiniMaxH3-Context-Loop.git
Restart, then grab the weights this workflow assumes: the H3 Ref2VA model, matching video VAE and Qwen encoder from Comfy-Org's MiniMax-H3 repo, the Ref2V Turbo 4-step v0.1 LoRA, the LMS LoRA from Alissonerdx's H3 repo, and the DLSS5 pack if you want the example's upscaler. Nothing is downloaded for you. ComfyUI Manager lists the pack as MiniMax H3 Context Loop.
Where it bites
Memory, first and loudest. This is full-scene H3 guide sampling, not a tiled CAT replacement, and it holds the guide and the target video tokens at once. The pack's own worked figure: a 362-frame 2016×1152 float32 RGB batch is about 9.4 GiB before VAE work, weights, latents and attention. Processing scene by scene avoids allocating a whole chapter; it does not promise one scene fits.
ComfyUI version. The node imports ComfyUI's native EmptyMiniMaxH3LatentAV and MiniMaxH3AddGuide lazily and raises a plain "update ComfyUI" error if they're missing. An old install fails here, not in the graph.
Silent geometry drift. A fractional upscale like 1.5x can leave you off a multiple of 32, and then an aspect-compatible source simply errors out. Adjust the upscaler or align its output before the guide; there is no hidden resize, and a different output size than already-completed scenes in the profile is refused.
Profiles. Use a new profile for this recipe, start_clip to resume mid-branch, and never mix CAT results and LMS results under one profile. Existing media is never resized for you.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| state | H3_CHAIN_UPSCALE_STATE | Current scene from a pixel Upscale Adapter. Its RAW frame clock must match the guide exactly. | |
| clip | CLIP | H3 Qwen text encoder. Only the enhancement caption is encoded; no visual refs/cache are used. | |
| video_vae | VAE | H3 video VAE for encoding the enlarged guide. | |
| prompt | STRING | Enhance this video with sharp, crisp details while preserving a natural photorealistic appearance. | — |
| imagesopt | IMAGE | One complete enlarged RAW scene from DLSS5 or another frame-preserving upscaler. Connect images OR video, not both. No trim or resampling. | |
| videoopt | VIDEO | Alternative RAW 24 fps guide from a VIDEO upscaler. Decoded as ONE FULL SCENE in RAM, not streamed. Its audio is ignored. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | Caption plus a full-length native H3 video guide at frame zero. |
| latent | LATENT | Fresh empty joint AV target. Use RandomNoise, denoise=1 and LMS + Ref2VA Turbo on the model; do not use Pass-2 AV Prepare. |
| width | INT | Actual guide width. |
| height | INT | Actual guide height. |
| raw_frames | INT | Unchanged RAW frame count. |
| status | STRING | Guide route, memory warning and audio preservation contract. |