Nodes/ComfyUI_UniversalSubspace/Load Universal Subspace (Basis)
ComfyUI Node

Load Universal Subspace (Basis)

The Node That Makes the Whole Universal Subspace Pack Work

By a-ru2016·Created 8 months ago·Updated 8 months ago· 0
Load Universal Subspace (Basis)
    • UNIVERSAL_SUBSPACE
    universal_lora_name

    UniversalLoRALoader (displayed as "Load Universal Subspace (Basis)") is the front door of this whole pack. Every other node in ComfyUI_UniversalSubspace needs a UNIVERSAL_SUBSPACE input, and this is the only node that produces one. It reads a .safetensors file out of your loras folder and hands it to the graph as the shared basis that the rest of the pipeline reconstructs LoRAs from.

    What a "subspace basis" actually is

    The pack's whole bet is that trained LoRAs don't live everywhere in weight space - they cluster in a low-dimensional shared subspace. So instead of storing each LoRA's up/down matrices in full, you compute, per layer, a mean vector μ and a basis matrix V (think: the principal directions that a bunch of LoRAs vary along). Then any LoRA becomes just a small vector of coordinates α along those directions, and you can rebuild its weights with:

    w = μ + V·α
    

    The .basis and .mean files are the expensive, trained-once part - that's what this node loads. The α per-LoRA coordinates are the cheap part, loaded separately by LoadUniversalWeights. Two files, one shared basis, many tiny LoRA representations.

    What the node does

    Inputs and outputs are minimal, which is refreshing:

    • Input universal_lora_name - a dropdown listing every .safetensors in your loras folder. Pick the basis file.
    • Output UNIVERSAL_SUBSPACE - a raw state dict of the basis keys (like unet.block.x.lora_down.weight.basis and .mean, plus .lora_up equivalents and the .null frozen parts that ApplyNullLaLoRA reads). Wire it into the subspace input of any of the pack's apply nodes.

    Under the hood it's just safetensors.torch.load_file() - no key rewriting, no shape checks, no cleverness. The code prints a debug line with how many keys it loaded, which is your first sign of whether you picked the right file.

    The honest catch

    There is no model download in this repo. The README is a single Japanese sentence that translates roughly to "can load universal lora," and the code doesn't ship a basis file or point you at one. That's because this pack is the inference half of a research training pipeline - the basis files come from the author's own training scripts, which live outside this repo. Install the pack, and the dropdown is there; whether it has anything useful in it depends on artifacts you don't get from this repository. If you installed this hoping for a ready-made "one LoRA to rule them all," that's not what this is.

    Install

    No dependencies beyond what ComfyUI already has (torch, safetensors, comfy) - no requirements.txt, nothing heavy:

    # ComfyUI Manager: Manager → Install Custom Nodes → search "UniversalSubspace" → Install → Restart
    
    # or manually:
    cd ComfyUI/custom_nodes
    git clone https://github.com/a-ru2016/ComfyUI_UniversalSubspace
    

    Then restart ComfyUI. When it loads, the nodes appear under the UniversalSubspace category.

    Where people get burned

    The classic failure is silent: you feed this node a regular LoRA file instead of a basis file. It loads, produces a UNIVERSAL_SUBSPACE, and then every apply node downstream quietly reconstructs zero layers and returns your model untouched. You get an image with no LoRA effect at all and no error. Always check the console output - the "Loaded Basis/LoRA" debug print tells you how many keys landed. If the count is tiny or the apply nodes report Applied Layers: 0, you're feeding it the wrong file.

    CategoryUniversalSubspace

    Inputs (1)

    NameTypeDefaultDescription
    universal_lora_nameCOMBO0 options:

    Outputs (1)

    NameTypeDescription
    UNIVERSAL_SUBSPACEUNIVERSAL_SUBSPACE