π Kraken LoRA Loader (3)
Three LoRAs at once, with trigger words fetched from CivitAI for you
- model
- clip
- model
- clip
- prompt
- lora_names
- triggers
- tags
The annoying part of a LoRA workflow was never the loading - it's remembering which LoRA needs which trigger word. You download a character LoRA, its page says "trigger: chara-name style", and then you re-open the page five days later because you forgot. π Kraken LoRA Loader (3) is the Kraken Tools node that fixes that: three LoRA slots in one node, each with enable toggles and per-LoRA strengths, plus automatic trigger-word fetching from CivitAI so the node writes the right words into your prompt for you.
It's part of Kraken Tools (krakenunbound/comfyui-kraken-tools), and it slots into the pack's standard graph right after a checkpoint loader: Kraken Checkpoint Loader β Kraken LoRA Loader (3) β Kraken KSampler, with its prompt output feeding your text encoder.
How it works
Each of the three slots (lora_1_ / lora_2_ / lora_3_) is identical and independent:
- lora_X_enabled - on/off per slot. Slot 1 defaults on, the others off, so the node behaves like a normal single LoRA loader until you need more.
- lora_X_file - the LoRA file dropdown from your
models/lorasfolder. - lora_X_model_strength / lora_X_clip_strength - the standard two-strength split, -2.0 to +2.0. Model strength steers the diffusion model, clip strength the text encoder. For a typical character LoRA you leave both at 1.0 and tune the model one down to 0.7-ish if it's overpowering.
- lora_X_clip_skip - 0β4; a per-LoRA CLIP skip, mostly an anime/SDXL thing. 0 is off.
- lora_X_force_fetch - re-fetch triggers from CivitAI even if cached.
The trigger magic lives in fetch_triggers (on by default). Here's what happens when you pick a LoRA: the node hashes the file, asks CivitAI's model-versions/by-hash endpoint for that version, and pulls its trainedWords and recommended strengths. No API key is needed for public model data - the key in the README's config file is only for rate-limit / private-model cases. The results are cached locally, so the second run is instant and works offline. If CivitAI lookup fails, the node falls back to reading the LoRA's own safetensors metadata and pulls tags from Kohya-style ss_tag_frequency, sorted by how often each tag appeared in training - a genuinely nice fallback.
placement decides where the fetched trigger words go in your prompt: prepend, append, or replace (replace swaps out the positive prompt entirely). separator defaults to ", ". The three slots' triggers are merged, deduped, and emitted on the prompt output.
Outputs
- model / clip β the LoRA-modified model and CLIP, on to your sampler and text encoder.
- prompt (STRING) β your positive prompt with trigger words inserted. Feed this into a text encoder (or into the pack's
Kraken Unbound Prompt, which accepts it and layers on style). - lora_names / triggers / tags (STRING_LIST) β the metadata: which LoRAs loaded, their triggers, and their tags. Handy for logging or for a text display that shows exactly what the run used.
Note there's a positive_prompt optional input (your base prompt to enhance), and an api_key_status field that's a status readout ("β οΈ Key Not Found"), not a place to paste secrets - the key lives in a config file.
Install
Pack install as usual. ComfyUI Manager β search "Kraken Tools" β Install β restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/krakenunbound/comfyui-kraken-tools
cd comfyui-kraken-tools
pip install -r requirements.txt
For the optional CivitAI API key, create ~/Documents/ComfyUI/user/kraken_config.json (that path is the author's own; it's where this pack expects it on Windows-style setups) with:
{
"civitai_api_key": "your_api_key_here"
}
Again: optional. Public models work without it. requests is a core dependency, which is what talks to CivitAI.
Where people get burned
- Trusting auto-strengths blindly. The node can fetch recommended strengths from CivitAI, but LoRA pages are wrong as often as they're right. Fetch is for the trigger words; tune the strengths yourself.
- The key path is fixed. If you're not on Windows,
~/Documents/ComfyUI/user/kraken_config.jsonmay not match your ComfyUI layout - check where your actualuser/folder is if the key isn't being read. - Trigger words still need the right model. CivitAI returns
trainedWordsregardless of what checkpoint you loaded. A LoRA trained on Illustrious will hand you its trigger happily, and the words may be useless on an SDXL checkpoint. The node can't save you from a mismatched base. - Offline on first run. If you're offline or CivitAI is down, the by-hash fetch fails and falls back to metadata - usually fine, occasionally empty. Don't panic if the
promptoutput looks bare the very first time;force_fetchon a slot retries when you're back online.
The stock LoraLoader is fine for one LoRA. This node earns its keep the second you stack two or three and want the trigger words to stop living in your browser history.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| clip | CLIP | β | |
| lora_1_enabled | BOOLEAN | true | β |
| lora_1_file | COMBO | None | 1 options: None |
| lora_1_clip_skip | INT | 00β4 | β |
| lora_1_model_strength | FLOAT | 1.00-2β2 | β |
| lora_1_clip_strength | FLOAT | 1.00-2β2 | β |
| lora_1_force_fetch | BOOLEAN | false | β |
| lora_2_enabled | BOOLEAN | false | β |
| lora_2_file | COMBO | None | 1 options: None |
| lora_2_clip_skip | INT | 00β4 | β |
| lora_2_model_strength | FLOAT | 1.00-2β2 | β |
| lora_2_clip_strength | FLOAT | 1.00-2β2 | β |
| lora_2_force_fetch | BOOLEAN | false | β |
| lora_3_enabled | BOOLEAN | false | β |
| lora_3_file | COMBO | None | 1 options: None |
| lora_3_clip_skip | INT | 00β4 | β |
| lora_3_model_strength | FLOAT | 1.00-2β2 | β |
| lora_3_clip_strength | FLOAT | 1.00-2β2 | β |
| lora_3_force_fetch | BOOLEAN | false | β |
| placement | COMBO | prepend | 3 options: prepend, append, replace |
| separator | STRING | , | β |
| fetch_triggers | BOOLEAN | true | β |
| api_key_status | STRING | β οΈ Key Not Found | β |
| positive_promptopt | STRING | β |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| model | MODEL | β |
| clip | CLIP | β |
| prompt | STRING | β |
| lora_names | STRING_LIST | β |
| triggers | STRING_LIST | β |
| tags | STRING_LIST | β |