LTX-2.5 Reference Conditioning ⚡
Same face through a whole LTX-2.5 clip, no LoRA training involved
- model
- vae
- image
- target_latent
- model
LTX-2.5 will cheerfully give you a brand-new face every few frames, which is the whole problem this node exists to fix. Feed it a reference image and it injects that image's latent straight into the model's attention stream, in front of the video tokens, so the person - or the look, or the mood - you started with actually carries through the clip. No LoRA training, no adapter weights, no extra downloads. Zero new weights, just a forward-pass patch.
Reference conditioning is where the character-consistency conversation moved in 2026. The old adapter stack (IP-Adapter, InstantID, PuLID) never followed the ecosystem past SDXL, and training a LoRA for every new character is a slog. On LTX the trick is token-prefix injection instead: encode the reference through the same video VAE as the clip, then let the model cross-attend to it. That's a different intervention point from the first-frame hold of i2v - they don't fight, and this node is explicitly designed to combine with the standard i2v path.
How it works
The reference image is VAE-encoded, patchified, and concatenated in front of the video token sequence inside the model's forward pass, at frame-0 RoPE coordinates with the adaLN modulation rows extended to match. The prefix gets stripped in unpatchify, so the sampler never sees a shape change - no crop node exists, and none is needed. It's clone-then-patch: the forward patch installs itself on this specific model instance, which is why the README's rule is non-negotiable - always take MODEL from this node's output, not from the loader.
The inputs that matter
Three are required: model, vae (the loader's video VAE), and image. Then the ones a beginner actually touches:
target_latent- wire the same LATENT that goes into your sampler. The image gets resized in pixel space to match that latent's spatial dimensions before encoding, so the reference and target have matching patches-per-frame. Skip it and a mismatched size is a tensor error.strength- 1.0 is native VAE output. Below that weakens influence, above 1.0 boosts it (and can distort). 0.0 is a clean bypass that also clears any prior reference state - handy for A/B tests.position_mode-reference(default) overlaps the target's first frame temporally, giving uniform identity influence across every generated frame;prefix_continuousplaces tokens before the target, which is standard i2v prior-context behavior.start_frame/num_frames- feed a batched video in and this becomes a multi-frame reference window for motion or temporal-style context.num_frames9 (1 + the 8× temporal compression) gives roughly two latent frames; 17 and 25 add context at real cost.
Leave zero_ref_timesteps off unless your checkpoint was specifically trained for clean-reference memory - empirically most LTX checkpoints do better when the reference shares the target's noise sigma.
Output is a single model socket. Chain: Models Loader → this node → Img to Video prep → KSampler, and you get one consistent subject instead of a cast of strangers.
Installing it
This is one node inside the ComfyUI-GGUF-Loader pack - a fork of city96's ComfyUI-GGUF that adds a pile of convenience pipelines (the LTX-2.3/2.5 families, Scenema audio, MiniMax Music, GGUF loaders). In ComfyUI Manager, search "ComfyUI-GGUF-Loader" and install, or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
then pip install --upgrade gguf (the only real inference dependency). Restart ComfyUI. The node itself needs no extra model download - it rides on the LTX-2.5 kit you already load.
Common issues
The usual two: forgetting to take MODEL from this node's output (the patch lives on that instance), and skipping target_latent so the reference and target latent shapes don't match. Both show up as immediate, loud errors rather than silent quality loss. This is the same implementation as the LTX-2.3 version of the node, just registered under the 2.5 category - if you've used one, you've used both.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| vae | VAE | — | |
| image | IMAGE | Reference image. A multi-frame batch (video frames) is windowed via start_frame/num_frames below. | |
| target_latentopt | LATENT | Optional. Wire the same LATENT that goes into your sampler. The image will be resized in pixel space to match this latent's spatial dimensions before VAE encoding, guaranteeing memory and target have matching patches-per-frame. Without this, you'll get a tensor mismatch error if your image and target latent don't match exactly. | |
| strengthopt | FLOAT | 1.000–2 | Scales the reference latent magnitude. 1.0 = native VAE output. <1.0 reduces influence; >1.0 boosts (may distort). Set to 0.0 to bypass completely and clear any prior reference state. |
| position_modeopt | COMBO | reference | How reference tokens are positioned in the attention sequence. 'reference' (default): tokens overlap target's first frame temporally - uniform identity influence across all generated frames. 'prefix_continuous': tokens placed before target temporally - equivalent to standard i2v prior-context conditioning. |
| start_frameopt | INT | 00–240 | For a batched IMAGE input: which frame to start the reference window at. Frames before this are discarded. |
| num_framesopt | INT | 11–25 | How many frames from start_frame to use as reference. 1 (default) = single-image reference. 9 (1 + 8k matches LTX temporal compression) gives ~2 latent frames; 17, 25 add temporal context at higher cost. |
| zero_ref_timestepsopt | BOOLEAN | false | Mark reference tokens as sigma=0 (clean reference). Default OFF based on empirical testing - most LTX2.3 checkpoints produce better output when reference tokens share target's noise sigma. Enable only if a checkpoint was trained for clean-reference memory. |
| verboseopt | BOOLEAN | false | Print detailed per-call info to the console. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |