H3RelayInternalModelBundlePack
The H3 Relay node you never add by hand — but will see everywhere
- model
- vae
- upscale_model
- clip
- model
You didn't add this node. I can tell, because nobody adds H3RelayInternalModelBundlePack by hand. It's the invisible glue of the whole H3 Relay pack: the little "pack" step that bundles a native ComfyUI model (plus its VAE, latent upscaler, and text encoder, when present) into the single typed H3_RELAY_MODEL wire that every public loader fans out to your shot nodes.
H3 Relay's public nodes are graph-builders. When you drop in H3 Relay · H3 Model Loader, LTX Upscale Model Loader, or Apply Model LoRA and hit Queue, each one expands into a subgraph of ordinary ComfyUI nodes - a UNETLoader here, a LoraLoaderModelOnly there - and finishes by feeding everything into this internal pack node. That's why you'll spot the class name in your graph view even though you never searched for it. It's the traffic cop for the pack's "one typed wire" contract.
What it actually does
The pack method stuffs four things into one dictionary:
kind(STRING) - what family this bundle belongs to,h3orltx, so downstream nodes know what they're holding.model(MODEL) - the diffusion model after loading, LoRAs, and attention patches.cache_tag(STRING) - a fingerprint string describing exactly what's in the bundle.- optionally
vae,upscale_model,clip- carried along for the LTX side of the pack.
The cache_tag is the point of the whole exercise. It's computed from a fingerprint of the exact model chain - checkpoint filename, weight dtype, LoRA names and strengths, every patch. H3 Relay's disk-backed cache keys off that tag, so when you swap a LoRA or change a strength, the fingerprint changes and only the artifacts derived from the old chain are invalidated. Change nothing and a re-run is a cache hit. That's the mechanism that makes the pack's "reroll one shot, keep the rest" workflow possible.
What you actually set
Nothing, unless you're building a custom stack. The two inputs that aren't widget-driven - kind and cache_tag - are forceInput, meaning they come from the expanding graph, not from you typing values. If you're curious, kind is the bundle family and cache_tag is the fingerprint string. If you're sensible, you leave them alone.
The single output, model (H3_RELAY_MODEL), is what wires into Generate Shot or back into another Apply Model LoRA / Attention Backend node. Follow that wire and you'll never have to think about this node again.
Install and gotchas
Same as the rest of the pack: ComfyUI Manager → search H3 Relay → install → restart, or cd ComfyUI/custom_nodes && git clone https://github.com/akatz-ai/h3-relay plus a restart. No Python deps beyond what ComfyUI already ships - the pack vendors its internal machinery. You'll still need the actual models and FFmpeg on PATH (see MODELS.md), and remember the model weights are separately licensed.
The one real trap: if you see this node in your graph and decide to "clean it up" by disconnecting or bypassing it, everything downstream loses its bundle and fails. It looks redundant. It isn't. Let the public nodes own it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| kind | STRING | — | |
| model | MODEL | — | |
| cache_tag | STRING | — | |
| vaeopt | VAE | — | |
| upscale_modelopt | LATENT_UPSCALE_MODEL | — | |
| clipopt | CLIP | — | |
| h3_profileopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | H3_RELAY_MODEL | — |