Nodes/OmniNodes/LoKr Loader (Custom) 🧩
ComfyUI Node

LoKr Loader (Custom) 🧩

Because Character LoRAs Are Mostly LoKr Now

By TensorVizionΒ·Created 3 months agoΒ·Updated about 8 hours agoΒ· 0
LoKr Loader (Custom) 🧩
  • model
  • model
  • summary
β—„lokr_nameβ–Ύβ–Ί
β—„strength1.00β–Ί

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 loras registry.
  • 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, not lokr - 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.

CategoryTensorVizion/Model

Inputs (3)

NameTypeDefaultDescription
modelMODELβ€”
lokr_nameCOMBO0 options:
strengthFLOAT1.00-5–5β€”

Outputs (2)

NameTypeDescription
modelMODELβ€”
summarySTRINGβ€”