π LTX Model Inspector
Open the hood on your LTX2 model before you guess where to hook
- model
- model
LTX2.3 is a 22-billion-parameter transformer and a black box until you give it a way to talk. LTX Model Inspector is that way - a diagnostic node that walks the diffusion backbone and prints its structure to the ComfyUI console: which modules exist, how many parameters each has, and (if you ask) what tensors actually flow through a module during a real forward pass.
Why would a normal user care? Because the whole 10S pack works by attaching PyTorch forward hooks to specific modules inside the model - transformer_blocks[i].attn1 for the identity anchors, attn2 for the text amplifier. If you're writing your own hook, verifying that a merged checkpoint really does have the structure you expect, or just trying to figure out where a "module not found" error comes from, this is the node that tells you before you burn a generation.
What it prints
Wire a MODEL in and you get console output, not a UI readout. The passive checks:
name_filter- substring match against module names and class names, capped bymax_modules_listed(default 100). Typeattnand watch every attention module surface.focus_path- prints the immediate children of a dotted path under the backbone, with param counts and container lengths. Defaulttransformer_blocks.0shows you one block's anatomy - exactly what the hook-based nodes hang off.print_top_level- dumps the backbone's top-level children, the 30-second orientation tour of the model.
The active probe: set trace_path_contains and the node attaches forward hooks to every module whose path contains that substring, logging input/output tensor shapes on the next sampling pass. max_modules_traced (default 8) caps how many hooks, and trace_calls_per_module (default 1) makes each hook quiet after that many calls so a long run doesn't spam your terminal.
The MODEL output is a straight passthrough - this node changes nothing, which is the point. Drop it inline before a sampler and it just observes.
How it works
Under the hood it resolves the diffusion backbone (m.model.diffusion_model), then walks named_children() / named_modules() with a sum(p.numel() for p in child.parameters()) per module. The trace mode uses register_forward_hook, which is why the hooks print during the next sampling pass rather than at node-execution time.
Installing it
Part of the TenStrip 10S-Comfy-nodes pack. ComfyUI Manager β search "10S", or:
cd ComfyUI/custom_nodes
git clone https://github.com/TenStrip/10S-Comfy-nodes.git 10S_Nodes
Restart. No extra dependencies beyond what ComfyUI already ships.
Gotchas
Two things will confuse you the first time. One: output goes to the ComfyUI console (the terminal you launched it from), not to a node widget - if you see nothing, look there. Two: trace hooks persist on the model object until ComfyUI reloads it, so a hook you attach for debugging stays live across runs. They auto-quiet after trace_calls_per_module, but if you're seeing weird slowdowns on the next workflow, restart and let the inspector go. It's a dev tool, not a daily driver - you'll reach for it when something's wrong, and it earns its keep then.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| name_filteropt | STRING | β | |
| focus_pathopt | STRING | transformer_blocks.0 | β |
| max_modules_listedopt | INT | 1001β4000 | β |
| trace_path_containsopt | STRING | β | |
| max_modules_tracedopt | INT | 80β200 | β |
| trace_calls_per_moduleopt | INT | 11β10 | β |
| print_top_levelopt | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | β |