Z-Image LoRA Analyzer (TJ)
See what your LoRA actually does, layer by layer
- model
- clip
- model
- clip
- analysis_text
- analysis_json
Stop guessing which blocks your LoRA is actually moving
Z-Image LoRA Analyzer (TJ) is a block-level LoRA inspection and filtering node for Z-Image models. You feed it a loaded model and a LoRA, and it shows you which of the model's 30 layers that LoRA touches and how hard - with live per-block strength bars you can drag, filter weak blocks, and pass the adjusted model straight back out. It's the "X-ray your LoRA" node, and it exists because the usual LoRA workflow is opaque: you apply a file, tweak one global number, and hope.
The family lineage is worth knowing: the README credits comfyUI-Realtime-Lora for the idea of block-wise analysis (built from scratch, not copied), and there are sibling analyzers for Krea2 and Klein (4B/9B). This one targets Z-Image's 30-layer structure, shared by Turbo and Base.
How it works
The node loads the LoRA, decomposes it, and shows per-block effect strengths in a UI with real-time bars - drag a strength and it re-applies instantly, with a "compare to original" overlay. Under the hood it:
- Auto-detects key formats - dot, kohya, diffusers, LoKr, and shorthand forms all parse without you telling it which one the file is.
- Lets you filter per block - the
block_config(JSON) records which blocks are active and at what strength. One-click presets handle the common moves: "keep the strong core," "balance," "trim weak blocks." - Outputs the patched model -
modelcomes out with the LoRA applied according to your per-block config, so you can run a real generation through it rather than trusting a bar chart.
use_original is the A/B switch: with it on, the block config is ignored and the original model passes through, so you can compare filtered vs unfiltered output in the same run. There's also an architecture-mismatch warning - put a 9B LoRA in the wrong family node and it tells you instead of silently doing nothing.
The inputs that matter
model- the loaded Z-Image model (required).clipis optional.lora_name- the LoRA file to analyze.global_strength- the master strength applied on top of the per-block config.use_original- ignore the config and pass the original through (for A/B).block_config- the per-block JSON; the UI manages this, you mostly shouldn't hand-edit it.
Outputs: model (patched, for generation), clip, analysis_text (readable summary), and analysis_json (the block data, for automation).
Install it
Part of the TJ_NODE pack, no extra deps:
cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE.git
Or ComfyUI Manager → search TJ_NODE, restart. Category: ✨ TJ_Node/Lora Analyzer.
Where people get burned
Two things. First, the analysis is only as meaningful as your mental model of "block strength = effect": a strong block on a LoRA you don't care about is still strong - filter with intent, not just by the bars. The one-click presets are a good start but they're blunt; fine-tune after a test render. Second, remember the model output is the patched model, and the pack sandboxes saving to models/loras subfolders - you can save a filtered LoRA out, but the path is constrained by design, so a custom output path that's "rejected" is expected behavior, not a bug. Also: this is an analysis tool, not a training tool. If you're coming from a LoRA-training mindset, the KB's core reminder applies here more than ever - LoRAs are architecture-bound, so a Z-Image LoRA only means anything on a Z-Image model. It pairs best with the pack's Z-Image Turbo node: analyze, adjust, and render through it in the same workflow.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| lora_name | COMBO | 0 options: | |
| global_strength | FLOAT | 1.00-5–5 | — |
| use_original | BOOLEAN | false | — |
| block_config | STRING | {} | — |
| clipopt | CLIP | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| analysis_text | STRING | — |
| analysis_json | STRING | — |