SK Lora Loader
The LoRA stack node that feeds you the trigger words
- model
- clip
- MODEL
- CLIP
- trigger_words
- loaded_loras
This is the node the whole SK LoRA Manager pack is built around. Instead of the standard LoraLoader's dropdown-of-everything, it loads a stack of LoRAs from one JSON string - and, the part that actually sells it, it hands you the trigger words for everything it just applied. The manager panel's "Use this LoRA" button injects straight into this node, so it's the endpoint where "manage your library in the side panel" becomes "run your generation."
It fills the same niche rgthree's Power Lora Loader is famous for - stacking multiple LoRAs with per-entry controls instead of chaining five LoraLoaders - but the trigger-word feed is the differentiator. LoRA trigger words are the community's answer to "how do I get the style to actually appear" (rare tokens like ch9ractername are the convention), and this node makes you stop hunting for them. If the panel synced Civitai data for your LoRA, the tags ride along.
How it works. It takes your base model (and optionally clip), clones them to keep state isolated, parses the lora_stack JSON, then applies each enabled LoRA in order with ComfyUI's own loader. Each entry has strength_model and strength_clip, an on toggle, and a tags field. The JSON looks like this, and you can absolutely hand-write it:
{
"global_on": true,
"loras": [
{"name": "char/some_style.safetensors", "strength_model": 0.8, "strength_clip": 0.8, "on": true, "tags": "ch9ractername, detailed"}
]
}
global_on is a master switch - flip it and the whole stack silently passes through. Filenames get a fuzzy match (just the basename works), so a stale path degrades gracefully instead of killing the run.
Inputs that matter. model is required; clip is optional (leave it out for model-only LoRAs). lora_stack is a plain string, default "{}" - feed it that and the node is a pure passthrough. selector_mode just picks how the on-canvas picker UI appears: Side Drawer, Top Panel, or Floating Tool. Cosmetic, honestly.
Outputs. MODEL and CLIP go where you'd expect - into your positive/negative encoders and sampler. trigger_words is a comma-joined string of every loaded LoRA's tags; wire it into your prompt text. loaded_loras is the formatted <lora:name:model_weight:clip_weight> list, handy for logging or pasting into A1111-style prompts.
Installing. ComfyUI Manager - search "SK LoRA Manager" - or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/sinvks/ComfyUI-SKLora-Manager.git
pip install -r requirements.txt
Then restart ComfyUI. No model files to download; the deps are light (aiohttp, requests, opencv-python-headless, Pillow, numpy, beautifulsoup4). On first run the panel scans your models/loras folder - click "Sync Local" so the loader has something to inject, and optionally add a Civitai API key for "Sync Civitai" to fetch trigger words and previews.
Where people get burned. The number one trap: this node is driven by the panel. If you never sync, lora_stack stays "{}" and your run silently ignores your LoRA. Second: don't also chain a regular LoraLoader onto the same model - you'll double-apply. And treat auto-generated trigger words as a starting point, not gospel; the pack's README is honest that AI-filled metadata sometimes needs a manual fix. If you swap a LoRA file out, the node's change-detection hashes file mtimes, so it re-runs instead of serving you a cached result - a nice touch that prevents "why is my new file not doing anything."
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clipopt | CLIP | — | |
| lora_stackopt | STRING | {} | — |
| selector_modeopt | COMBO | Side Drawer (侧边抽屉) | 3 options: Side Drawer (侧边抽屉), Top Panel (顶部ç›é€‰), Floating Tool (悬浮工具) |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| trigger_words | STRING | — |
| loaded_loras | STRING | — |