Load Models + Loras
Checkpoint, LoRA stack, and trigger words in one node
- model_info
- lora_stack
- model_shifts
- model
- clip
- vae
- lora_stack
- keywords
This is Sage Utils' all-in-one loader: give it a model_info bundle and an optional LoRA stack, and it hands back a fully loaded, fully LoRA'd model/clip/vae, plus the combined Civitai trigger-word keywords for every LoRA in the stack. The README describes exactly this pairing - "Model + Lora Stack Loader - Loads both a checkpoint and a LoRA stack in one node" plus "LoRA Stack → Keywords - Extracts Civitai keywords from a LoRA stack" - fused into a single node instead of two you'd otherwise wire separately.
The trigger-word extraction is the part worth calling out. A lot of LoRAs need a specific activation phrase to actually kick in, and it's easy to forget one buried three LoRAs deep in a stack. This node reads each LoRA's Civitai metadata for its documented trigger words and hands you back a combined keywords string you can drop straight into your prompt. It's the same idea rgthree-comfy's popular Power Lora Loader does for trigger words (right-click a LoRA entry there and it fetches keywords from Civitai too) - if you already know that node, this is Sage's version of the same convenience, scoped to Sage's own metadata pipeline instead of rgthree's.
How the pieces connect
model_info is Sage's metadata-aware bundle - it comes from a checkpoint loaded upstream through one of the pack's own loaders, hashed and matched against Civitai, cached locally. The lora_stack input is built by chaining Sage's own "Simple Lora Stack" or "Triple Lora Stack" nodes (not covered in this batch) - each one adds a LoRA with a toggle and a weight, and this node applies every LoRA in that chain at once. Internally the node uses ComfyUI's GraphBuilder mechanism to expand itself into however many load steps the stack needs at runtime, which is how one node handles a stack of arbitrary length instead of needing a fixed number of LoRA slots.
Inputs and outputs
model_info- required, the checkpoint metadata bundle to load from.lora_stack- optional; skip it and you just get a plain checkpoint load with no LoRAs applied.model_shifts- optional, for wiring in shift adjustments from another Sage node if you're using one; leave disconnected otherwise.
Five outputs: model, clip, vae - the loaded, LoRA-applied components, ready to wire into your sampler and text encode nodes - plus lora_stack (the stack passed back through, useful if you want to feed it into Sage_CheckLorasForUpdates further down the graph) and keywords, the combined trigger-word string.
Installing it
ComfyUI Manager: search Sage Utils, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/arcum42/ComfyUI_SageUtils
cd ComfyUI_SageUtils
pip install -r requirements.txt
Restart ComfyUI. No extra downloads for the node itself - it loads whatever checkpoint and LoRAs you already have.
Common issues
If keywords comes back empty even though your LoRAs definitely have activation phrases, check whether those specific LoRA files actually hash-matched something on Civitai - a locally trained LoRA or one downloaded from somewhere other than Civitai won't have trigger words in the cache to pull from, since there's nothing to look up.
Because this node builds its subgraph dynamically based on the size of your lora_stack, an empty or malformed stack input is more likely to produce a confusing error than a graceful no-op - if you're not applying any LoRAs, it's simpler to leave lora_stack disconnected entirely rather than feeding it an empty stack node.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_info | MODEL_INFO | — | |
| lora_stackopt | LORA_STACK | — | |
| model_shiftsopt | MODEL_SHIFTS | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |
| lora_stack | LORA_STACK | Output value for out_lora_stack. |
| keywords | STRING | Output value for keywords. |