LTX Attn — Timestep Evolution
Watch a head change its job mid-denoise
- evolution_plot
- stats_text
The heatmaps and grid views are snapshots - this node is a timeline. Timestep Evolution plots one metric's value against the denoising step for a set of heads, one colored curve per head, so you can watch whether a head holds a consistent role through the whole generation or switches jobs partway through. It's the diagnostic that answers "is head 24-8 always a temporal head, or does it only become one near the end?"
That question matters more than it sounds, because LTX-2.3 is a flow-matching model where the early steps sketch gross structure and later steps pin down detail - the same head can legitimately behave completely differently at step 2 than at step 12. The pack's own framing lists the curve shapes worth looking for:
- Flat curves - structurally fixed role; the head does the same thing at every step.
- Monotone decreasing - specializes progressively; starts diffuse, gets focused.
- Crossing curves - heads swap roles mid-denoising. This is the one that can surprise you when you're planning an intervention.
- Late rise - semantic tracking that only activates once signal emerges.
How it works
It reads the chosen metric from the capture store for one block across all captured steps, one series per head in head_indices, and renders them on a line chart sized by img_width/img_height. step_idx semantics don't apply the usual way here - the whole point is the full step range - so the store just needs to have captured multiple steps (capture_steps set to more than a single step in Setup Capture).
The inputs that matter
block_idx- the block whose heads you're plotting.metric- same 12-option list asMetrics Heatmap(entropy, temporal, spatial, sink, the distance metrics and their_normvariants).entropyis the usual first look.head_indices- default"0,4,8,16,24,31"gives you a spread of six heads; widen or narrow as you like.attn_type-saorca.store_handle- blank = current active store.img_width/img_height/colormap- output size and colors; defaults are fine.
Outputs are evolution_plot (IMAGE) plus stats_text (STRING) with the underlying numbers - grab the text if you want the data, not just the picture.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/g-raw/ComfyUI-LTX-Attention-Toolkit.git
Restart ComfyUI. No extra dependencies or model downloads; the pack is work-in-progress so stores may break across updates.
Common issues
Unlike the map viewers, this node only needs metrics, which every capture mode computes - so no full-map requirement. The failure modes are scheduling: it must run as a later queue pass after the capture generation, or the store is empty. And remember the metric-scale caveat from the heatmap: if you're comparing evolution curves across two runs with different frame counts or resolutions, use the _norm variants, or the raw values aren't apples-to-apples. If all curves render flat as a line, check that capture_steps in your setup actually captured more than one step - a single-step store has nothing to evolve.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| store_handle | STRING | — | |
| attn_type | COMBO | sa | 2 options: sa, ca |
| block_idx | INT | 00–47 | — |
| metric | COMBO | entropy | 12 options: entropy, temporal, spatial, sink, frame_dist_mean, frame_dist_std, +6 |
| head_indices | STRING | 0,4,8,16,24,31 | — |
| img_width | INT | 512128–2048 | — |
| img_height | INT | 25664–1024 | — |
| colormap | COMBO | turbo | 3 options: turbo, viridis, plasma |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| evolution_plot | IMAGE | — |
| stats_text | STRING | — |