H3 Video
Reference video, soundtrack attached — and don't lie about fps
- frames
- audio
- latent
- h3_inputs
- h3_inputs
H3's standout trick is that it's omni-modal - a reference video comes with its own soundtrack, and the model treats the pair as one thing. H3 Video is how you hand that pair over: wired frames plus an optional audio input, all bound together on one node so a clip and its audio can't drift apart.
Why it exists as its own node
ComfyUI's core H3 support pairs reference-video audio with reference video by slot number - ref_video_audio_N with ref_video_N. Put a silent clip in an early slot and every later soundtrack lands on the wrong video, with nothing on screen telling you. H3 Video sidesteps all of that by binding frames, fps, soundtrack and detail level on one node, and chaining it onto the pack's h3_inputs wire.
The inputs that matter
- fps - set this to the frames' real rate. H3 presents reference video at 24 fps and derives timestamps from it, so a wrong value plays the reference at the wrong speed and mislabels its
<T.T seconds>marks. This is the one that bites people. - detail -
full/half/quarter, a pure cost dial. Reference rows ride every sampling step, and a video reference is usually a third of the whole sequence, sohalfcuts roughly a quarter off the run and a similar slice off peak VRAM. It costs no alignment - H3's spatial rope depends on aspect ratio alone, so a half-resolution reference sits in the identical coordinate box and stays registered to the target. Usefullonly when the reference is the sole source of fine detail. - audio - the soundtrack, which needs the audio VAE wired on H3 Encode.
- latent - the sneaky-good one. Pass in this same video's H3 latent (say, from an earlier sampler) and H3 Encode skips the VAE encode entirely. That's exactly what a regenerate pass wants: the first pass's own latent, no decode/re-encode round trip to lose detail through. You still need the
frames, because the Qwen3-VL text encoder reads pixels.
Frames are resampled nearest-neighbour onto H3's 24 fps, which is fast and fine for a reference.
Install
Pack install: ComfyUI Manager → "Nynxz H3", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzH3
Restart. Pure Python, no dependencies, needs ComfyUI 0.30.0+. The audio VAE is a separate model file from the video VAE, so if an audio reference silently does nothing, that's the first thing to check.
The one-liner
Set fps to the truth, drop detail to half unless the reference is carrying all the fine detail, and keep the clip and its soundtrack on this one node. If identity wanders on a regenerate, latent is the input that stops the round-trip loss.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | The video as an IMAGE batch, in order. | |
| fps | FLOAT | 24.001–240 | The frames' actual frame rate. They are resampled onto H3's 24 fps from this, so a wrong value plays the reference at the wrong speed and mislabels its <T.T seconds> timestamps. |
| detail | COMBO | full | How much resolution this reference is fed in at — a pure cost dial. Reference rows ride every sampling step, and a video reference is usually a third of the whole sequence, so 'half' takes roughly a quarter off the run and a similar amount off peak VRAM. It costs no alignment: H3's spatial rope depends on aspect ratio alone, so a half-resolution reference sits in the identical coordinate box and stays registered to the target. Use 'full' when the reference is the only source of fine detail. |
| audioopt | AUDIO | Soundtrack for these frames. Packs the reference as video+audio, and needs H3's audio VAE on the encode node. | |
| latentopt | LATENT | This same video as an H3 latent, when you already have one — the output of an earlier sampler. H3 Encode then skips the VAE encode and uses it directly, which is what a regenerate pass wants: the first pass's own latent, with no decode/re-encode round trip to lose detail through. The frames are still needed, because Qwen3-VL reads pixels. | |
| h3_inputsopt | NYNXZH3_INPUT | Another H3 node upstream. Its assets come first, then this one's. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| h3_inputs | NYNXZH3_INPUT | — |