Kira LoRA EQ
Give your leaky character LoRA a 20-band EQ instead of one strength slider
- model
- clip
- MODEL
- CLIP
Every character LoRA user hits the same wall eventually. The LoRA nails the face, but it also quietly rewrites the background and stamps the same outfit onto every scene. You reach for the strength slider, and then the face dissolves before the leak goes away. That's the problem Kira LoRA EQ is built for: instead of one global strength, it lets you carve the LoRA's effect by network depth and attention type, like a graphic EQ on a mixing desk - which tracks, because the author is an audio engineer.
It's a single node, KiraLora_EQ, and it replaces your LoraLoader in the chain: MODEL and CLIP in, pick one LoRA, MODEL and CLIP out. Nothing else in the graph changes.
How it works
This is a LoRA loader with surgery attached. On first use, the node reads your .safetensors file (in memory - it never writes back to disk), splits every key into one of three buckets by name pattern, and maps each layer to a depth "band":
- Prompt Match → cross-attention keys (
.attn2.,.attn.add_,.context_attn.). These drive text conditioning. - Shape & Composition → self-attention keys (
.attn1.,.self_attn.,.attn.to_). Structure and layout. - Texture & Color → feed-forward/MLP keys (
.mlp.,.feed_forward.,.img_mlp.). Detail and appearance.
Each of the 20 bands covers a slice of the network's depth - band 1 is the shallow end, band 15 deep. The effective strength of anything in a band is gain × band_value × type_gain, and each band is applied as a separate subset of the LoRA through ComfyUI's own comfy.lora machinery. The key-name classification is heuristic - the author says so himself - but it's good enough to be useful, and it's why the "face" region of a character LoRA tends to live around bands 10–15: deep layers are where appearance lives. Your mileage genuinely varies per LoRA, though.
One honest caveat: the author explicitly calls this "vibe-coded" and says he isn't maintaining it. It supports Z-Image and Flux via the standard path, and Qwen-Image via a nunchaku wrapper (the int4 runtime Qwen workflows usually run under). Anything else isn't wired up.
The inputs that matter
Of the 25 controls, a beginner only needs to touch four things:
- lora_name - pick your LoRA. "None" is a safe passthrough.
- gain - the master fader (0–2, default 1). Lower it first if a band hunt gets confusing.
- band_01 … band_20 - per-depth band strength (0–1.5, default 1). Bands 16–20 are reserved; Z-Image uses 1–15.
- Prompt Match / Shape & Composition / Texture & Color - the three type-wide gains (0–2). These are the fast knobs: crank Texture & Color down first if your LoRA is smearing detail, or pull Prompt Match down when it's overriding your prompt.
Outputs are MODEL and CLIP, which feed straight into your KSampler just like a normal LoraLoader. There's a fast path baked in: leave everything at 1.0 and it applies the whole LoRA at master gain, so defaults cost you nothing.
Installing it
The README only documents manual install, and it's a small enough pack that ComfyUI Manager's search may or may not have it - try it, but don't wait on it:
cd ComfyUI/custom_nodes
git clone https://github.com/thrakotool/ComfyUI-KiraLoraEQ
Then restart ComfyUI. The node appears as Kira LoRA EQ under Kira / LoRA EQ. The good news: no requirements.txt, no model downloads, no API key - it only uses torch, safetensors, and ComfyUI internals you already have. The studio-hardware skin comes from a bundled JS extension, so js/ must stay put.
Troubleshooting
- Bands do nothing on my LoRA. Expected. The layer detection and the 1–15 mapping assume a transformer-style architecture (Z-Image, Flux, Qwen); a LoRA with unusual key names can fall into "other" and land on band 8. Check the console - the node prints a
cross=X, self=Y, mlp=Z, layers=0..Nbreakdown on load. - Qwen path silently no-ops. Qwen application needs the nunchaku wrapper's
compose_loras_v2present; without it the node degrades to a best-effort fallback. - The LoRA file is untouched. All of this happens on model patches in RAM, so you can A/B against a plain LoraLoader in the same graph.
- Nothing renders. Usually the missing
js/folder or a stale ComfyUI - restart fully.
It's a one-trick utility for a very specific pain, and its audience is people grinding character LoRAs on Z-Image and Qwen. But if that's you, it's the rare node that fixes a thing you thought you just had to live with - no retraining required.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_name | COMBO | None | Select LoRA file to apply with EQ controls. |
| gain | FLOAT | 1.00–2 | — |
| band_01 | FLOAT | 1.000–1.5 | — |
| band_02 | FLOAT | 1.000–1.5 | — |
| band_03 | FLOAT | 1.000–1.5 | — |
| band_04 | FLOAT | 1.000–1.5 | — |
| band_05 | FLOAT | 1.000–1.5 | — |
| band_06 | FLOAT | 1.000–1.5 | — |
| band_07 | FLOAT | 1.000–1.5 | — |
| band_08 | FLOAT | 1.000–1.5 | — |
| band_09 | FLOAT | 1.000–1.5 | — |
| band_10 | FLOAT | 1.000–1.5 | — |
| band_11 | FLOAT | 1.000–1.5 | — |
| band_12 | FLOAT | 1.000–1.5 | — |
| band_13 | FLOAT | 1.000–1.5 | — |
| band_14 | FLOAT | 1.000–1.5 | — |
| band_15 | FLOAT | 1.000–1.5 | — |
| band_16 | FLOAT | 1.000–1.5 | — |
| band_17 | FLOAT | 1.000–1.5 | — |
| band_18 | FLOAT | 1.000–1.5 | — |
| band_19 | FLOAT | 1.000–1.5 | — |
| band_20 | FLOAT | 1.000–1.5 | — |
| Prompt Match | FLOAT | 1.000–2 | — |
| Shape & Composition | FLOAT | 1.000–2 | — |
| Texture & Color | FLOAT | 1.000–2 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |