Load Universal Subspace (Basis)
The Node That Makes the Whole Universal Subspace Pack Work
- UNIVERSAL_SUBSPACE
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.safetensorsin yourlorasfolder. Pick the basis file. - Output
UNIVERSAL_SUBSPACE- a raw state dict of the basis keys (likeunet.block.x.lora_down.weight.basisand.mean, plus.lora_upequivalents and the.nullfrozen parts that ApplyNullLaLoRA reads). Wire it into thesubspaceinput 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.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| universal_lora_name | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| UNIVERSAL_SUBSPACE | UNIVERSAL_SUBSPACE | — |