H3RelayInternalLTXRollingInject
The node that freezes the last shot's tail so LTX doesn't drift
- latent
- latent
- status
Of the four LTXRolling* internal nodes, Inject is the one that does the actual continuity trick. Its description: Freeze the previous accepted LTX latent tail at the head of the current enhancement target. Take the current shot's freshly upscaled LTX latent, overwrite its leading frames with the exact tail of the previous accepted shot's latent, and hand the result to the sampler. That's how shot N starts where shot N−1 ended - in latent space, at the resolution the diffusion model actually works in.
The inputs
- latent - the current enhancement target latent (after the 2x latent upscale in the expanded graph).
- run_name (default
h3_ltx_rolling) - matches the checkpoint node's run name; it's how the inject finds the previous shot's saved tail. - shot_index (default 1) - the current shot. For shot 1 there's no previous tail, so the node passes the latent straight through - the description in the source literally says "first shot, no prior latent."
- context_latent_steps (default 3) - how many latent frames to freeze in from the previous checkpoint. The tooltip spells out the conversion: three LTX latent steps represent 17 pixel frames and are the recommended rolling context.
Outputs are latent (the frozen-head target, sampler-ready) and status.
Why latent, not pixels
You might wonder why the pack bothers with latent-space injection instead of just feeding pixels. Because the enhancement is a diffusion pass: the sampler works on the latent, and a frozen latent prefix plus the nested conditioning is the stable way to guarantee the new diffusion starts from the accepted prior state rather than re-deriving it. Pixel-only conditioning leaves the sampler free to drift on its first frames; a frozen latent head pins them. That's the mechanism behind H3 Relay's claim that LTX carries its own 17-frame/three-latent temporal context.
The node also checks that the input is a proper 5D latent and that the previous checkpoint file exists before it tries to read it - a missing checkpoint raises a clear error instead of silently injecting garbage.
The orchestration
You'll see Inject appear between LTXVLatentUpsampler and LTXVContextWindows in the expanded enhance graph - right after the upscale establishes the 2x target, right before windowing and sampling. The sibling nodes close the loop: RollingInput built the window (and its context token), RollingCheckpoint will persist this shot's tail after sampling, RollingCrop trims decode padding after. Inject is the middle link that makes "rolling" mean "continuous."
As always with the internal family: don't rewire it, and if you're hand-building a custom chain, keep run_name and shot_index consistent with the checkpoint node or the whole loop silently stops being cacheable. For a single-shot enhancement the injection is a no-op (shot 1 has no prior latent), which is exactly the right behavior.
Install via ComfyUI Manager (H3 Relay) or git clone https://github.com/akatz-ai/h3-relay.git into custom_nodes. ComfyUI 0.32.0+, FFmpeg, and the LTX 2.5 files from MODELS.md; LTX's community license is free under $10M annual revenue.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| run_name | STRING | h3_ltx_rolling | — |
| shot_index | INT | 11–100000 | — |
| context_latent_steps | INT | 31–64 | Three LTX latent steps represent 17 pixel frames and are the recommended rolling context. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| status | STRING | — |