Nodes/ComfyUI_UniversalSubspace/Load Universal Weights (Alpha)
ComfyUI Node

Load Universal Weights (Alpha)

The Tiny File That Stands In for a Whole LoRA

By a-ru2016·Created 8 months ago·Updated 8 months ago· 0
Load Universal Weights (Alpha)
    • UNIVERSAL_WEIGHTS
    weight_file

    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 .safetensors files in your loras folder. Pick the alpha/weights file for the LoRA you want.
    • Output UNIVERSAL_WEIGHTS - wire this into the universal_weights input 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.

    CategoryUniversalSubspace

    Inputs (1)

    NameTypeDefaultDescription
    weight_fileCOMBO0 options:

    Outputs (1)

    NameTypeDescription
    UNIVERSAL_WEIGHTSUNIVERSAL_WEIGHTS