Glide Latent Load
Upscale the take you already rendered instead of paying for the first pass twice
- latent
- width
- height
- length
MiniMax H3 is a 33B omni-modal video model with native stereo audio, and it hands you a few seconds at a time - so one 15-second shot is already an expensive render. Now run the two-pass dance on top: draft at canvas size, upscale the latent, refine. Do that on every take and you've paid for the first pass four times to keep one clip.
Glide Latent Load kills the redundant half. It takes the full latent the first sampler already made, saved to disk next to the video, and hands it back as a normal LATENT - so your upscale-and-refine graph starts from the real sampler output instead of re-running generation.
What it actually loads
H3 latents pack audio and video together, and this node decodes nothing: it reads the safetensors file, rebuilds the nested video/audio tensor, and prints what it found. Width and height come from the latent's spatial dims (16× per latent unit) and length is converted back to picture frames on H3's grid, so a 15-second, 24 fps take comes back as 362 frames - the number the workflow originally asked for.
The file is written by Glide Video, not by this node. Its save_latent widget has three positions: tail (default, the ~5 MB .h3latent used for chaining linked clips), full (also writes <name>.h3full, the whole latent, ~30 MB), and off. Only full produces anything this node can see.
Here's the trap that eats people: save_latent is only read when Glide Video's latent input is wired. Set it to full with nothing plugged into that input and you get no .h3full, ever, while you sit wondering why the dropdown is empty.
The odd extension is deliberate: H3 Studio's Settings → Delete latents… only sweeps chaining tails, so an upscale latent survives cleanup - which also means they pile up at 30 MB apiece and you prune them yourself.
Inputs and outputs
One input. latent_file is a dropdown of every .h3full under your output/ folder, newest first, capped at 500. Press R to refresh it after a render.
Four outputs:
latent- the packed audio+videoLATENT, into a latent upscaler (MinimaxH3LatentUpscaler3Dis what the pack's own example workflow uses) and then the refine sampler.width,height,length- original canvas size and frame count as plain INTs, so you can sanity-check what you loaded.
What it pointedly doesn't give you is conditioning - the prompt isn't in the file. Open the same clip in H3 Studio and wire its positive_refine into the second sampler: same prompt and references, minus the continuation anchor. The audio half rides along too, so VAEDecodeAudio still works after the refine.
The workflow that makes it worth it
Draft at canvas size with the sampler's output wired into Glide Video's latent and save_latent on full. Later, load the .h3full into Glide Latent Load → latent upscaler → refine sampler, with positive_refine as conditioning, low denoise, few steps. The pack's example uses 3 steps at 0.3 - the classic hi-res-fix ratio; much above 0.5 and the composition drifts. Then decode, join, mux.
No first pass, and no decode-encode round trip of pixels you already had. Same thesis as H3 Studio's "latent hold" for chained clips.
Installing the pack
Search CGlide in ComfyUI Manager and pick nightly, or:
cd ComfyUI/custom_nodes
git clone https://github.com/CGlide/ComfyUI-CGlide
Restart ComfyUI afterwards - a new .py file needs a real restart, not a browser refresh. The nodes land under CGlide in the menu.
Watch the folder name. The Manager's registry version installs into a folder called cglide that isn't a git clone, so git pull does nothing there. If you have one, delete it and clone instead; keeping both loads the pack twice.
Models come from the Comfy-Org MiniMax H3 repo: checkpoint into models/diffusion_models/, text encoder into models/text_encoders/, both VAEs into models/vae/. Kijai's w4a8 checkpoint drops the model from ~21 GB to ~11.8 GB if VRAM is tight. The README lists PyAV and torchaudio as requirements (usually already there) and ffmpeg on your PATH - though only Glide Video shells out to ffmpeg.
Common issues
The dropdown only says "(no .h3full in output - set save_latent to full on Glide Video)". That's the placeholder for an empty list: nothing saved yet, save_latent on tail/off, or Glide Video's latent input unwired. Fix in that order. A filename_prefix subfolder is fine - the node walks the whole output tree - a different --output-directory isn't.
It threw not a .h3full in the output folder. The stored path is checked, never trusted, so a file moved or deleted after the list was built fails loudly. Refresh with R and pick again.
The refine looks like a different shot. You probably saved the wrong latent. The file holds whatever was wired into Glide Video, so wiring a refine sampler instead of the first one means you loaded an already-upscaled latent and upscaled it again.
Audio vanished. The node warns when a file holds no audio latent, which happens when the first pass was video-only; you get a plain video tensor and nothing to decode.
Old ComfyUI, weird results. The README is blunt that most reports are a stale ComfyUI rather than the model. The w4a8 low-VRAM path needs 0.31.0 or newer, and getting it wrong looks like a black video with sound - no error at all.
One honest limit from the pack's notes: upscaling a linked chain clip by clip can bring the seams back, since each clip gets refined alone. Fine for single takes and cuts.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| latent_file | COMBO | A full latent saved by Glide Video (save_latent = full), newest first. Press R to refresh the list after a render. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| width | INT | — |
| height | INT | — |
| length | INT | — |