VRGDG H3 Load Draft Checkpoint
Reload an H3 draft latent and skip the 40-minute sampler pass
- LATENT
There is one widget on this node. One. A text field for a file path, and a LATENT coming out the other side. If you came here hoping for options, this is not that node - and honestly, the lack of options is the feature.
VRGDG H3 Load Draft Checkpoint reads back a latent written by VRGDG H3 Save Draft Checkpoint. That's the relationship. It's not a general latent loader, it won't take a .safetensors, it won't decode anything, and it won't infer a path from a project folder. You give it the exact file you saved and it hands you the tensor, on CPU, ready to continue a graph from the point where you stopped.
Why this is worth a node
H3 sampling is the expensive part of any MiniMax H3 workflow - 33B parameters, joint video and audio tokens, and a scene-by-scene music-video pipeline that can run many hours on one card. Once you've paid that cost, the latent in hand is the valuable artifact: it's the thing the model actually decided, before the VAE got involved.
So the load side is where the iteration happens. You save a draft, then you rebuild the front half of the graph as a loader and start experimenting with everything downstream - a different VAE decode path, an upscale pass, a new finish. The sampler sits idle. Compare that to re-running the whole scene for every decode test and the node pays for itself the first afternoon.
It's also how a continuation chain survives a reboot. The masked-continuation workflow wants the previous scene's latent as its head context; if that latent is a file instead of a wire hanging off a completed sampler, your graph doesn't have to re-render scene one to work on scene seven.
What it does mechanically
torch.load with map_location="cpu" and weights_only=True, then a restore pass that turns the saved {"__h3_nested__": [...]} structure back into a real NestedTensor so the joint video+audio latent behaves normally downstream. Loading to CPU first is deliberate - you don't want a 24GB-latent file trying to materialise straight into VRAM before ComfyUI has decided where it goes.
weights_only=True is the safety setting and it constrains what the file can contain: tensors and plain containers, nothing that executes on load. Good news for anyone who's wary of pickled files from strangers. Bad news if you point it at some other kind of checkpoint - it'll refuse rather than run it.
The node also declares its cache key as the file's mtime and size. Re-queue the graph without touching the file and the load is skipped; save a new draft over the same path and it reloads. That's exactly the behaviour you want while iterating, and it means you can leave the node in a graph you queue repeatedly without watching it re-read a multi-GB file every time.
Wiring it up
Drop the node, paste an absolute path into checkpoint_path, and connect the LATENT output to whatever would have taken your sampler's output - a VAE Decode, an upscale params node, the masked-continuation node's context_latent input, or a sampler if you're doing a second pass.
Path gotchas: it's a raw string, so Windows backslashes work but quoting mistakes don't. The node takes the path literally and the loader throws FileNotFoundError (with the path in the message) if it isn't there, which is at least easy to diagnose. If you're on Windows and copied a path out of Explorer with quotes around it, strip them.
Install
ComfyUI Manager → search vrgamedev, or:
cd ComfyUI/custom_nodes
git clone https://github.com/vrgamegirl19/comfyui-vrgamedevgirl
Restart ComfyUI and hard-refresh the browser tab. Nothing else is needed for this node - no models, no pip packages. The pack's requirements file is for its video builder, audio tooling and TTS (demucs, stable-ts, torchcodec, transformers, llama-cpp-python); you can skip it if all you want is draft loading.
The one real trap
ComfyUI version drift. Drafts are loaded back as NestedTensor, and that requires a ComfyUI build with nested-tensor support for H3. If you saved a draft on a newer install and load it on an older one, the file arrives as a plain dict and your sampler fails somewhere vague. Keep the machine that writes them and the machine that reads them on the same-ish ComfyUI version, or save a fresh draft after you update.
Second, smaller one: a draft is not a render. It has no frames until something decodes it, and if you feed it to a VAE Decode you'll get the same frames you'd have gotten originally - which is the point, but also means a "bad" draft cannot be rescued by decoding differently. If the sample is wrong, resample; this node only saves you the time when the sample was right.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint_path | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |