IAMCCS H3 Disk Upscale · Load AV Checkpoint
The Loader That Checks Your Checkpoint's Papers Before Handing It Back
- av_latent
- native_audio
- manifest_json
- segment_index
- source_frames
- report
A two-input node with no widgets is usually filler. This one isn't, and the reason is that the two Stage 2 nodes in this family - Tiled Refine and Learned 3D - don't take a latent. They take a path to the file that Save AV Checkpoint wrote. That's the whole design: the heavy stage runs in its own queue, in a fresh process state, reading from disk.
So when do you need a Loader? When you want the payload itself back in the graph.
Where it fits
Three real uses.
First, inspecting. If you've got a folder of parked H3 latents and you want to know how many source frames segment 3 holds, or what fps the manifest claims, this node gives you that as wires instead of as a file you have to open in a text editor.
Second, re-decoding. av_latent comes back as an H3 AV latent and native_audio as a proper ComfyUI AUDIO dict, so you can feed them to your own VAE decode, another sampler, or a combine node - useful when the 4K upscale the author generated isn't the one you wanted and you'd rather redo the delivery pass without re-sampling.
Third, chaining. The segment_index and source_frames outputs are the numbers the join arithmetic downstream cares about, so you can drive loop counters or the Assemble Film bookkeeping off a real file rather than a typed-in value.
What it does under the hood
It is not a passthrough. Load is a validator, and it's strict on purpose:
- The manifest must declare the right schema and name this exact file.
- The SHA-256 of the
.safetensorsmust match the manifest. If it doesn't, you get a refusal - not a partially-written latent. - The tensor keys must be exactly
video,audio_latent,waveform. - The temporal shape must match the manifest's
video_tokens, and the latent must be able to decode the declaredsource_frames(17*((tokens-2)//5)+5). - The audio must cover the declared video span.
That last set of checks is why a half-copied or interrupted file fails loudly here instead of producing a subtly short segment 40 minutes later.
Outputs, in order: av_latent (LATENT), native_audio (AUDIO), manifest_json (the manifest as a STRING), segment_index (INT), source_frames (INT), and report (STRING). The only input is checkpoint_path.
The one gotcha
checkpoint_path has to point inside ComfyUI/output/IAMCCS/H3_DISK_UPSCALE. The node resolves the path and rejects anything outside that root - a deliberate sandbox so a string widget can't be pointed at arbitrary files on your disk. If you moved a run folder to another drive to free space, the upscale family will stop seeing it. Move it back, or regenerate it.
Absolute paths and paths relative to ComfyUI's output directory both work, so IAMCCS/H3_DISK_UPSCALE/myfilm/checkpoints/segment_00000.safetensors is fine.
Install
Same as the rest of the pack - Manager, search IAMCCS Nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart, then hard-refresh the browser. Keep exactly one copy of the repo in custom_nodes; the README specifically warns that duplicates load stale node definitions. This node has no extra dependencies beyond the pack itself - it uses safetensors and stock ComfyUI tensor types, nothing exotic.
One thing worth saying out loud, since it's a loader for H3 assets: this node doesn't generate anything, but the files it loads came from a model whose open weights are licence-restricted outside a defined territory (the US, EU, UK and South Korea are excluded, outputs included). Nothing in the code stops you; it's just the kind of thing you'd rather learn now than after shipping a client cut.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint_path | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| av_latent | LATENT | — |
| native_audio | AUDIO | — |
| manifest_json | STRING | — |
| segment_index | INT | — |
| source_frames | INT | — |
| report | STRING | — |