LTX Reference Bind Schedule (Koolook)
Lock a character's face late in denoise, without an IC-LoRA
- model
- model
LTX 2.3 is great at lipsync and lousy at keeping a face consistent shot to shot - the KB's LTX ecosystem notes call out identity drift as one of the recurring user complaints. Koolook's answer is a "Ghost Mask" reference: you feed LTX Director a reference image or character sheet, and it pins identity without the reference ever appearing in the output. LTXReferenceBindSchedule is the node that decides when that reference actually pulls. It ramps the reference's attention up at low sigma, so identity locks during refinement without disturbing the motion that forms early. One pass, no re-noise, and - the headline - it does it without an IC-LoRA.
Why it exists
Normally, amplified per-guide attention for a reference comes from an IC-LoRA: LTXDirectorGuide only populates those per-guide attention entries when a LoRA is active. No LoRA, no entries, no identity pull. This node closes that gap. When the entries are missing, it fabricates them itself for the trailing reference tokens, giving the reference the same amplified-attention channel an IC-LoRA would use - inside the Director, no guide-node changes, no graph rewire. If you do run an IC-LoRA, it just scales the real entries instead. Either way it touches only the attention of the trailing num_references guide frames; keyframe pins and noise-mask freezing are untouched.
The mechanism
LTX's core _build_guide_self_attention_mask is rebuilt every denoise step, and it natively supports strength > 1.0 to amplify a guide's attention. The node hooks that builder plus a per-step sigma capture, then scales the reference's attention strength from ~1.0 early (neutral - motion forms freely) up to peak_strength late (identity locks). It's the mirror of LTXAVBindSchedule, which does the same trick for audio→video.
The inputs that matter
num_references- how many trailing guide frames are references. If you fed Director two reference images, set 2. The references are appended after the keyframes, so they're the last N guide frames.peak_strength- the reference attention multiplier at the end of denoise. 1.0 = no boost; the tooltip suggests trying 2–4, and 2.0 doubles the identity pull during refinement.ramp_start/ramp_end- where the boost begins and peaks (denoise progress 0=start, 1=end). Keepramp_startabove ~0.5–0.6 so big motion finalizes before identity locks.num_keyframes- no-LoRA path only: how many timeline image keyframes precede the references, so the node knows the keyframe/reference token split. Set this to your number of timeline image segments (say, 4).
That last one is the gotcha. Leave num_keyframes at 0 and the whole guide region gets treated as reference - which boosts your keyframes too, not just the reference. If you're on the no-LoRA path, always set it to your real segment count.
The output is a single model, wired into your sampler in place of the stock one.
Installing it
It's part of ComfyUI-Koolook. ComfyUI Manager → Install Custom Nodes → "ComfyUI-Koolook", restart, done. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/malkuthro/ComfyUI-Koolook.git
Restart after. This node is a model patcher with no extra Python dependencies, but it only makes sense inside an LTX 2.3 Director workflow - you need the LTX/Prompt Relay ecosystem (Director, LTXDirectorGuide) installed too. And remember the README's one-install rule: install via Manager or clone, never both, or the two parallel copies fight over the workflow store.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | LTX 2.3 model (the same one feeding the guide pipeline). | |
| num_references | INT | 10–64 | How many trailing guide frames are references (= how many images you fed LTX Director's reference_images). They're appended after the keyframes, so the LAST N guide frames are the references. |
| peak_strength | FLOAT | 2.001–8 | Reference attention multiplier at the end of denoise (low sigma). 1.0 = no boost; 2.0 = double the identity pull during refinement. Try 2-4. |
| ramp_startopt | FLOAT | 0.500–1 | Denoise progress (0=start, 1=end) where the reference boost begins. Keep above where big motion finalizes (~0.5-0.6) so motion forms first. |
| ramp_endopt | FLOAT | 0.900–1 | Denoise progress where the boost reaches peak_strength. |
| num_keyframesopt | INT | 00–256 | No-LoRA path only: how many timeline image keyframes precede the references, so the node knows the keyframe/reference token split. Set this = your number of timeline image segments (e.g. 4). Leave 0 and the WHOLE guide region is treated as reference (also boosts keyframes). Ignored when an IC-LoRA populated real entries. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |