π¨ LTX Action Amplifier
Your verbs drown in the prompt β this boosts just the motion words
- model
- clip
- positive
- MODEL
Write an i2v prompt for LTX and you'll notice what happens on the motion side: the verb tokens - "walking", "turning", "reaching" - are a tiny slice of a prompt that's mostly scene description, lighting cues, mood adjectives, and camera notes. The model's text attention gets spread across the whole sentence, and the one word that tells it what to do gets proportionally almost nothing. Output: still images that technically move, but the specified action comes out weak or ignored.
LTXActionAmplifier is the targeted fix. It analyzes your positive conditioning, finds the tokens that semantically correspond to an action/motion vocabulary, and scales up their K/V magnitude at text cross-attention (attn2) - so verbs compete harder for attention mass without globally boosting the prompt. That last part is the whole point: the deprecated TextAmplifier scaled the entire conditioning uniformly and produced noise. This one is selective.
The setup
Required: model (LTX2 model to patch), clip (your text encoder - needed to encode the action vocabulary for correspondence search), positive (the positive conditioning; the node fingerprints it so only the cond pass is amplified), and amplification_strength (0.3 default, band 0-1). Output is a patched MODEL.
action_vocabulary_text- the motion vocabulary, comma-separated, defaulting to common verbs ("moving, walking, running, turning, lifting..."). Customize for your domain - sports, dance, martial arts - and it gets encoded via your CLIP as the correspondence target.scale_ceiling(0.3) - the max K/V scale delta: at full strength the matched tokens scale by (1 + ceiling), i.e. +30%. The tooltip's warning is honest: higher values redistribute more strongly but risk the same noise pattern the deprecated blanket amplifier produced.auto_threshold(p95) - auto-calibrates the match threshold to the encoder's score distribution (p95 = top ~5% most-action-like tokens).similarity_sharpness(16),amplification_floor(0.3),top_k(3) - the same machinery as LTXLikenessSemanticClamp, mirror-image: how binary the gate is, the hard floor that kills weak matches, and how many confirming vocabulary hits each token needs.bypass- pass the model through unchanged for A/B, and restore any prior amplifier patches.
Mechanism and placement
At apply time it encodes the vocabulary, computes per-token similarity, and derives boost weights. At runtime - each attn2 call - it fingerprint-matches the incoming K/V against the positive conditioning you analyzed (so the uncond/negative pass is untouched), scales the matched token positions, and runs a single attention pass. No bbox needed: actions affect the whole frame, so the boost is uniform across video tokens.
The tooltip note on model is worth reading: chain order is flexible and it coexists with anchor nodes (they're on attn1) and with SemanticClamp (also attn2, but a different sentinel, so the patches don't collide). A sane stack is Model β LatentAnchorAware β LTXActionAmplifier β Sampler - anchor stabilizes, amplifier makes the action actually happen.
Real-world notes
This is a refinement tool, not a fix for everything. If your action is genuinely absent, the first thing to check is still your prompt and whether you're on a distilled checkpoint (LTX's distilled models follow the prompt poorly regardless). What the amplifier is good at is the specific failure where the action is there but weak - turn the head slightly instead of turning around. Start at amplification_strength=0.3, scale up toward 0.5-0.7 only if the verbs are still losing, and watch for the noise pattern the docs warn about at the ceiling.
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 - and it needs your conditioning's actual CLIP, so don't hand it a mismatched encoder.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | LTX2 model to patch. Chain order is flexible β does not conflict with anchor nodes (attn1) or SemanticClamp (also attn2 but different sentinel). | |
| clip | CLIP | CLIP / text encoder that produced your positive conditioning. Required to encode the action vocabulary for correspondence search. | |
| positive | CONDITIONING | Positive prompt conditioning. The node analyzes this and fingerprint-matches at runtime so only the cond pass is amplified. | |
| amplification_strength | FLOAT | 0.300β1 | How aggressively to boost matched action tokens. 0 = no-op. 0.3 (default) = gentle upward scaling. 0.5-0.7 = stronger. 1.0 = maximum (matched tokens scaled by 1 + scale_ceiling, default +30%). |
| action_vocabulary_textopt | STRING | moving, walking, running, turning, lifting, reaching, pushing, pulling, gesturing, waving, pointing, leaning, tilting, raising, lowering, bending, stepping forward, walking toward, turning around, looking around, glancing, pivoting, rotating, jumping, dancing, swaying, rocking, extending, retracting, opening, closing, action, motion, movement, gesture | Comma-separated action / motion vocabulary. Encoded via CLIP, used as the correspondence target. Default covers common verbs and phrases. Customize if your domain has specific motion vocabulary (sports, dance, etc.). |
| scale_ceilingopt | FLOAT | 0.300.05β1 | Maximum K/V scale factor delta. At amplification_strength=1.0 and weight=1.0, K/V are scaled by (1 + scale_ceiling). Default 0.30 = max +30%. Higher values produce stronger redistribution but risk the same noise pattern as the deprecated TextAmplifier. |
| auto_thresholdopt | COMBO | p95 | Auto-calibrate correspondence threshold to encoder's score distribution. p95 targets top ~5% of most action-like tokens. p98 = top 2%. Encoder-agnostic selection. |
| similarity_thresholdopt | FLOAT | 0.550β1 | Literal threshold when auto_threshold=disabled. Otherwise overridden by percentile. |
| similarity_sharpnessopt | FLOAT | 16.01β64 | Sigmoid steepness. 16 (default) = near-binary partition. Lower = softer transition. |
| amplification_flooropt | FLOAT | 0.300β0.9 | Hard floor on per-token weights. Below this, weights become 0 (no boost). Eliminates sigmoid soft-tail leak. 0.3 default cuts off weak matches. |
| top_kopt | INT | 31β16 | Number of top similarity values averaged per positive token. Higher = requires more confirming matches in vocabulary. |
| bypassopt | BOOLEAN | false | If True, model passes through unchanged. Also restores any prior amplifier patches. |
| debugopt | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | β |