π― LTX Latent Anchor Aware
Latent Anchor, but aware of where the detail actually is
- model
- reference_image
- vae
- energy_latent
- sigmas
- model
Plain LTXLatentAnchor pulls every sufficiently-similar token toward the cached mid-sample state, with the same strength everywhere. That works, but it's not smart about where the pull matters. A sky doesn't need anchoring - an edge, a face, a piece of detail does. LTXLatentAnchorAware is the upgraded variant: it takes an optional reference image, computes a spatial energy map from it (edges, faces, fine detail = high energy), and weights the anchor pull so high-energy regions get held tightly while flat regions drift freely.
That's a meaningful quality difference in practice. Anchoring a whole scene uniformly can flatten motion and dull texture - the "everything is a bit too stable" look. Anchoring only where detail lives keeps the composition stable without putting a velvet glove on the whole frame.
What changed vs the basic Anchor
Same core mechanism: snapshot the model's representation at cache_at_step, pull later computation toward it via centered-cosine-matched residuals on attn1 output. The addition is the energy channel:
reference_image+vae- wire a reference image (ideally the i2v conditioning image or a composition reference) and the LTX2 VAE. The node encodes it and derives the spatial energy map.energy_latent- alternative to image+VAE: hand it a pre-encoded LATENT to skip re-encoding if you already have one.energy_threshold(0.30) - the gating cutoff. 0 = uniform energy (behaves like plain Anchor). 0.30 = regions above the 30th percentile of energy get pull. 0.80 = only the top 20% regions. This is your main dial for how "aware" the anchoring is.
Everything else is shared with the basic variant: model in, MODEL out, sigmas strongly recommended for predictable cache timing, strength (0.10, band 0.05-0.20), cache_at_step (6), similarity_threshold (0.50), decay_with_distance, bypass, debug, and the advanced_mode research knobs (cache_mode, forwards_per_step, cache_warmup, anchor_frame, depth_curve, block_index_filter).
Wiring and caveats
Model β LTXLatentAnchorAware β Sampler
β
reference_image + vae (or energy_latent)
The one gotcha that's easy to trip over: vae is only required when reference_image is wired, and the energy_threshold note is worth internalizing - 0.50 means above-median energy only, so for a busy scene you may want 0.30-0.40 to avoid anchoring into a checkerboard of tiny patches. If you leave the reference inputs empty entirely, the node just behaves like the basic Anchor with extra parameters doing nothing.
This is the variant the README recommends over the basic one for most cases - it's the same tool with a genuinely useful refinement, not a different class of node. For faces specifically, pair it with the face-targeted identity nodes (they hook the same attn1 layer via different sentinel attributes, so they compose cleanly). Install is the pack-wide clone (10S_Nodes into custom_nodes, restart, or ComfyUI Manager β "10S-Comfy-nodes"), no extra deps, LTX2-class models only.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | LTX2 model to patch with per-block attention hooks. The returned model adds identity / scene anchoring with optional reference-image spatial energy weighting. | |
| reference_imageopt | IMAGE | Optional reference image for spatial energy weighting. High-energy regions of this image (edges, faces, details) get stronger anchor pull; low-energy regions (sky, flat areas) get less. Wire alongside vae. For best results, use the i2v conditioning image or a composition reference. | |
| vaeopt | VAE | VAE required when reference_image is wired (encodes the image into latent space for energy computation). Wire the LTX2 VAE. | |
| energy_latentopt | LATENT | Alternative to reference_image+vae: provide a pre-encoded LATENT for energy weighting. Useful when you already have an encoded latent and want to skip re-encoding. | |
| sigmasopt | SIGMAS | Connect from your sigma scheduler. Required for predictable cache timing (cache_mode=schedule). Without it the node falls back to manual_calls mode which is less reliable. | |
| strengthopt | FLOAT | 0.100β5 | Magnitude of pull toward cached anchor state. 0.05-0.20 typical. 0.10 is default. Higher values can over-damp motion; lower values barely register. |
| cache_at_stepopt | INT | 60β100 | Sampling step at which to lock the anchor (snapshot the model's representation as stable target). Mid-sampling values (3-9 on 13-step schedules) work best β peak conditioning alignment before refinement. |
| similarity_thresholdopt | FLOAT | 0.500β1 | Minimum centered-cosine similarity for a token to receive pull. Lower = broader effect. 0.50 is balanced; raise to 0.60-0.70 to narrow pull to most-similar tokens only. |
| decay_with_distanceopt | FLOAT | 0.000β1 | Per-frame strength decay from frame 0 to last frame. 0 = uniform. 0.3-0.5 lets later frames drift more while keeping early frames anchored. |
| energy_thresholdopt | FLOAT | 0.300β1 | Energy gating cutoff (when reference_image / energy_latent is wired). 0 = uniform energy (no spatial weighting, like plain LatentAnchor). 0.30 = broad: above-30%-percentile regions get pull. 0.50 = above-median only. 0.80 = top 20% energy regions only. |
| bypassopt | BOOLEAN | false | If True, model passes through unchanged. Useful for A/B comparison without rewiring. |
| debugopt | BOOLEAN | false | Verbose per-block diagnostic output during sampling. Shows cache state, similarity stats, energy gating, and per-block timing. |
| advanced_modeopt | BOOLEAN | false | Toggle to expose research/diagnostic parameters: cache_mode, forwards_per_step, cache_warmup, anchor_frame, depth_curve, block_index_filter. |
| cache_modeopt | COMBO | schedule | How cache timing is determined. schedule (default, requires sigmas wired): cache fires at the sigma corresponding to cache_at_step. live_extraction: no cache, regenerate target every call (softer effect). manual_calls: cache fires after cache_warmup block calls (fallback when sigmas not wired). |
| forwards_per_stepopt | INT | 11β8 | How many model forward passes occur per sampling step. 1 for distilled CFG=1. 2 for standard CFG > 1. 3+ for CFG+STG. Affects cache timing math when in schedule mode. |
| cache_warmupopt | INT | 1440β5000 | Number of block calls before cache fires (when cache_mode=manual_calls). 144 β 3 sampling steps Γ 48 blocks at CFG=1. |
| anchor_frameopt | INT | 00β256 | Which frame's features to use as anchor source. 0 = first frame (conditioning frame in i2v β recommended). |
| depth_curveopt | COMBO | flat | Per-block strength scaling. flat = uniform (recommended). ramp_up = stronger late blocks. ramp_down = stronger early. late_focus = quadratic late emphasis. middle = strongest in middle blocks. |
| block_index_filteropt | STRING | Limit hooks to specific blocks, e.g. '10-30' or '5,7,15-20'. Empty = all 48 blocks. Useful for ablation studies. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | β |