H3 Reference to Video
The Reference Node That Actually Reads Your Roles
- clip
- references
- vae
- positive
- LATENT
- picture_map
This is core's MiniMax H3 Reference to Video, replaced - same job, but it honours the role you set on each reference instead of deciding one behaviour for all of them. If you're using H3 Reference or H3 Mood Board at all, this is the node they were designed to feed.
The trick you get from it
H3 sees a reference two ways: vision tokens through the text encoder, and pixels as a VAE latent in the DiT. Core couples those with one check - VAE wired, every reference becomes a latent; no VAE, none do. Here, a reference gets its latent, a semantic one conditions through the text encoder alone. So a hero shot can carry its identity as pixels while a board of style images steers the look, in the same run:
H3 Mood Board [3 refs, average, 384] ─┐
H3 Reference [hero.png, reference] ─┴→ H3 Reference to Video → positive, latent
Inputs
clip- the H3 text encoder.references- theNYNXZ_H3_REFSchain from H3 Reference and/or H3 Mood Board.prompt- your text, using the<Picture i>labels the references became.width/height- default 1344×768. Or set the canvas elsewhere and feed these the same numbers; they're plain integers snapped to 32.length- frames at 24 fps, step 17. Default 124, which is about 5 seconds. The trained range is roughly 124–362, so this is one of the few places where going long quietly leaves the model's comfort zone.ref_image_size-matchscales each reference down (down only, aspect kept) to the generation's pixel area;maxuses the 2048px short edge for best identity fidelity. Worth knowing the cost: reference tokens ride through every sampling step, somaxcan be several times slower.vae- optional, but required if any reference has rolereference. An all-semanticchain needs none.
Outputs
positive- into your sampler's positive conditioning.LATENT- into the sampler's latent.picture_map- a string saying which<Picture i>each reference became. Don't skip this one. Latent references are emitted first, so the numbering is not your chain order. Prompt with the map, not with your assumptions.
Images only - know what you're giving up
This node handles images. Reference videos and audio carry their own timeline spans and soundtrack pairing, so chain core's node for those. If your workflow needs a reference video, you're back on core for that leg, and its refs will follow core's one-check behaviour - worth keeping in mind if you were hoping the split would apply everywhere.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzH3
Restart, ComfyUI 0.30.0+, and pull the H3 models from Comfy-Org's MiniMax-H3 repo on HuggingFace: the diffusion model into diffusion_models, the Qwen3-VL text encoder into text_encoders, the video and audio VAEs into vae. Hand-cloning also needs pnpm install && pnpm build for the editor frontend, though none of it is needed for this node.
The catches
It looks near-identical to core's node. So does the socket. When a reference isn't transferring the way you expect, check which one you actually wired in - half the confusing bug reports in a pack like this are two nodes with the same shape.
Everything transfers too literally. That's vision_size on the Reference node, not this one. A full-size image is ~1000 vision tokens and reproduces closely even with no latent.
It's slow. Check ref_image_size. max is a fidelity choice with a real bill.
And the standing caveat: this whole group is experimental. The plumbing is verified against core, but the per-reference split is an extrapolation from two dead-ends the model was trained on. It works; how far it works is still being mapped.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| references | NYNXZ_H3_REFS | — | |
| prompt | STRING | — | |
| width | INT | 134432–16384 | — |
| height | INT | 76832–16384 | — |
| length | INT | 1245–3600 | Frame count at 24 fps (124 = ~5s; the trained range is ~124-362). |
| ref_image_size | COMBO | match | 'match' scales each reference (down only, keeping aspect) to the generation's pixel area; 'max' uses the 2048px short edge for best identity fidelity. Reference tokens ride through every sampling step, so 'max' can be several times slower. |
| vaeopt | VAE | Video VAE. Required if any reference has role 'reference'; an all-'semantic' chain needs none. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| LATENT | LATENT | — |
| picture_map | STRING | Which <Picture i> each reference became. Latent references are emitted first, so the numbering is not chain order — prompt with this. |