Nodes/ComfyUI-Universal-ABM-LoRA/Null Universal LoRA Loader
ComfyUI Node

Null Universal LoRA Loader

The Null Universal LoRA Loader wants a basis file first

By a-ru2016·Created 8 months ago·Updated 8 months ago· 0
Null Universal LoRA Loader
  • model
  • clip
  • MODEL
  • CLIP
lora_name
strength1.00
basis_file_pathuniversal_lora_64_all.safetensors

Let's get the trap out of the way first: this is not the node you reach for when you download a normal LoRA from CivitAI. Drop a regular rank-32 SDXL LoRA in here and you'll get a "Basis file not found" error and no idea why. This loader exists for one very specific, very experimental family of adapters - "universal" / null-space LoRAs plus EffiLoRA and ABM variants - where the LoRA file is only the tiny coefficients and a separate basis file supplies the shared structure. If you have one of those, this is the only practical way to run it in ComfyUI. If you don't, use the built-in LoraLoader and move on.

How it works

The idea, grounded in the actual source rather than the (one-line, Japanese) README: normal LoRAs patch the base weights directly. These formats instead build the adapter in the null space of each UNet weight - the low-signal directions you get from an SVD - plus a shared low-rank basis loaded from a separate file. Because the patch lives in directions the base model barely uses, the theory goes, adapters interfere less and stack more cleanly. That's the "universal" part.

Concretely, the loader:

  • Reads the LoRA's safetensors header for network_dim, use_dora, effilora, and num_experts, so one node handles the whole family.
  • Loads the basis file (per-layer .mean and .basis tensors).
  • Runs an SVD over every target conv/linear weight in the UNet to get the frozen null-space paths, keeps only the small trainable alpha_down/alpha_up coefficient matrices (plus an MoE gate when there are multiple experts), and applies it through set_model_unet_function_wrapper - patching during sampling and restoring afterward so the base model stays clean for everything else on the graph.

Two details worth knowing: it skips text-encoder keys entirely (anything with te1, te2, text_encoder), so CLIP passes through unchanged - the CLIP output on this node is just a passthrough. And the clip input/output are there for graph compatibility; the real work happens in the MODEL branch.

The inputs that matter

  • model, clip - wire in your checkpoint's MODEL and CLIP.
  • lora_name - dropdown of files in ComfyUI/models/loras.
  • strength - 0 to 10, default 1.0. Same idea as any LoRA weight, just dial the influence.
  • basis_file_path - this is the gotcha. Defaults to universal_lora_64_all.safetensors, and the loader hunts for it in this order: exact path, then your loras folder, then the models folder. If it's not there, hard error.

Outputs are MODEL and CLIP. Wire the MODEL into your sampler; leave the CLIP chain alone.

Installing

No requirements.txt, no heavy dependencies - it only needs torch and safetensors, which ComfyUI already ships. (bitsandbytes is optional, only for dequantizing 4-bit models.) Through ComfyUI Manager, search the pack title, or:

cd ComfyUI/custom_nodes
git clone https://github.com/a-ru2016/ComfyUI-Universal-ABM-LoRA

Then restart ComfyUI. What the README doesn't tell you is where the basis file comes from - it's part of the training output from the author's related repos (there's a predecessor, ComfyUI_UniversalSubspace). Get it from whoever made your universal LoRA; without it, the node is a brick.

Troubleshooting

  • "Basis file not found" - almost always you don't have universal_lora_64_all.safetensors (or the custom basis your LoRA was trained against). Drop it in models/loras or give the full path.
  • Load takes a while / spikes VRAM - the loader SVDs the whole UNet at load time. It tries GPU first, falls back to CPU if that fails. Expect a visible pause before sampling starts; that's normal.
  • No CLIP-side effect - by design. Text encoder keys are skipped.
  • The basics: this pack is 0 stars, one commit, from a Japanese hobbyist running an experiment. Treat it as bleeding-edge research plumbing, not a maintained product. It's the kind of thing you try because you found a specific model that needs it - and then you don't use it again.
Categoryloaders

Inputs (5)

NameTypeDefaultDescription
modelMODEL
clipCLIP
lora_nameCOMBO0 options:
strengthFLOAT1.000–10
basis_file_pathSTRINGuniversal_lora_64_all.safetensors

Outputs (2)

NameTypeDescription
MODELMODEL
CLIPCLIP