LoRA分类加载
按类别开关 LoRA(多标签 / 同类互斥 / 勾选联动 / 按子文件夹过滤 / 临时分类)+ 为每个 LoRA 挂载多套自定义提示词预设,勾选后输出为字符串
ComfyUI LoRA 分类加载
把 LoRA 按类别管起来:按类别勾选、同类互斥、跨类别联动,选中即在节点内完成加载;
再配一套跟着 LoRA 走的提示词预设,勾哪条就输出哪条。
给 LoRA 起别名,节点里就只看到「胶片质感」这种好认的名字;鼠标悬停还能看样图和原文件名。
两种渲染模式都能用:旧版画布(legacy canvas)和新的 Nodes 2.0(Vue 渲染)都已适配。
装好后有三个东西:
| | 作用 |
| ----------------- | -------------------------------------- |
| 节点「LoRA分类加载」 | 按类别勾选 LoRA,加载后输出叠加好的 MODEL,外加名称与语法串 |
| 节点「LoRA提示词选择」 | 按 LoRA 分组列出预设复选框,勾选后拼成一段提示词字符串 |
| 管理面板 | 建类别、打标签(可多标签)、起别名、写提示词预设、传预览图、按文件夹自动归类 |
安装
把整个 ComfyUI-LoraCategoryLoader 目录放进:
ComfyUI/custom_nodes/ComfyUI-LoraCategoryLoader
重启 ComfyUI。不需要任何额外依赖。
快速上手
- 整理类别。打开管理面板(ComfyUI 顶部菜单的「LoRA 分类管理」,或浏览器访问
http://<你的 ComfyUI 地址>/lora_category_loader),点 「按文件夹自动归类」 一键把
models/loras下的子目录名变成类别;也可以手动建类别、拖动排序、逐个打标签。 - 写预设、配图。点卡片上的 「提示词预设」,写好这个 LoRA 的完整提示词(一个 LoRA 可以有多条)。
顺手把鼠标移到卡片图上配张预览图,之后在加载节点里悬停就能看到。 - 连节点。画布上加「LoRA分类加载」→ 把
LORA_NAMES接到「LoRA提示词选择」→ 输出接文本编码。
加载节点的model接基础模型。 - 日常使用。在加载节点的折叠面板里勾 LoRA(想只看某个模型目录就动一下顶部的子文件夹下拉),
再把「LoRA提示词选择」接上文本编码并勾要用的预设。 - 临时凑一组?在面板底部新建临时分类,把 LoRA 拖进去即可(只影响当前工作流)。
节点「LoRA分类加载」
节点主体是一块折叠面板,按类别分组,每个类别可折叠,标题上带「单选 / 多选」徽章和勾选计数。
勾选规则
- 一个 LoRA 可以挂多个类别标签,会同时出现在这几个类别里;行尾的
+N表示它还挂在别处。 - 勾选状态是全局的:同一个 LoRA 在几个类别里出现,就是同一份状态 —— 在任意一处点一下,
其它几处同时变成勾选 / 取消。 - 单选类别(同类互斥):点一个会关掉这个类别里原来那个;被关掉的那个如果同时挂在别的类别下,
那边也会一起取消(启用状态只有一份)。 - 多选类别:可以同时勾好几个。
拖动与摘标签
- 拖拽 = 给这个 LoRA 加一个类别标签(写回全局配置,持久保存)。拖到分类区任意位置都行,
靠近面板上下边缘会自动滚动。 - 行尾的 ✕ = 把这个类别标签从该 LoRA 上摘掉(不影响勾选)。
强度
勾上的行右侧有一个强度框:
- 可以直接输入数字;
- 也可以按住左右拖动(横向 100px = 1.0),光标是左右箭头,拖起来很顺手;
- 默认 1.0;只影响当前工作流,不写回全局配置;
- 节点上的
global_strength是总倍率,会乘到每个 LoRA 的强度上。
只作用于 UNET 侧 —— 常见的 LoRA 对文本编码器影响可以忽略,所以没有单独的 CLIP 强度。
别名与预览图
- 行上显示的是别名(在管理面板里点名称就能改),没设别名时显示文件名。
- 有预览图的 LoRA 名字后面有个小方框标记,鼠标悬停浮出预览图,设过别名的还会在图下面标出原文件名。
搜索与子文件夹过滤
面板顶部有搜索框(名称 / 别名都能搜)和子文件夹下拉。
如果你按模型分了目录(sdxl/…、flux/…),子文件夹下拉可以把面板收窄成「只看这一个文件夹」:
- 选项来自 LoRA 相对路径的第一层目录,外加「全部文件夹」;如果有 LoRA 直接放在根目录,
会多一个「(根目录)」。 - 选择跟着工作流保存 —— 同一个工作流打开还是上次那个文件夹,不同工作流各记各的。
- 过滤开着时,被过滤干净的类别会直接收起来,不留空壳。
- 只有确实有 LoRA 落在子文件夹里时这个下拉才出现。
临时分类
面板底部可以新建临时分类。它只存在当前工作流,不写回全局配置 —— 适合「这一张图想临时凑几个
LoRA 一起上」。把上面任意 LoRA 拖进去即可(拖进去会顺手启用它,但不改它的类别标签);
行尾 ✕ 移出,标题上的 ✕ 删掉整个临时分类。
输入 / 输出
| 输入 | 说明 |
| ----------------- | ------------------------------------------------------ |
| model | 基础模型。可选:不接则不做实际加载,只输出 LORA_NAMES / LORA_SYNTAX |
| selection | 折叠面板自动维护的状态(JSON),平时不用管 |
| <每个类别一个下拉> | 降级界面,正常情况下被隐藏,见下 |
| global_strength | 总强度倍率,乘以各 LoRA 自己的强度 |
节点「LoRA提示词选择」
- 把上游的
LORA_NAMES接进lora_names。 - 节点上按 LoRA 分组,把每个 LoRA 的预设列成复选框(像打钩日程)。分组标题用的是别名。
- 每个 LoRA 单独一组「全选 / 清空」,顶部还有整体的「全选 / 全不选」。
- 输出拼好的
PROMPT,直接接文本编码节点。
| 输入 | 说明 |
| ------------------- | ------------------------------------- |
| lora_names | 上游「LoRA分类加载」的 LORA_NAMES |
| selection | 复选框状态(JSON),平时不用管 |
| separator | 片段之间的分隔符:换行 / 双换行 / 逗号+空格 / 空格 |
| prefix / suffix | 各算独立一段,跟正文用同一个分隔符隔开(不是首尾硬黏)。不用就留空 |
| dedupe | 去掉完全重复的片段 |
| 输出 | 说明 |
| -------- | --------------------- |
| PROMPT | 勾选的提示词拼接结果 |
| REPORT | 本次用了哪些 LoRA 的哪些预设,排查用 |
拼接顺序:
- LoRA 之间 → 按上游的加载顺序(= 管理面板里的类别顺序);
- 同一个 LoRA 内 → 按管理面板里预设的排列顺序(不是勾选先后);
- 分隔符 →
prefix、正文、suffix用它串起来。
勾选改动要重新执行才会生效:打钩只改状态,节点不会自动重跑;而「预览文本」这类节点显示的
永远是上一次执行的结果。「勾了却没变化」基本都是没重新执行 —— 按Ctrl+Enter再跑一次即可。
管理面板
浏览器打开 http://<你的 ComfyUI 地址>/lora_category_loader,或点顶部菜单的「LoRA 分类管理」。
类别
新建 / 改名 / 删除 / 拖动排序;每个类别标「单选」或「多选」。
「未分类」是兜底类别:一个 LoRA 没有别的标签时才会显示在这里,它不占显式标签。
所以从一个只有「未分类」的 LoRA 上把标签拖到别处,它就不再属于「未分类」了 —— 这是正常的。
新增 / 删除类别之后,需要让 ComfyUI 重新读取节点定义,节点上的下拉框才会更新:
点面板右上角「刷新节点定义」,或回到 ComfyUI 页面按R。
只改标签归属、文件夹过滤、预设内容则不需要刷新。
筛选
- 类别筛选可多选:点左侧类别即加入筛选,选两个以上时上方出现 「与 / 或」 ——
「与」= 交集(必须同时属于这些类别),「或」= 并集(属于任意一个即可)。
下面会有一行筛选中:A 且 B提示当前条件;点「全部」清空筛选。 - 搜索框可以搜名称、别名、备注。
- 按子文件夹筛选,和节点面板里那个是同一份数据。
LoRA 卡片
- 卡片上是标签 chips,用「+ 加类别」追加、chip 上的 ✕ 摘掉;
点图选中多张后可以批量操作:「+ 加标签 / - 去标签 / 设为唯一」。 - 别名:点卡片上的名称就地改名(回车保存 / Esc 取消 / 点别处保存 / 留空还原成文件名)。
别名只影响显示,不改动任何文件;设了别名时卡片名称下方会多显示一行原文件名。 - 提示词预设:每个 LoRA 可以有多条完整提示词,可增删、可排序。
- 预览图:鼠标移到卡片图上可上传 / 更换 / 删除。
- 按文件夹自动归类:把
models/loras下的子目录名直接变成类别,已经打过标签的不会被覆盖。
预览图
上传:管理面板里把鼠标移到 LoRA 卡片图上,右下角出现「上传图 / 换图 / 删除」。图片存在
<ComfyUI user 目录>/lora_category_loader/previews/
只接受 PNG / JPG / WEBP / GIF / AVIF(按文件魔数判断,SVG、HTML 这类会被拒),单张上限 8MB。
上传后立刻生效:管理面板显示,加载节点里悬停对应 LoRA 也会浮出小窗。
没上传时按顺序自动找:
- 本插件上传的图(优先级最高);
- 模型旁同名图:
<LoRA名>.preview.png/<LoRA名>.png; - LoRA Manager 的 sidecar(
<模型名>.metadata.json)里的preview_url,没有就看civitai.images[].url; - 常见预览图目录,如
models/lora_previews/<相同子目录结构>/<同名>.png。
远端图由浏览器直接加载,本插件不缓存、不下载。
数据存在哪
<ComfyUI user 目录>/lora_category_loader/library.json
放在 user 目录而不是插件目录,插件升级、重装、删了重下都不会丢配置。纯 UTF-8 JSON,
可以直接手改,改完插件会自动检测并重载。
结构:
{
"version": 3,
"categories": [
{ "id": "default", "name": "未分类", "mode": "multi", "order": 0 },
{ "id": "cat1a2b3c4d", "name": "风格", "mode": "exclusive", "order": 1 },
{ "id": "cat9f8e7d6c", "name": "人物", "mode": "multi", "order": 2 }
],
"loras": {
"风格/film_like.safetensors": {
"categories": ["cat1a2b3c4d", "cat9f8e7d6c"],
"alias": "胶片质感",
"model_strength": 0.85,
"notes": "",
"presets": [
{ "id": "p1", "name": "预设一", "text": "你的提示词写在这里" },
{ "id": "p2", "name": "预设二", "text": "另一条提示词" }
]
}
}
}
- LoRA 的主键是相对路径,跟着硬盘上的实际结构走。新出现的文件会自动归到「未分类」,打上标签即可。
categories是类别 id 的列表,一个 LoRA 可以有多个。alias是显示用的别名(可空),只影响界面,不改动任何文件。model_strength是这个 LoRA 的默认强度(默认1.0),节点里可以按工作流临时覆盖。- 挪进子文件夹 / 改名不用重新配:插件会按「文件名唯一匹配」把已有记录认领到新路径,
标签、强度、预设、上传的预览图全都跟着走(控制台会打印认领:旧路径 → 新路径)。
如果两个目录下有同名文件(匹配不唯一)就不动手,宁可让你手动改,也好过张冠李戴。 - 哪些配置跟着工作流、哪些跟着机器:勾选状态、强度覆盖、文件夹过滤、临时分类随工作流;
类别、标签、别名、强度默认值、预设、预览图随机器。
已知限制
- 折叠面板和打钩界面都是自定义前端组件,Nodes 2.0(新版 Vue 渲染)和旧版画布(legacy canvas)下都能用。 万一某个前端版本渲染失败,会自动降级到原生下拉框(少了多标签联动、临时分类、搜索、文件夹过滤)。
- 拖拽是自己实现的(指针事件),没用浏览器原生 HTML5 拖拽(在画布上原生拖拽实测会中途断掉)。
所以拖拽只在「LoRA分类加载」节点内部有效,不能把 LoRA 从别处拖进来。 - 临时分类只活在当前工作流,换工作流就没了 —— 设计如此;要长期保留就建成正式类别。
- 同一个 LoRA 挂多个标签会显示多行,但只是一份状态:勾一处、处处同步,加载时也只加载一次。
- 「LoRA提示词选择」读的是上游当前的选择状态,必须先接上
LORA_NAMES才会显示内容。 - 类别数量上限 60,超过的部分不会出现在节点上(控制台会提示)。
- 类别增删后,旧工作流里的下拉框值会被安全忽略:不会报
Required input is missing,
也不会串到别的输入上;真正生效的始终是折叠面板写进selection的那份状态。
加完类别记得点「刷新节点定义」让节点上的下拉框跟上。 - 管理面板的批量条(
+ 加标签 / - 去标签 / 设为唯一)要先在下拉里选中类别,否则只提示、不改数据。 - 文件夹过滤按第一层目录分组,更深的层级会一起归到第一层。
extra_model_paths.yaml里的额外 LoRA 目录同样能扫到。
自检
不需要 ComfyUI、不需要 torch,纯离线跑:
python tests/selftest.py
会用桩件模拟 ComfyUI 的 folder_paths,覆盖:扫描索引、预览图读取与上传、类别 / 别名 / 预设持久化、
多类别标签、LoRA 挪动后的自动认领、节点「LoRA分类加载」的动态下拉与状态解析、节点「LoRA提示词选择」的拼接顺序与分隔符。
和 ComfyUI-Lora-Manager 的关系
只做一件事:如果 LoRA Manager 给某个 LoRA 存过预览图,本插件就把那个图读出来显示(读它写在模型旁的
.metadata.json 文件格式,属于数据不是代码)。不依赖它、不引用它一行代码,两者可以同时装、同时用;
不装它也不影响本插件的任何功能。
HTTP 接口
管理面板用的接口(与 ComfyUI 同源,无单独鉴权):
| 方法 | 路径 | 说明 |
| ---- | -------------------------------------------- | -------------------------------------------- |
| GET | /lora_category_loader/api/state | 类别 + LoRA + 预设全量视图 |
| POST | /lora_category_loader/api/rescan | 重新扫描 LoRA 目录 |
| POST | /lora_category_loader/api/category | 新建 / 修改类别 |
| POST | /lora_category_loader/api/category/delete | 删除类别 |
| POST | /lora_category_loader/api/category/reorder | 调整类别顺序 |
| POST | /lora_category_loader/api/lora | 保存单个 LoRA 的类别 / 别名 / 强度 / 预设 |
| POST | /lora_category_loader/api/lora/tag | 加 / 减一个类别标签(add / remove,不动其他标签) |
| POST | /lora_category_loader/api/lora/bulk | 批量改标签(add_category / remove_category)或强度 |
| POST | /lora_category_loader/api/autotag | 按文件夹自动归类 |
| GET | /lora_category_loader/api/preview?name= | 预览图(本地文件或 302 到远端) |
| POST | /lora_category_loader/api/preview/upload | 上传预览图(multipart:name + file) |
| POST | /lora_category_loader/api/preview/delete | 删除预览图 |
License
MIT