Nodes/10S-Comfy-nodes/πŸ” LTX Model Inspector
ComfyUI Node

πŸ” LTX Model Inspector

Open the hood on your LTX2 model before you guess where to hook

By TenStripΒ·Created 4 months agoΒ·Updated 26 days agoΒ· 244
πŸ” LTX Model Inspector
  • model
  • model
β—„name_filterβ–Ί
β—„focus_pathtransformer_blocks.0β–Ί
β—„max_modules_listed100β–Ί
β—„trace_path_containsβ–Ί
β—„max_modules_traced8β–Ί
β—„trace_calls_per_module1β–Ί
β—„print_top_levelfalseβ–Ί

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 by max_modules_listed (default 100). Type attn and watch every attention module surface.
  • focus_path - prints the immediate children of a dotted path under the backbone, with param counts and container lengths. Default transformer_blocks.0 shows 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.

Category10S Nodes/Identity

Inputs (8)

NameTypeDefaultDescription
modelMODELβ€”
name_filteroptSTRINGβ€”
focus_pathoptSTRINGtransformer_blocks.0β€”
max_modules_listedoptINT1001–4000β€”
trace_path_containsoptSTRINGβ€”
max_modules_tracedoptINT80–200β€”
trace_calls_per_moduleoptINT11–10β€”
print_top_leveloptBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
modelMODELβ€”