Load Universal Weights (Alpha)
The Tiny File That Stands In for a Whole LoRA
- UNIVERSAL_WEIGHTS
LoadUniversalWeights (displayed as "Load Universal Weights (Alpha)") loads the per-LoRA half of this pack's two-part scheme. If UniversalLoRALoader is the shared basis, this is the individual LoRA - compressed down to a handful of coordinate vectors, called "alpha" in the code. Output is a UNIVERSAL_WEIGHTS object that ApplyUniversalWeights turns back into an actual LoRA and applies.
The idea in one line
A normal LoRA file stores actual lora_down / lora_up matrices for dozens of layers - that's why a 10-50 MB file is typical. The universal subspace approach instead stores just the α coordinates of those matrices along the shared basis: w = μ + V·α. The μ and V live once in the basis file; the α vector is all this node loads. If the subspace is doing its job, the weights file can be dramatically smaller than the LoRA it represents.
What the node does
Minimal again, one input, one output:
- Input
weight_file- a dropdown of.safetensorsfiles in yourlorasfolder. Pick the alpha/weights file for the LoRA you want. - Output
UNIVERSAL_WEIGHTS- wire this into theuniversal_weightsinput of ApplyUniversalWeights.
The loader itself does nothing but safetensors.torch.load_file() and print a debug count. The reconstruction math happens downstream in the apply node. A weights file carries keys like unet.block.x.alpha and te1.text_model.x.alpha - one alpha vector per basis block.
A naming trap worth knowing
This "alpha" has nothing to do with the alpha scale you set when you apply a normal LoRA in ComfyUI (that one is the network's alpha, controlling effective rank). Here "alpha" is just the author's name for the coordinate vectors. If you're expecting to see per-layer up/down matrices, you won't - you'll see vectors a few hundred floats long. That's the point.
Also note the pack's loaders read from the loras folder - not a dedicated subspaces or weights folder. So you'll be dumping basis files, alpha files, and your regular LoRAs into the same dropdown lists. When every input is "pick a file from loras," it's easy to grab the wrong one, and the apply nodes don't complain when you do.
Why you'd actually use this
If you're following the author's research pipeline - train or project LoRAs into the subspace, then use them at inference - this is how you get a compressed LoRA into the graph. There's no interpolation or blending node in the pack yet, so for most practical use the appeal is mostly the small files and the research, not a workflow you'd build your daily driver around. If you just want a character LoRA to work, use the normal LoRA Loader.
Install and troubleshooting
Same trivial install as the rest of the pack - Manager search "UniversalSubspace", or:
cd ComfyUI/custom_nodes
git clone https://github.com/a-ru2016/ComfyUI_UniversalSubspace
then restart. No extra dependencies, no model downloads. The usual failure: you load a weights file whose alpha vectors don't match the basis's rank or key naming, and ApplyUniversalWeights silently skips every layer - debug line says Applied Layers: 0, image looks like the LoRA never happened. Match the weights file to a basis file that was made for it, and check the console before you tear your hair out.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| weight_file | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| UNIVERSAL_WEIGHTS | UNIVERSAL_WEIGHTS | — |