H3 Keyframe Inject (experimental: refs + start frame)
Add a physical start frame to conditioning that only has references
- conditioning
- vae
- start_image
- end_image
- CONDITIONING
Here's a distinction that confuses everyone new to H3, and this experimental node exists because of it: a reference image and a keyframe are not the same thing. References are what the text encoder looks at to establish identity - "this is who the person is." A keyframe is what the video physically continues from - the actual starting pixels. H3KeyframeInject adds the second one to conditioning that only has the first.
It's marked experimental, and it's aimed at a specific gap. On the ref2va checkpoint, reference rows do the identity work but only hold a supplied frame softly - the model nudges toward it rather than starting on it. That's fine for character consistency and wrong for "this clip must begin on this exact picture." This node takes your conditioning, your vae, and a start_image, and injects a frame-0 keyframe into the conditioning so the video genuinely starts from that image. The refs already in the conditioning stay what the encoder looks at for identity; the keyframe is what the pixels continue from. Both, cleanly separated.
The inputs
conditioning- the incoming conditioning (from a reference or text encode).vae- needed to encode the start image into latent space.start_image- the frame-0 anchor.width,height- the render dimensions.length- frame count, and the tooltip is blunt: it must match the generation's frame count. Get this wrong and the injected keyframe sits at the wrong point in the timeline or the conditioning doesn't line up with the latent you sample.end_image- optional last-frame anchor, if you want the clip to also land on a specific final picture.
One output, CONDITIONING, wired to your sampler.
The "experimental" label is doing real work here. It requires the extra_conds merge patch this pack applies at import, and like most things that patch a model's conditioning path, it's newer and less battle-tested than the pack's main samplers. If you just want a shot to start on an image inside the multishot workflow, the samplers' own start_image inputs (classic sampler: real I2V first frame) or flf_chain continuity are the more supported routes. Reach for KeyframeInject when you're building custom H3 conditioning and need the frame-0 anchor added to conditioning that arrived with references only.
Install
Part of 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+.
Two gotchas worth remembering. First, length must equal the sampler's frame count - there's no auto-sync. Second, if your graph renders a video that ignores the start image entirely, check that the extra_conds patch actually loaded (it applies at import; a failed import shows up in the console as a missing-node or a silent pass-through). When it works, it's the difference between "starts on my picture" and "kind of resembles my picture."
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| vae | VAE | — | |
| start_image | IMAGE | — | |
| width | INT | 54432–4096 | — |
| height | INT | 96032–4096 | — |
| length | INT | 3625–3600 | Must match the generation's frame count. |
| end_imageopt | IMAGE | Optional last-frame anchor. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |