ComfyUI-YJNodes
ComfyUI 插件合集:模型匹配、工作流辅助和自定义节点。
Nodes (2)
ComfyUI-YJNodes
一组面向 ComfyUI 的实用节点与工作流增强工具,提供缺失模型匹配、工作流完成提示音、Set/Get 物理连线转换、动态图片批次合并和 YJpause 工作流断点。
功能概览
| 功能 | 说明 | | --- | --- | | 缺失模型匹配 | 扫描选中节点或整个工作流,为缺失模型推荐本地候选并批量替换 | | 工作流完成提示音 | 支持自定义音效、音量以及“队列完成”或“每个任务完成”两种触发方式 | | Set/Get 转物理连线 | 将 KJNodes 的 Set Node / Get Node 逻辑连接展开为真实连线 | | 去重复帧图像批次合并 | 动态添加最多 20 个图片输入,并在合并时移除后续批次开头的重复帧 | | YJpause 工作流断点 | 在任意数据连线上暂停执行,可继续、重新开始、停止或按时自动停止 |
环境要求
- ComfyUI
- Python 3.10 或更高版本
- “打开音效文件夹”和“打开模型目录”仅支持 Windows;其余核心功能不依赖这两个快捷入口
安装
- 下载或克隆本仓库到 ComfyUI 的
custom_nodes目录。 - 重启 ComfyUI。
本插件当前没有需要单独安装的 Python 依赖。
缺失模型匹配
在打开其他人分享的工作流但本地模型名称或目录不一致时,可使用该工具查找替代模型。
使用方法:
- 可选:先选中需要检查的节点;未选中节点时会扫描整个工作流。
- 在画布空白处右键,选择“⚡ 选择缺失模型”。
- 在结果窗口中检查状态、原始模型名、候选模型、匹配度和匹配原因;包含多个模型控件的节点会集中显示在同一组中。
- 可在每个候选框中搜索本地模型路径、手动更换候选、勾选“不调整”,或用
HF、C、G分别打开 Hugging Face、Civitai、Google 搜索。 - 点击“应用更改”。只有未勾选“不调整”且真实存在、可写的节点控件会被修改。
匹配规则:
| 情况 | 匹配度 | 结果状态 | | --- | ---: | --- | | 主体名、精度和参数量一致 | 100% | 精确匹配 | | 主体名一致,精度不同 | 95% | 模糊匹配 | | 主体名一致,参数量不同 | 90% | 模糊匹配 | | 主体名不同 | 最高 89% | 模糊匹配 |
说明:
- 目录不同不会单独降分,但会显示为匹配原因。
- 候选按匹配度和路径相关性排序,列表中的第一项会被默认选中。
- 最高候选为 100% 时默认勾选“不调整”;需要替换时应先取消勾选。
- 默认选中候选不等于自动写入,只有点击“应用更改”后才会修改工作流。
- 每个模型引用最多展示 8 个候选。
- 模型索引来自 ComfyUI 的
models目录、extra_model_paths.yaml以及当前folder_paths注册的模型类型。 - 外部搜索使用原始模型文件名打开搜索页面,不会下载或安装模型。
UNKNOWN 节点
未安装的自定义节点可能显示为 UNKNOWN。插件会尝试从工作流序列化数据的 widgets_values 中提取能够可靠识别为模型的文件名,并标记为“UNKNOWN 节点原始值”。
由于 UNKNOWN 节点没有真实可写控件,这些结果只用于查看候选和外部搜索,不参与“应用更改”。无法可靠判断模型类型的值会被跳过,避免把普通文件误判为模型。
工作流完成提示音
- 打开 ComfyUI 设置,进入
YJNodes → 工作流完成提示音。 - 启用提示音,并选择触发方式:
- 队列完成:整个队列清空后播放一次。
- 每个任务:每完成一个工作流任务播放一次。
- 点击“打开音效文件夹”,将音效复制到插件的
sounds目录。 - 点击“刷新音效列表”,选择音效并调整音量。
- 点击“测试当前音效”试听。
支持扩展名:.wav、.mp3、.ogg、.m4a、.aac、.flac、.webm。实际能否解码取决于浏览器或 ComfyUI Desktop 的音频支持。
Set/Get 转物理连线
该功能用于展开 KJNodes 的 Set Node / Get Node 逻辑连接,便于移除中间节点或导出更直观的工作流。
- 在画布空白处右键,选择“⚡ 将 Set/Get 替换为连线”。
- 插件按变量名匹配 Set/Get,并将 Set 的上游直接连接到对应 Get 的全部下游。
- 选择“仅连线”保留原节点;选择“连线并删除”同时删除已匹配的 Set/Get;选择“取消”不修改工作流。
安全处理:
- 没有 Set/Get、变量名不匹配或 Set 没有上游连线时,不会修改工作流。
- 存在多个已连接且同名的 Set 时,插件不会猜测来源;有歧义的变量会被跳过,其他无歧义连接仍可转换。
- 检测到子图时,为避免破坏跨子图引用,只允许建立连线,不提供删除选项。
去重复帧图像批次合并
节点路径:YJNodes/Image → 去重复帧图像批次合并
- 连接
image2后会自动出现下一个图片输入,最多支持image1至image20。 - 所有输入按编号顺序沿 batch 维度合并。
- “减去重复帧数”为
N时,保留image1完整批次,并从每个后续输入的开头移除N帧后再合并。 - 被裁剪为空的后续输入会被忽略。
- 所有参与合并的图片必须具有相同的高度、宽度和通道数,否则节点会报出尺寸不匹配。
此功能按指定数量裁剪批次开头,并不会逐帧计算内容是否真的重复。
YJpause 工作流断点
节点路径:YJNodes/工作流 → YJpause
YJpause 可以插入任意数据连线,在执行到该位置时暂停当前工作流。传入的数据不会被修改,节点会根据连接自动适配数据类型。
使用方法:
- 将需要设置断点的数据线连接到 YJpause 的“传入值”,再从“传出值”连接后续节点。
- 打开“启用暂停”。关闭时节点会直接传递数据,不会暂停。
- “超时自动停止(分钟)”设为
0时无限等待;设为正整数时,倒计时结束后自动停止当前任务。 - 工作流执行到 YJpause 后,节点会高亮并显示暂停状态、剩余时间和三个操作按钮。
操作说明:
- 继续:保留当前执行状态,从断点处继续。
- 重新开始:结束当前任务,并从头重新提交工作流。
- 停止:只结束当前任务,不重新提交。
暂停期间刷新页面后,插件会尝试恢复当前暂停状态及操作按钮。一个工作流可以放置多个 YJpause,执行到每个已启用的断点时都会分别暂停。
界面语言
YJpause 和缺失模型匹配器支持中文与英文,优先跟随 ComfyUI 的语言设置;读取不到时继续参考浏览器语言,非中文环境默认使用英文。Set/Get 转换器也支持中英文,读取不到 ComfyUI 语言时默认使用中文。动态合并节点和提示音设置目前使用中文标签。
当前限制
- 不会在导入工作流时自动打开模型匹配器,需要从画布右键菜单手动触发。
- UNKNOWN 节点的模型值是只读参考,不能直接替换。
- 模型匹配结果窗口的列宽调整不会持久化。
- 子图中的 Set/Get 只转换连线,不自动删除节点。
开发与测试
在 Windows PowerShell 中:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -U pip
.\.venv\Scripts\python.exe -m pip install pytest
.\.venv\Scripts\python.exe -m pytest -q
node --test tests\js\yj_canvas_menu.test.mjs tests\js\yj_comfy_compat.test.mjs tests\js\yj_dynamic_image_concat_core.test.mjs tests\js\yj_execution_sound_core.test.mjs tests\js\yj_i18n.test.mjs tests\js\yj_model_matcher_core.test.mjs tests\js\yj_model_matcher_extension.test.mjs tests\js\yj_pause_core.test.mjs tests\js\yj_set_get_resolver_core.test.mjs
Python 测试需要隔离环境;JavaScript 测试需要本机已安装 Node.js。
许可证
本项目使用 MIT 许可证。