Zura · Attach H3 Reference Latents
Hand-encoding the character H3 should keep
- positive
- opening_latent
- character_latent
- audio_latent
- positive
H3 is an omni-modal model. You don't hand it "a prompt and an image"; you hand it a unified context containing reference blocks, and it figures out what to keep. The native reference-to-video node does that for you from a pile of IMAGE wires. This node does the same thing one level lower - from latents you already encoded.
Why you'd use it instead of the native node
Because you want control over when the expensive part happens. Encoding a character still and an opening frame through the H3 video VAE is not free, and re-encoding them every time you tweak the prompt or the seed is waste. Encode once, keep the latents in the graph, attach them here.
It's also the only sane way to attach an audio reference alongside two image references when you're building the conditioning by hand - because the third slot is optional and the ordering is fixed.
How it works
The node builds H3's native reference block list in the order the model expects, and then hands it to ComfyUI's own node_helpers.conditioning_set_values under the minimax_refs key. That's the identical payload contract the native MiniMaxH3ReferenceToVideo node produces, so nothing downstream needs to know you built it manually.
The blocks go: opening_latent as an image reference, character_latent as an image reference, and audio_latent as an audio reference if you wired it. Order matters - first reference is the opening frame, second is the character.
The validation is strict, and usefully so. Image reference latents must be [1, 24, 1, H, W] - 24 channels, a single frame, even height and width (H3's latent is compressed 16× spatially and the image path doesn't bin temporally). The audio reference must be [1, 32, 2, T] from an audio VAE. Embeddings must be [1, N, 5120] - 5120 is H3's hidden width, fixed. Everything gets a 256 MiB sanity cap and a finite-value check.
It also refuses to attach if references are already present. If your positive conditioning already carries minimax_refs, you wired it from the native node and this one bails rather than silently stacking a second set.
Inputs and outputs
positive-CONDITIONING, from a text encode or a native reference node.opening_latent-LATENT, the starting frame encoded with the H3 video VAE.character_latent-LATENT, the appearance reference, same treatment.audio_latent(optional) -LATENT,[1, 32, 2, T]from the H3 audio VAE.positive(output) - the same conditioning with references attached, out to your guider or toMiniMaxH3AddGuide.
Install
Part of the pack; install it once.
cd ComfyUI/custom_nodes && git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
pip install -r ComfyUI_zura_nodes/requirements.txt
Restart ComfyUI. You'll need the H3 base weights (minimax_h3_ref2va_*), the qwen3vl_32b text encoder, and both H3 VAEs - the video one to make these latents and the audio one for the third slot. All separate downloads; all under the territory-restricted H3 community licence.
Common issues
"Opening reference samples must have shape [1, 24, 1, H, W]." You encoded a batch of frames, not one. Image references are single frames - put an ImageFromBatch or a single-image loader in front.
"…must have shape [1, 32, 2, T]." Wrong VAE on the audio. The H3 video VAE will happily produce a plausible-looking latent with the wrong channel count; you need minimax_h3_audio_vae_fp32.safetensors here.
"Positive conditioning already has MiniMax H3 references attached." You're double-attaching. Pick the native reference node or this one, not both.
Identity still drifts. Nothing here guarantees likeness - attaching a character reference biases the sampler toward those pixels, it doesn't lock them. If you need the face pinned harder, that's what the guide nodes (and masking the edit region) are for. Review a short take before you commit a long one.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| opening_latent | LATENT | — | |
| character_latent | LATENT | — | |
| audio_latentopt | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |