LoKr Loader (Custom) π§©
Because Character LoRAs Are Mostly LoKr Now
- model
- model
- summary
The word "LoRA" has quietly stopped meaning "LoRA." On the current generation of bases - Z-Image, Flux.2 Klein - serious character adapters increasingly ship as LoKr: a Kronecker-product decomposition that's more compact than plain LoRA and, per the community consensus, simply converges better on those architectures. The published character recipes run LoKr at factor 8 as a default. So the file in your loras folder called character.safetensors may well be a LoKr wearing a LoRA name. This node loads those files with the real Kronecker math, instead of betting that ComfyUI's built-in auto-detection sorts it out.
How it works
A Kronecker product takes two matrices of shape (p,q) and (r,s) and produces one of shape (pΓr, qΓs) by tiling a scaled copy of the second into every entry of the first. That's what lets LoKr represent a full-size weight update from two much smaller factor matrices - structurally different from LoRA's low-rank product or LoHa's element-wise Hadamard product. The loader computes ΞW = W1 β W2 and applies it via ComfyUI's ModelPatcher.add_patches() API. It supports both the fully-dense form (*.lokr_w1 / *.lokr_w2) and the factored low-rank form (*_a / *_b variants).
strength scales the delta (1.0 = full effect). And like the pack's LoHa loader, the honest caveats are front and center: Conv2d (4D) layers are not implemented - only Linear-style 2D weights - so any conv layers in the file get skipped and counted in the summary output. For a file heavy in attention projections the bulk applies; for a full UNet file the effect may be partial. Read the summary.
There's also a real, currently-open upstream issue where LoKr keys go completely unloaded on at least one non-UNet architecture - this loader doesn't magically fix the underlying key-mapping problem for every architecture, but it makes the failure visible in summary instead of silent.
Inputs and outputs
- model - the MODEL to patch.
- lokr_name - from ComfyUI's
lorasregistry. - strength - β5 to 5.
- model - patched model out.
- summary - the report card: what applied, what was skipped.
The workflow that makes sense
Same loop as its LoHa sibling: run the pack's LyCORIS Format Inspector first (it reads the actual tensor key names, header-only, and confirms lokr before you load), then load, then read the summary. The reason this matters is the same documented ComfyUI auto-detection issue that mis-routes LyCORIS files through the plain-LoRA path - with LoKr being the format most worth getting right, because it's the one increasingly doing the character work.
Install and troubleshooting
No extra deps:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Restart, find it under TensorVizion/Model (ComfyUI Manager, search "OmniNodes").
- Format Inspector says
lora, notlokr- then it's a plain LoRA and this loader isn't the right one. The inspector exists precisely so you find this out before loading. - Summary reports skipped layers - expected for conv layers; check the counts to gauge how much actually applied.
- "LoRA not found" - file placement: it must be in
ComfyUI/models/loras/for the registry to see it.
If you're on an SDXL-lineage workflow with plain LoRAs, skip this node. If you're training or downloading character adapters for the 2026 bases, this is the loader that actually speaks their language.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| lokr_name | COMBO | 0 options: | |
| strength | FLOAT | 1.00-5β5 | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | β |
| summary | STRING | β |