H3 Cartridge Loader (.riftcast)
A character's whole look and voice in one .riftcast file
- ref_1
- ref_2
- ref_3
- ref_4
- ref_5
- ref_6
- ref_7
- ref_8
- ref_9
- voice
- subject_block
- dna_text
- speaker_tag
- accent_line
- rooms_text
- ref_count
- report
A character cartridge is the thing you wish you'd made three renders ago: one file holding a character's reference photos, voice anchor, and descriptive DNA, so you don't rebuild the identity lane from scratch every time you switch projects. H3CartridgeLoader reads those files - the .riftcast format the JoyEcho/LTX pipeline already uses - and unpacks them into the separate inputs an H3 graph actually needs.
The format is a zip with a manifest.json at its heart: name, speaker_tag, voice, refs, dna, plus optional accent and room data. Drop a .riftcast into input/riftcast/, pick it from the cartridge dropdown, and the node does the mapping to H3's reference system for you. The subtle part, and the reason it can't just hand you one batch: H3's core resizes img[:1] when you feed a batch, which would silently collapse all your photos into a single reference. So the node emits up to nine separate ref_1–ref_9 IMAGE outputs instead. The max_refs widget (1–9) caps how many you take.
The outputs you'll wire
ref_1…ref_9- the character's photos, one per reference slot.voice- the AUDIO anchor. Read the caveat: wire it through H3 Reference Audio's stereo guard, because the audio VAE encodes[B, 2, L]and a mono clip dies deep in the model. The README's worst crashes come from this.subject_block- a ready-madesubject_definitionsfragment ("<Subject 1>is NAME, DNA…<Audio 1>is the voice-timbre reference…") you can paste into ref-mode prompts. This is the binding text that keeps the photos and voice pointed at the same person.dna_text,speaker_tag,accent_line,rooms_text- strings for prompt assembly.ref_count,report- how many refs loaded, and what happened (including whether LoRA entries in the cartridge were ignored, because H3 identity comes from references, not LoRAs).
You can also skip the dropdown with manual_path and point straight at any .riftcast. Two security details carried over from the reference implementation are worth knowing: path-traversal rejection and a sha256 integrity check on the voice anchor. Corrupted files fail loudly rather than silently loading half a character.
Install
It ships in the H3 Multishot pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jlucasmcrell/ComfyUI-H3-Multishot
or ComfyUI-Manager → H3 Multishot. Restart; ComfyUI v0.30.0+, no pip dependencies (the pack deliberately declares none). Cartridges you made for the JoyEcho/LTX side load as-is - the format hasn't changed, only the consumer.
The trap to remember isn't install, it's the stereo guard. Connect voice to something that guarantees stereo before it reaches the audio VAE. Get that right and a cartridge makes "load the whole character" a one-node operation.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| cartridge | COMBO | 1 options: (no cartridges in input/riftcast/) | |
| max_refs | INT | 91–9 | — |
| manual_pathopt | STRING | Full path to any .riftcast, bypassing the dropdown. |
Outputs (17)
| Name | Type | Description |
|---|---|---|
| ref_1 | IMAGE | — |
| ref_2 | IMAGE | — |
| ref_3 | IMAGE | — |
| ref_4 | IMAGE | — |
| ref_5 | IMAGE | — |
| ref_6 | IMAGE | — |
| ref_7 | IMAGE | — |
| ref_8 | IMAGE | — |
| ref_9 | IMAGE | — |
| voice | AUDIO | — |
| subject_block | STRING | — |
| dna_text | STRING | — |
| speaker_tag | STRING | — |
| accent_line | STRING | — |
| rooms_text | STRING | — |
| ref_count | INT | — |
| report | STRING | — |