The button still reads Civitai lookup failed, and a message now gives the reason. A browser that cannot reach civitai.com at all names the usual causes: a firewall, a VPN, or ComfyUI started with --disable-api-nodes.
365 lines
20 KiB
Markdown
365 lines
20 KiB
Markdown
# LoRA Loader
|
|
|
|
Applies a whole stack of LoRAs to a model (and optionally CLIP) from one
|
|
compact node. Each row is one LoRA: an on/off pill, a searchable picker, and
|
|
strengths you can drag like a slider. Trigger words from every enabled row
|
|
come out of one socket, ready to wire into a prompt.
|
|
|
|
## Rows
|
|
|
|
- **grip** (the dotted handle): Drag up or down to reorder the stack. LoRAs
|
|
apply in row order, so the order is part of the recipe; the move commits
|
|
when you drop, and a cancelled drag changes nothing.
|
|
- **toggle**: Enable or disable the row without losing its settings.
|
|
- **name**: A plain click opens the picker — type to search, **Arrow
|
|
Up/Down** to highlight, **Enter** to select, **Escape** to close; the list
|
|
is refreshed from `models/loras` every time it opens. Dragging left/right
|
|
on the name instead **scrubs the model strength**, and the bar behind the
|
|
text rides along. Rows show just the file name by default; the full path
|
|
lives in the tooltip and the picker keeps its folder groups. A name too
|
|
long for its row is cut at the end; gear menu → **Long names** →
|
|
`middle` cuts the middle instead, so the checkpoint number at the end
|
|
(`…_000004000`, `…_epoch_10`) stays visible in a narrow node. The picker
|
|
opens wide enough for long names; when one still does not fit, it
|
|
shortens the folder first and keeps the end of the file name.
|
|
- **strength**: Drag left/right on the number to scrub it, click to type an
|
|
exact value, use the chevron arrows, or the arrow keys. Hold **Shift**
|
|
while scrubbing or stepping for fine 0.01 moves. Range is -10 to 10.
|
|
- **i**: Info card with the preview image, base model, file size and
|
|
modified date, and trigger words for that LoRA.
|
|
|
|
Right-click a row to insert an empty LoRA above or below it, move, duplicate,
|
|
or remove it, or to put it in a group (see Groups below). With several rows
|
|
picked (Ctrl/Cmd-click or Shift-click), **Remove these LoRAs** removes them
|
|
all. **Remove this LoRA** is red. **Delete all LoRAs…** is a separate red, trash-marked action
|
|
with confirmation; it clears this node's rows and keeps all files on disk.
|
|
Cancel or Escape keeps the stack. Inserting keeps the existing rows and their settings in order;
|
|
the new slot uses the gear menu's default strength (initially 1).
|
|
The stack holds up to 64 rows.
|
|
One strength drives both
|
|
model and CLIP by default; the gear menu's **Separate model / CLIP
|
|
strength** switch shows a second box per row. The switch is per-node — new
|
|
nodes always start unified — and an absorb that imports a row with unequal
|
|
model/CLIP strengths flips it on automatically so the difference stays
|
|
visible. Turning it back off sets every row's CLIP strength to its model
|
|
strength.
|
|
|
|
## Groups
|
|
|
|
Groups keep a long stack tidy, like layer groups in an image editor. A
|
|
group has a header with its own on/off switch, so you can turn a whole set
|
|
of LoRAs (all your style LoRAs, say) off and on with one click. Each LoRA
|
|
in the group keeps its own switch too: turn the group off and back on, and
|
|
the same LoRAs are on as before.
|
|
|
|
- **Make a group:** right-click a row and choose **Group this LoRA**. To
|
|
group several, hold **Ctrl** (**Cmd** on a Mac) and click each row first,
|
|
or click one and **Shift**-click another to pick every row between them.
|
|
Then right-click one of them and choose **Group these LoRAs**. The new
|
|
group appears where the topmost row was, and you type its name.
|
|
- **Add to a group:** drag a row by its grip onto the group's name, or
|
|
between any two of its rows. Right-click → **Move to group** does the
|
|
same.
|
|
- **Take out of a group:** drag the row above or below the group, or
|
|
right-click → **Take out of** the group.
|
|
- **Fold:** the arrow next to the group's switch hides its rows and makes
|
|
the node shorter. Folded rows still run.
|
|
- **Rename:** double-click the group's name.
|
|
- Right-click a group's header to move the whole group, fold it, turn all
|
|
its LoRAs on or off, ungroup it (the LoRAs stay), or remove it together
|
|
with its LoRAs. Drag the header's grip to move the whole group.
|
|
- **Turn a group on and off from a Workflow Switch:** save the switch once
|
|
with the group on and once with it off. The group's header then shows a
|
|
lock, and the switch turns the whole group on and off. The LoRAs inside
|
|
stay yours to turn on and off. Click the lock to take the group back.
|
|
|
|
Right-click the empty space around the rows (or under **+ LoRA**) to add
|
|
LoRAs, group the rows you picked, fold or open every group at once, or
|
|
delete all LoRAs.
|
|
|
|
A plain click anywhere clears a Ctrl/Shift selection, and so does Escape.
|
|
The count on a header (`2/3 on`) shows how many of its LoRAs are on. While
|
|
the group is off it reads `group off`, and its LoRAs are dimmed.
|
|
|
|
### Technical details
|
|
|
|
LoRAs still apply in the order you see, top to bottom; a group changes
|
|
nothing about how the stack runs. Groups are one level deep, and a group
|
|
lasts while it has a LoRA in it. Each row keeps its group's name in the
|
|
saved stack, so groups travel with templates, undo, and rows shown on a
|
|
subgraph box. Which groups are folded is saved with the node. A group that
|
|
is off marks each of its rows with `group_off` in the saved stack: none of
|
|
them runs, and each keeps its own on/off. A row dragged into an off group
|
|
goes off with it, and a row taken out runs by its own switch again. A
|
|
renamed group keeps its on/off and its Workflow Switch. The switch at the
|
|
top of the node turns every row and every group on. Move up and Move down step a row out of the edge of
|
|
its group, or into a group next to it, one step at a time. While you drag,
|
|
the drop line starts indented when the row would join a group. Just below
|
|
a group's last row is outside the group; to add a row at a group's end,
|
|
drop it on the group's name.
|
|
|
|
## Rows on a subgraph box
|
|
|
|
When the loader sits inside a subgraph, its rows can show on the box
|
|
itself, so you can switch LoRAs on and off and change strengths without
|
|
opening the box.
|
|
|
|
1. Open the box and press the loader's gear. The first item is **Rows on the
|
|
box**.
|
|
2. Press **Show**. The rows now show on the box's face.
|
|
|
|
Each copy of the box keeps its own rows, and that copy is what runs. Inside,
|
|
the loader says "These rows are set on the box" and shows the rows of the
|
|
box you came in through; a change there goes to that box. **Take back**, in
|
|
the same place, puts the rows inside the loader again, as the box you came in
|
|
through holds them, and every copy of the box then runs those rows.
|
|
|
|
On the box the card keeps the rows, the master pill and **Re-check LoRA
|
|
files**. Templates and the gear stay on the loader inside.
|
|
|
|
Workflow Switches can set the rows on a box like any other setting: select
|
|
the box and save its on and off (see the Workflow Switches help).
|
|
|
|
## Rows a switch sets
|
|
|
|
A row that a Workflow Switches switch turns on or off shows a **lock** where
|
|
its drag handle is, and a thin line down its left edge. Hover the lock to
|
|
see which switch sets it. You can still change the row's strength and
|
|
triggers: the switch only turns the row on and off, unless it was saved with
|
|
one strength for on and another for off. Click the lock to take the row
|
|
over: the switch forgets that row and leaves it alone from then on, and
|
|
stops reading "changed" because of it. Everything else the switch does
|
|
stays. A locked row still drags to a new place.
|
|
|
|
A group that a switch turns on and off shows the lock on its header
|
|
instead. The LoRAs in it keep plain grips, so each one is still yours to
|
|
turn on or off. Click the header's lock to take the group over.
|
|
|
|
## Strength bars
|
|
|
|
Every named row paints a center-zero bar behind its name: teal grows right
|
|
of center for positive model strength, muted red grows left for negative,
|
|
a 1px tick marks zero and a brighter 2px cap marks the value's edge. One
|
|
shared scale across the stack: the field edges represent the largest
|
|
absolute strength among the **enabled** rows, floored at 1.0 — so an
|
|
everyday stack of 0.5s reads absolutely as half-bars, one row at 2.0
|
|
rescales every bar rather than clipping, and switching that row off hands
|
|
the scale back to the strongest row still in play (the dimmed row's own
|
|
bar clamps at the edge meanwhile). The scale in play is named in each
|
|
row's tooltip.
|
|
Gear menu → "Strength bars" turns them off; "Scrub strength on the name"
|
|
turns the name-drag off.
|
|
|
|
## The control bar
|
|
|
|
The bar rides the empty middle of the output-slot band, so the node spends
|
|
its height on rows, not chrome. Left to right:
|
|
|
|
- **▤ templates** — save the current stack under a name, or apply/delete a
|
|
saved one. Templates are kept in this browser and shared by every
|
|
workflow opened in it.
|
|
- **master pill** — cycles *mixed → all on → all off → back to the mixed
|
|
setup it destroyed*. Every hand-made row toggle refreshes that memory, so
|
|
an accidental master click is always one more click from home.
|
|
- **summary** — how many rows are on.
|
|
- **↻ reconnect** — re-checks every row against a fresh `models/loras` list
|
|
and repairs what it can: a row whose file moved folders (or came back
|
|
after being missing) is rewritten to the resolved path. ComfyUI's own
|
|
**R** refresh runs the same pass quietly.
|
|
- **⚙ gear** — settings, and the **Absorb chain LoRAs** action below.
|
|
|
|
**+ LoRA** opens one list of files grouped by folder. Click a file to add
|
|
one LoRA, or click a folder name to add all its LoRAs, including nested
|
|
folders. To add several files from different folders, tick the box beside
|
|
each one (or **Ctrl**-click its name), then click **Add N LoRAs** at the
|
|
bottom or press **Enter**. **Shift**-click ticks every file between the
|
|
last one you ticked and the one you click. Ticks stay while you search, so you can
|
|
gather files from several searches; **Clear** unticks them all. Files that
|
|
are already in the stack say **in stack** and have no box. With the
|
|
keyboard, **Ctrl+Enter** ticks the highlighted file and **Shift+Enter**
|
|
ticks the run up to it. Use the arrow beside a folder to collapse or expand it without
|
|
adding anything. Folded folders are remembered in this browser. Search
|
|
reveals matching files; clearing it brings back your folded view. You can
|
|
also fold folders while searching.
|
|
|
|
Each folder shows **Add all** and its full file count, even when
|
|
search hides some of its files. New rows use the gear menu's default
|
|
strength. A folder skips files already in the stack; existing rows keep
|
|
their order, strengths and switches. The same filename in different folders
|
|
counts as separate LoRAs.
|
|
|
|
The choice is one undo step. Closing the picker without choosing changes
|
|
nothing. If a folder would take the stack past 64 rows, nothing is added
|
|
and a message says how much room is needed. Remove rows or pick a smaller
|
|
folder. Typing a filename and pressing Enter picks one file; use the arrow
|
|
keys to highlight a folder before Enter if you want the whole folder.
|
|
Pointing at a folder with the mouse does not choose it for Enter.
|
|
Left and Right collapse and expand a highlighted folder.
|
|
Clicking an existing row's name still replaces only that row's file.
|
|
|
|
## Keyboard controls
|
|
|
|
Press Tab until a row is outlined. The outlined row is the one you are
|
|
changing. A click on the thin gap between two of a row's controls outlines
|
|
it too.
|
|
|
|
- **Up / Down** moves between rows and **+ LoRA**.
|
|
- **Enter** opens that row's file picker, or adds a new LoRA from **+ LoRA**.
|
|
In the picker, use Up / Down and Enter as usual. Picking a file returns
|
|
focus to its row; Escape returns without changing it.
|
|
- **Space** turns the outlined row off or on.
|
|
- **Left / Right** decreases or increases model strength by the gear menu's
|
|
strength step (0.05 by default). **Shift** uses a smaller 0.01 step.
|
|
Linked mode changes CLIP strength too. With separate strengths, focus
|
|
the CLIP box to change CLIP alone.
|
|
- **Tab** keeps moving through controls normally. On one of a row's own
|
|
buttons, Enter and Space press that button. **Escape** leaves row
|
|
keyboard control. Clicking outside the loader does the same.
|
|
- **Delete** and **Backspace** do nothing on a row, its controls or
|
|
**+ LoRA**, so they cannot delete the node by mistake. Click the node or
|
|
the graph first to delete the node.
|
|
|
|
Working with the mouse does not start keyboard control: after you click a
|
|
switch or pick a file from the list, the keys stay with ComfyUI.
|
|
|
|
Typing in a field keeps its ordinary editing keys. These shortcuts only
|
|
apply inside this loader; ComfyUI's Ctrl/Cmd shortcuts still pass through.
|
|
|
|
## Absorb the loader chain
|
|
|
|
Gear menu → **Absorb chain LoRAs**. Walks the model chain on BOTH sides of
|
|
this node — upstream through the `model` input, downstream from the `model`
|
|
output — and for every loader it recognizes (core `LoraLoader` and
|
|
`LoraLoaderModelOnly`, rgthree Power Lora Loader and Lora Loader Stack, JPS
|
|
Lora Loader, `PixaromaLoraLoader`, another AusBoss LoRA Loader; Reroutes are
|
|
walked through) lifts its rows into this stack in application order:
|
|
upstream loaders, your existing rows, then downstream loaders. The original
|
|
loaders are set to **bypass** only when their connections can be preserved.
|
|
Repeated filenames remain separate rows, with their own strengths and
|
|
toggles.
|
|
|
|
Details that keep the absorb faithful:
|
|
|
|
- the walk follows connections, not canvas position, and stops at unknown
|
|
nodes and downstream forks
|
|
- JPS rows switched off stay disabled; an rgthree Lora Loader Stack strength
|
|
applies to both model and CLIP
|
|
- names are resolved against this install's `models/loras` — exact match
|
|
first, then a unique basename match ignoring folders and extension (for
|
|
workflows saved on another machine's layout); unresolved names import
|
|
verbatim and the rows tint red
|
|
- `LoraLoaderModelOnly` rows import with CLIP strength 0
|
|
- repeated LoRAs are kept: applying a file twice is part of the original recipe
|
|
- a shared model path, including a branch hidden behind a reroute, blocks
|
|
absorption instead of changing another branch
|
|
- when CLIP patches move, CLIP must follow the same serial chain as MODEL;
|
|
rows from a loader without a connected CLIP import with CLIP strength 0
|
|
- connected auxiliary outputs, such as trigger words, block absorption because
|
|
bypassing their source would break those connections
|
|
- linked LoRA settings and stacks beyond the row limit leave the sources active
|
|
- already-bypassed or muted loaders contribute no rows
|
|
- a toast summarizes what was imported, bypassed, remapped, and skipped
|
|
|
|
## Moved and missing files
|
|
|
|
Rows are checked against the install's LoRA list. A row whose file moved
|
|
folders gets a dashed border and a tooltip naming the file the run will
|
|
use; a row with no match anywhere tints red; an ambiguous basename tints
|
|
red with advice to re-pick. Thumbnails, the info card, and range lookups
|
|
all use the resolved name, so a moved file keeps its previews and Civitai
|
|
data.
|
|
|
|
The run side matches: a stale saved path resolves by name at load time
|
|
(exact → unique case-insensitive path → unique basename, with a one-line
|
|
console note when it remaps). A LoRA that is genuinely missing **stops the
|
|
run before anything is sampled**, and the error names the file — a picture
|
|
that rendered without its LoRA is worse than no picture, above all for a
|
|
script or an agent that would happily judge it. The error also says where
|
|
the switch is.
|
|
|
|
Gear menu → **Stop on missing LoRA** (on by default) turns that off for this
|
|
node, and for LoRA Loaders you add later in this browser; nodes already saved
|
|
in a workflow keep their own setting. With it off, a missing row then warns once in the console and is skipped while the
|
|
rest of the stack applies, which suits a person at the canvas who wants to
|
|
see the rest of the picture. In API graphs the same switch is the
|
|
`on_missing` input (`"error"`, the default, or `"skip"`); graphs saved before
|
|
the input existed get the default.
|
|
|
|
A file that is there but is not a LoRA also stops the run before anything
|
|
loads, and the error names the file and says what it is: a Draw Things
|
|
file (Draw Things turns a LoRA into its own kind of file when you import
|
|
it, and ComfyUI cannot open that kind), a web page saved by a download
|
|
that needed a login, or a download that never finished. Pick the original
|
|
`.safetensors` file in that row. A file that fails later, while it is
|
|
being opened, gets the same plain message with the loader's own error at
|
|
the end.
|
|
|
|
## Preview thumbnails
|
|
|
|
Hovering a row's name — or any entry in the picker — floats a small preview
|
|
beside the cursor when a sidecar image sits next to the LoRA file (same
|
|
basename: `.preview.png` / `.preview.jpg` / `.preview.jpeg` / `.preview.webp`,
|
|
or the bare `.png` / `.jpg` / `.jpeg` / `.webp`). No sidecar, no thumbnail —
|
|
nothing appears and nothing shifts. The gear menu's **Preview thumbnails**
|
|
switch turns the behavior off.
|
|
|
|
**Get the pictures from Civitai:** click **Fetch Civitai info** (or
|
|
**Refresh Civitai info**) in a LoRA's info card. It also saves the LoRA's
|
|
first picture from Civitai next to the file, and the hover and the info card
|
|
show it right away. Gear menu → **Civitai picture** picks which pictures:
|
|
**PG-13** (the default) skips pictures Civitai rates R or above, **any**
|
|
takes the first picture whatever its rating, and **off** saves none. It never
|
|
replaces a picture you already have.
|
|
|
|
## Trigger words
|
|
|
|
The info card gathers words from three places: the LoRA file's own metadata,
|
|
a standard `<model>.civitai.info` sidecar when one sits beside the file
|
|
(the **Fetch Civitai info** button in the card saves one; other Civitai
|
|
tools write the same file), and words you add yourself (remembered per LoRA
|
|
across workflows). Click a word to toggle it into the row; enabled rows'
|
|
selected words are joined into the `triggers` output, deduplicated, in
|
|
row order. Picking a different file for a row clears the words you had
|
|
switched on for the old one.
|
|
|
|
## Civitai info and suggested strength
|
|
|
|
- **Fetch Civitai info** looks this one LoRA up on civitai.com. Nothing is
|
|
sent until you click. Your browser then sends only the file's SHA256
|
|
fingerprint, and the answer is saved next to the LoRA as
|
|
`<model>.civitai.info`, with the LoRA's picture as `<model>.preview.jpg`
|
|
(see "Get the pictures from Civitai" above). After that the button reads **Refresh Civitai
|
|
info** and the card gets a **View on Civitai** link. A LoRA Civitai does
|
|
not know (unpublished or hidden) reads **Not found on Civitai**. Gear
|
|
menu → **Civitai lookup button** removes the button. When a lookup fails,
|
|
a message says why. If it always says it could not reach civitai.com,
|
|
check whether ComfyUI was started with `--disable-api-nodes`: that setting
|
|
stops the browser from reaching any other site, Civitai included.
|
|
- **Suggested strength**: a lowest and a highest value at the bottom of the
|
|
card (leave one empty for "any"). It is only a reminder: a row set outside
|
|
it shows its number in orange, and the tooltip gives the range. Saved per
|
|
LoRA, for every workflow.
|
|
|
|
## Other gear options
|
|
|
|
- **Default strength** (starts at 1): the strength a newly added LoRA gets.
|
|
- **Strength step** (starts at 0.05): how far one drag step or arrow click
|
|
moves a strength. Shift always steps by 0.01.
|
|
- **Trigger word separator** (a comma and a space to start): what joins the
|
|
`triggers` output.
|
|
- **Hide file extension** and **Hide folder names** (both on): how names
|
|
show on rows. The full path stays in the tooltip.
|
|
|
|
## Outputs
|
|
|
|
- **model**: The model with every enabled LoRA applied in row order.
|
|
- **clip**: The CLIP with every enabled LoRA applied (empty when no CLIP
|
|
is connected).
|
|
- **triggers**: The selected trigger words from enabled rows, deduplicated,
|
|
joined with the gear menu's separator (a comma by default).
|
|
|
|
Rows with a strength of `0` (both model and CLIP) are skipped at load time
|
|
but still contribute their trigger words, so you can park a LoRA at zero
|
|
while comparing. A row skipped because its file is missing contributes none:
|
|
that LoRA is not in the picture.
|