【版权严正声明】
本文系作者 [编程界的小学生] 原创,并拥有完整、独立的著作权。
未经本人 书面授权 ,任何单位、平台或个人, 严禁 以任何形式(包括但不限于转载、复制、摘编、修改、链接、转贴、建立镜像等)使用本文的全部或部分内容。
任何无视本声明的侵权行为,本人将依据《中华人民共和国著作权法》等相关法律法规,采取一切必要的法律手段,追究其侵权责任,要求其 立即停止侵权、赔礼道歉、消除影响,并赔偿因此造成的一切经济损失及维权成本(包括但不限于律师费、诉讼费、公证费等)。
侵权必究,切勿以身试法!
1. 插件简介
插件地址: https://github.com/crystian/ComfyUI-Crystools
ComfyUI-Crystools 是一个超级实用的工具包插件,就像你工具箱里的瑞士军刀一样!这个插件主要是为了帮助你调试和优化 ComfyUI 工作流程而设计的。
这个插件能给我们带来什么效果?
当前插件包含节点总数: 26个节点 本次分析输出节点数: 26个节点 剩余未分析节点数: 0个节点
2. 如何安装
方法一:通过 ComfyUI 管理器安装(推荐)
打开 ComfyUI
点击右下角的"Manager"按钮
在搜索框中输入"crystools"
找到插件后点击"Install"安装
重启 ComfyUI
方法二:手动安装
打开终端或命令提示符
进入 ComfyUI 的 custom_nodes 文件夹
执行以下命令:
git clone https://github.com/crystian/ComfyUI-Crystools.gitcd ComfyUI-Crystoolspip install -r requirements.txt
重启 ComfyUI
3. 节点详细解析
3.1 基础数据节点(Primitive)
3.1.1 布尔值节点(Primitive boolean)
这个节点是干嘛的? 就像一个开关一样,只能是"开"或"关"两种状态,用来控制其他节点的行为。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
boolean | boolean | True/False | True | 就像电灯开关,True是开,False是关 | 布尔类型数据,用于逻辑判断 | 连接到切换节点控制数据流向 |
3.1.2 文本节点(Primitive string)
这个节点是干嘛的? 就像一个文本输入框,可以输入任何文字内容,比如提示词、文件名等。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
string | string | 任意文本 | "" | 就像记事本,可以写任何文字 | 字符串类型数据 | 输入"beautiful girl"作为提示词 |
3.1.3 多行文本节点(Primitive string multiline)
这个节点是干嘛的? 就像一个大的文本编辑器,可以输入很长的文字,支持换行,适合写长提示词。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
string | string | 多行文本 | "" | 就像Word文档,可以写很多行文字 | 多行字符串类型数据 | 写复杂的提示词,每行一个描述 |
3.1.4 整数节点(Primitive integer)
这个节点是干嘛的? 就像一个数字输入框,只能输入整数(没有小数点的数字),比如步数、种子值等。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
int | int | 整数 | 1 | 就像计数器,只能是1、2、3这样的整数 | 整型数据 | 设置采样步数为20 |
3.1.5 小数节点(Primitive float)
这个节点是干嘛的? 就像一个精确的数字输入框,可以输入带小数点的数字,比如CFG值、学习率等。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
float | float | 小数 | 1.0 | 就像精密天平,可以显示1.5、2.75这样的小数 | 浮点型数据 | 设置CFG为7.5 |
3.2 调试节点(Debugger)
3.2.1 显示任意数据节点(Show any)
这个节点是干嘛的? 就像一个万能显示器,可以显示任何数据的内容,帮你看到数据里到底有什么。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
any_value | any_value | 任意数据 | None | 就像X光机,能看到任何东西的内部结构 | 接受任意类型数据进行显示 | 连接模型输出查看内容 |
console | console | True/False | False | 是否在控制台打印,就像广播喇叭 | 是否输出到控制台日志 | 设为True可在后台看到信息 |
display | display | True/False | True | 是否在节点上显示,就像屏幕显示 | 是否在节点界面显示内容 | 设为True在节点上直接看到内容 |
prefix | prefix | 文本 | "" | 给显示的内容加个标签,就像贴标签纸 | 显示内容的前缀标识 | 输入"调试信息:"作为前缀 |
3.2.2 显示JSON格式数据节点(Show any to JSON)
这个节点是干嘛的? 就像一个格式化器,把复杂的数据整理成好看易读的格式显示出来。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
any_value | any_value | 任意数据 | None | 就像整理师,把乱糟糟的数据整理得整整齐齐 | 将输入数据格式化为JSON显示 | 连接复杂数据查看结构化内容 |
3.3 列表节点(List)
3.3.1 任意数据列表节点(List of any)
这个节点是干嘛的? 就像一个收纳盒,可以把8个不同的东西放在一起,方便统一管理。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
any_1 | any_1 | 任意数据 | None | 第1个收纳格,放任何东西 | 列表第1个元素 | 放入一个图片 |
any_2 | any_2 | 任意数据 | None | 第2个收纳格,放任何东西 | 列表第2个元素 | 放入一个文本 |
any_3 | any_3 | 任意数据 | None | 第3个收纳格,放任何东西 | 列表第3个元素 | 放入一个数字 |
any_4 | any_4 | 任意数据 | None | 第4个收纳格,放任何东西 | 列表第4个元素 | 放入一个模型 |
any_5 | any_5 | 任意数据 | None | 第5个收纳格,放任何东西 | 列表第5个元素 | 放入一个条件 |
any_6 | any_6 | 任意数据 | None | 第6个收纳格,放任何东西 | 列表第6个元素 | 放入一个潜在空间 |
any_7 | any_7 | 任意数据 | None | 第7个收纳格,放任何东西 | 列表第7个元素 | 放入一个遮罩 |
any_8 | any_8 | 任意数据 | None | 第8个收纳格,放任何东西 | 列表第8个元素 | 放入一个控制网络 |
3.3.2 文本列表节点(List of strings)
这个节点是干嘛的? 就像一个文本收集器,可以把8个文本放在一起,还能用分隔符把它们连接成一个长文本。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
string_1 | string_1 | 文本 | "" | 第1个文本框,写第1段话 | 列表第1个字符串元素 | 输入"beautiful" |
string_2 | string_2 | 文本 | "" | 第2个文本框,写第2段话 | 列表第2个字符串元素 | 输入"girl" |
string_3 | string_3 | 文本 | "" | 第3个文本框,写第3段话 | 列表第3个字符串元素 | 输入"portrait" |
string_4 | string_4 | 文本 | "" | 第4个文本框,写第4段话 | 列表第4个字符串元素 | 输入"detailed" |
string_5 | string_5 | 文本 | "" | 第5个文本框,写第5段话 | 列表第5个字符串元素 | 输入"high quality" |
string_6 | string_6 | 文本 | "" | 第6个文本框,写第6段话 | 列表第6个字符串元素 | 输入"masterpiece" |
string_7 | string_7 | 文本 | "" | 第7个文本框,写第7段话 | 列表第7个字符串元素 | 输入"8k" |
string_8 | string_8 | 文本 | "" | 第8个文本框,写第8段话 | 列表第8个字符串元素 | 输入"realistic" |
delimiter | delimiter | 文本 | " " | 连接符,就像胶水把文字粘在一起 | 字符串连接分隔符 | 用", "连接成"beautiful, girl, portrait" |
3.4 切换节点(Switch)
3.4.1 从任意数据切换节点(Switch from any)
这个节点是干嘛的? 就像一个分路器,根据开关状态把一个输入分成两个输出,一个给"真"的情况,一个给"假"的情况。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
any | any | 任意数据 | None | 要分流的数据,就像水管里的水 | 输入的任意类型数据 | 连接一个图片数据 |
boolean | boolean | True/False | True | 控制开关,决定水往哪边流 | 布尔值控制分流方向 | True时数据从on_true输出 |
3.4.2 任意数据切换节点(Switch any)
这个节点是干嘛的? 就像一个选择器,根据开关状态从两个输入中选择一个输出,就像遥控器选台一样。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
on_true | on_true | 任意数据 | None | 开关为"开"时选择的数据,就像1号频道 | 布尔值为True时的输出数据 | 连接白天的图片 |
on_false | on_false | 任意数据 | None | 开关为"关"时选择的数据,就像2号频道 | 布尔值为False时的输出数据 | 连接夜晚的图片 |
boolean | boolean | True/False | True | 遥控器,决定选哪个频道 | 控制选择的布尔值 | True选择白天,False选择夜晚 |
3.4.3 文本切换节点(Switch string)
这个节点是干嘛的? 专门用来切换文本的选择器,根据开关状态从两个文本中选择一个。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
on_true | on_true | 文本 | "" | 开关为"开"时的文本,就像A选项 | 布尔值为True时的字符串输出 | 输入"positive prompt" |
on_false | on_false | 文本 | "" | 开关为"关"时的文本,就像B选项 | 布尔值为False时的字符串输出 | 输入"negative prompt" |
boolean | boolean | True/False | True | 选择器,决定选A还是B | 控制文本选择的布尔值 | True选择正面提示词 |
3.4.4 条件切换节点(Switch conditioning)
这个节点是干嘛的? 专门用来切换AI绘画条件的选择器,可以在不同的绘画指令之间切换。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
on_true | on_true | 条件数据 | None | 开关为"开"时的绘画指令 | 布尔值为True时的条件输出 | 连接写实风格的条件 |
on_false | on_false | 条件数据 | None | 开关为"关"时的绘画指令 | 布尔值为False时的条件输出 | 连接动漫风格的条件 |
boolean | boolean | True/False | True | 风格选择器 | 控制条件选择的布尔值 | True选择写实风格 |
3.4.5 图片切换节点(Switch image)
这个节点是干嘛的? 专门用来切换图片的选择器,可以在两张图片之间选择一张输出。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
on_true | on_true | 图片数据 | None | 开关为"开"时选择的图片 | 布尔值为True时的图像输出 | 连接原始图片 |
on_false | on_false | 图片数据 | None | 开关为"关"时选择的图片 | 布尔值为False时的图像输出 | 连接处理后的图片 |
boolean | boolean | True/False | True | 图片选择器 | 控制图像选择的布尔值 | True选择原始图片 |
3.4.6 遮罩切换节点(Switch mask)
这个节点是干嘛的? 专门用来切换遮罩的选择器,遮罩就像蒙版一样,决定图片哪些部分要处理。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
on_true | on_true | 遮罩数据 | None | 开关为"开"时的蒙版 | 布尔值为True时的遮罩输出 | 连接脸部遮罩 |
on_false | on_false | 遮罩数据 | None | 开关为"关"时的蒙版 | 布尔值为False时的遮罩输出 | 连接背景遮罩 |
boolean | boolean | True/False | True | 蒙版选择器 | 控制遮罩选择的布尔值 | True选择脸部遮罩 |
3.4.7 潜在空间切换节点(Switch latent)
这个节点是干嘛的? 专门用来切换潜在空间数据的选择器,潜在空间是AI内部处理图片的一种格式。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
on_true | on_true | 潜在空间数据 | None | 开关为"开"时的内部数据 | 布尔值为True时的潜在空间输出 | 连接高分辨率潜在空间 |
on_false | on_false | 潜在空间数据 | None | 开关为"关"时的内部数据 | 布尔值为False时的潜在空间输出 | 连接低分辨率潜在空间 |
boolean | boolean | True/False | True | 数据选择器 | 控制潜在空间选择的布尔值 | True选择高分辨率 |
3.5 管道节点(Pipe)
3.5.1 管道输入节点(Pipe to/edit any)
这个节点是干嘛的? 就像一个打包机,可以把6个不同的数据打包成一个包裹,方便传输和管理。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
CPipeAny | CPipeAny | 管道数据 | None | 已有的包裹,可以修改里面的内容 | 输入的管道数据包 | 连接上一个管道节点 |
any_1 | any_1 | 任意数据 | None | 第1个包装格,放任何东西 | 管道第1个数据槽 | 放入模型数据 |
any_2 | any_2 | 任意数据 | None | 第2个包装格,放任何东西 | 管道第2个数据槽 | 放入正面提示词 |
any_3 | any_3 | 任意数据 | None | 第3个包装格,放任何东西 | 管道第3个数据槽 | 放入负面提示词 |
any_4 | any_4 | 任意数据 | None | 第4个包装格,放任何东西 | 管道第4个数据槽 | 放入采样器 |
any_5 | any_5 | 任意数据 | None | 第5个包装格,放任何东西 | 管道第5个数据槽 | 放入调度器 |
any_6 | any_6 | 任意数据 | None | 第6个包装格,放任何东西 | 管道第6个数据槽 | 放入种子值 |
3.5.2 管道输出节点(Pipe from any)
这个节点是干嘛的? 就像一个拆包机,把打包好的包裹拆开,取出里面的6个数据分别使用。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
CPipeAny | CPipeAny | 管道数据 | None | 要拆开的包裹 | 输入的管道数据包 | 连接管道输入节点的输出 |
3.6 图片处理节点(Image)
这个节点是干嘛的? 就像一个智能相册,不仅能显示图片,还能读取图片里隐藏的所有信息,比如拍摄参数、生成参数等。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
image | image | 图片文件 | None | 选择要加载的图片,就像选照片 | 从输入目录选择图像文件 | 选择一张PNG格式的AI生成图 |
3.6.2 获取分辨率节点(Get resolution)
这个节点是干嘛的? 就像一个尺子,专门用来测量图片的宽度和高度,告诉你图片有多大。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
image | image | 图片数据 | None | 要测量的图片,就像要量尺寸的物品 | 输入的图像数据 | 连接任何图片节点的输出 |
3.6.3 图片预览节点(Preview from image)
这个节点是干嘛的? 就像一个智能相框,不仅能显示图片,还能显示当前工作流程的所有参数信息。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
image | image | 图片数据 | None | 要预览的图片,就像要展示的照片 | 输入的图像数据 | 连接生成的图片查看效果 |
这个节点是干嘛的? 就像一个档案查看器,根据图片的信息档案来显示图片和相关数据。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
metadata_raw | metadata_raw | 信息数据 | None | 图片的身份证信息 | 原始元数据 | 连接加载图片节点的信息输出 |
这个节点是干嘛的? 就像一个智能打印机,不仅能保存图片,还能在图片里嵌入各种自定义信息。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
image | image | 图片数据 | None | 要保存的图片 | 输入的图像数据 | 连接最终生成的图片 |
filename_prefix | filename_prefix | 文本 | "ComfyUI" | 文件名前缀,就像给文件起名字 | 保存文件的名称前缀 | 输入"MyArt_"作为前缀 |
with_workflow | with_workflow | True/False | True | 是否保存工作流程信息 | 是否在图像中嵌入工作流数据 | True可以让别人看到你的制作过程 |
metadata_extra | metadata_extra | JSON文本 | 默认信息 | 额外的自定义信息,就像给图片写说明 | 额外的元数据信息 | 添加作者、版权等信息 |
这个节点是干嘛的? 就像一个信息分析师,把图片里的复杂信息分门别类地整理出来,让你能清楚地看到每一项。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
metadata_raw | metadata_raw | 原始信息数据 | None | 图片的完整档案信息 | 输入的原始元数据 | 连接加载图片节点的信息输出 |
这个节点是干嘛的? 就像一个对比专家,可以比较两张图片的信息,找出它们之间的差异。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
metadata_raw_old | metadata_raw_old | 原始信息数据 | None | 第一张图片的档案,就像旧版本 | 用于比较的第一个元数据 | 连接原始图片的信息 |
metadata_raw_new | metadata_raw_new | 原始信息数据 | None | 第二张图片的档案,就像新版本 | 用于比较的第二个元数据 | 连接修改后图片的信息 |
what | what | 选择项 | "Prompt" | 要比较的内容类型 | 指定比较的数据类型 | 选择"Prompt"比较提示词差异 |
3.8 工具节点(Utils)
3.8.1 JSON比较节点(JSON comparator)
这个节点是干嘛的? 就像一个文档对比工具,可以比较两个复杂的数据文档,找出它们的不同之处。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
json_old | json_old | JSON数据 | None | 第一个要比较的数据文档 | 用于比较的第一个JSON数据 | 连接旧版本的配置数据 |
json_new | json_new | JSON数据 | None | 第二个要比较的数据文档 | 用于比较的第二个JSON数据 | 连接新版本的配置数据 |
3.8.2 系统状态节点(Stats system)
这个节点是干嘛的? 就像一个系统监控器,可以显示电脑的内存、显存、硬盘空间等使用情况。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
latent | latent | 潜在空间数据 | None | 传递的数据,就像传送带上的物品 | 输入的潜在空间数据 | 连接任何潜在空间数据 |
3.9 参数处理节点(Parameters)
3.9.1 读取JSON文件节点(Read JSON file)
这个节点是干嘛的? 就像一个文件阅读器,可以读取电脑上的JSON格式文件,把里面的数据加载进来使用。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
path_to_json | path_to_json | 文件路径 | "" | 文件的地址,就像门牌号 | JSON文件的完整路径 | 输入"/path/to/config.json" |
这个节点是干嘛的? 就像一个数据挖掘机,可以从复杂的数据结构中挖出你需要的特定信息。
参数详解:
参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|
json | json | JSON数据 | None | 要挖掘的数据宝藏 | 输入的JSON数据 | 连接读取文件节点的输出 |
key | key | 文本 | "" | 要找的数据的名字,就像钥匙 | 要提取的数据键名 | 输入"model_name"提取模型名称 |
default | default | 文本 | "" | 找不到时的备用值 | 默认返回值 | 输入"unknown"作为默认值 |
4. 使用技巧和建议
4.1 调试技巧
4.2 工作流优化
使用管道节点来整理复杂的连线,让工作流更清晰
利用切换节点来快速切换不同的参数组合
使用列表节点来批量管理相似的数据
4.3 数据管理
5. 常见问题解答
Q1: 为什么我的调试节点没有显示内容?
A: 检查是否连接了数据输入,并确保"display"参数设置为True。
Q2: 管道节点出现递归错误怎么办?
A: 确保数据流向是单向的,不要形成循环连接。
Q3: 切换节点不工作怎么办?
A: 检查布尔值输入是否正确连接,确保开关状态符合预期。
Q4: 如何查看图片的完整信息?
A: 使用"带信息加载图片"节点加载图片,然后连接"信息提取"节点查看详细信息。
Q5: 系统监控显示不准确怎么办?
A: 确保你的显卡支持CUDA,AMD显卡可能无法显示GPU信息。
6. 高级应用示例
6.1 创建智能切换系统
使用多个切换节点组合,可以创建复杂的条件判断系统,根据不同情况自动选择最合适的参数。
6.2 建立参数对比工作流
使用信息比较节点,可以快速对比不同参数设置的效果,找出最佳配置。
6.3 构建自动化调试系统
结合调试节点和系统状态节点,可以实时监控工作流的运行状态和系统性能。
总结: ComfyUI-Crystools 是一个功能强大的调试和优化工具包,包含26个实用节点,涵盖了数据显示、流程控制、信息处理、系统监控等各个方面。无论你是新手还是高手,这个插件都能大大提升你的工作效率!
记住,熟练使用这些工具就像学会使用各种厨具一样,一开始可能觉得复杂,但掌握后会发现它们让你的创作过程变得更加顺畅和高效!