ComfyUI_cspnodes 插件保姆级教程
1. 插件简介
ComfyUI_cspnodes 是一个由 cerspense 制作的ComfyUI节点包,插件地址:https://github.com/cerspense/ComfyUI_cspnodes
这个插件就像是给你的ComfyUI工具箱增加了10个新工具,让你能够:
- 自动读取文本文件的内容(就像自动翻书机)
- 批量处理文件夹里的图片和视频(就像自动整理相册)
- 用文字生成视频(就像魔法棒一样)
- 把图片的颜色拆分开来(就像把彩色笔拆成红绿蓝三支)
- 调节数值大小(就像调节温度计)
- 把深度图转换成立体效果图(就像把平面地图变成3D地形图)
2. 如何安装
安装这个插件有两种方法:
方法一:通过ComfyUI Manager安装(推荐)
- 打开ComfyUI,点击右下角的"Manager"按钮
- 在弹出的窗口中选择"Install Custom Nodes"
- 搜索"cspnodes",找到后点击"Install"
- 重启ComfyUI即可
方法二:手动安装
- 找到你ComfyUI的安装文件夹
- 进入"custom_nodes"文件夹
- 在这里打开命令行,输入:
git clone https://github.com/cerspense/ComfyUI_cspnodes.git - 重启ComfyUI
3. 节点详细解析
3.1 TextFileLineIterator 节点 - 文本文件读取器
这个节点就像一个自动翻书机,能够从文本文件中一行一行地读取内容。想象你有一个记录了很多提示词的文本文件,这个节点可以帮你自动逐行读取。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 文件路径 | file_path | 文本 | 你的文件路径 | 告诉节点去哪里找文本文件 | 指定要读取的文本文件的完整路径 | 比如:C:\prompts\my_prompts.txt |
| 行索引 | line_index | 整数 | 0 | 告诉节点读第几行(从0开始数) | 指定要读取的行号,从0开始计数 | 0表示第一行,1表示第二行,以此类推 |
输出:
- 文本内容:返回指定行的文本内容
3.2 ImageDirIterator 节点 - 图片文件夹遍历器
这个节点就像一个智能相册管理员,能够从文件夹中按照你的要求找出图片。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 文件夹路径 | directory_path | 文本 | 你的图片文件夹路径 | 告诉节点去哪个文件夹找图片 | 指定包含图片的文件夹路径 | 比如:C:\images\my_photos |
| 文件格式 | glob_patterns | 文本 | "**/.png, **/.jpg" | 告诉节点要找什么格式的图片 | 用通配符模式指定要匹配的文件类型 | 默认找PNG和JPG格式的图片 |
| 图片索引 | image_index | 整数 | 0 | 告诉节点从第几张图片开始选 | 指定开始选择图片的索引位置 | 0表示从第一张开始 |
| 排序方式 | sort_by | 选择列表 | "date_modified" | 告诉节点按什么顺序排列图片 | 指定图片的排序方式 | 可选:修改日期、名称、大小、随机 |
| 排序顺序 | sort_order | 选择列表 | "ascending" | 告诉节点是从小到大还是从大到小 | 指定排序的顺序 | 升序或降序 |
| 批次大小 | batch_size | 整数 | 1 | 告诉节点一次选几张图片 | 指定每次处理的图片数量 | 1表示一次处理1张,可以设置更多 |
| 按批次递增 | increment_by_batch | 布尔值 | False | 告诉节点是否要跳着选图片 | 是否按批次大小递增索引 | True表示跳跃式选择 |
| 最终随机化 | randomize_final_list | 布尔值 | False | 告诉节点最后是否要打乱图片顺序 | 是否对最终选择的图片列表进行随机化 | True表示最后打乱顺序 |
输出:
- 图片列表:选中的图片
- 文件名列表:对应的文件名
3.3 VidDirIterator 节点 - 视频文件夹遍历器
这个节点就像图片遍历器的视频版本,专门用来从文件夹中找视频文件。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 文件夹路径 | directory_path | 文本 | 你的视频文件夹路径 | 告诉节点去哪个文件夹找视频 | 指定包含视频的文件夹路径 | 比如:C:\videos\my_videos |
| 文件格式 | glob_patterns | 文本 | "**/.mp4, **/.mov" | 告诉节点要找什么格式的视频 | 用通配符模式指定要匹配的视频文件类型 | 默认找MP4和MOV格式的视频 |
| 视频索引 | video_index | 整数 | 0 | 告诉节点选第几个视频 | 指定要选择的视频索引 | 0表示第一个视频 |
| 排序方式 | sort_by | 选择列表 | "date_modified" | 告诉节点按什么顺序排列视频 | 指定视频的排序方式 | 可选:修改日期、名称、大小、随机 |
| 排序顺序 | sort_order | 选择列表 | "ascending" | 告诉节点是从小到大还是从大到小 | 指定排序的顺序 | 升序或降序 |
| 最终随机化 | randomize_final_list | 布尔值 | False | 告诉节点最后是否要打乱视频顺序 | 是否对最终选择的视频列表进行随机化 | True表示最后打乱顺序 |
输出:
- 视频路径:选中的视频文件路径
3.4 Modelscopet2v 节点 - 文字生成视频魔法师
这个节点就像一个魔法师,能够根据你输入的文字描述生成对应的视频。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 提示词 | prompt | 文本 | 你的描述文字 | 告诉节点你想要什么样的视频 | 用于生成视频的文本提示 | 比如:"一只猫在草地上奔跑" |
| 负面提示词 | negative_prompt | 文本 | None | 告诉节点你不想要什么 | 用于指定不希望出现的内容 | 比如:"模糊的,低质量的" |
| 模型路径 | model_path | 文本 | "cerspense/zeroscope_v2_576w" | 告诉节点用哪个模型来生成 | 指定使用的生成模型 | 使用默认模型即可 |
| 推理步数 | num_inference_steps | 整数 | 25 | 告诉节点要花多少步来生成(步数越多质量越好但越慢) | 指定生成过程的推理步数 | 25步是平衡速度和质量的好选择 |
| 引导强度 | guidance_scale | 小数 | 9.0 | 告诉节点多严格按照你的描述生成 | 控制生成结果与提示词的匹配程度 | 9.0表示比较严格按照描述生成 |
| 随机种子 | seed | 整数 | 42 | 告诉节点用什么数字作为随机基础 | 控制随机性的种子值 | 相同种子会产生相同结果 |
| 视频宽度 | width | 整数 | 576 | 告诉节点生成多宽的视频 | 指定生成视频的宽度像素 | 576像素是标准宽度 |
| 视频高度 | height | 整数 | 320 | 告诉节点生成多高的视频 | 指定生成视频的高度像素 | 320像素是标准高度 |
| 帧数 | num_frames | 整数 | 24 | 告诉节点生成多少帧画面 | 指定生成视频的帧数 | 24帧约1秒的视频 |
输出:
- 视频帧:生成的视频帧序列
3.5 Modelscopev2v 节点 - 视频变换魔法师
这个节点就像一个视频特效师,能够根据你的描述改变现有视频的样子。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 视频帧 | video_frames | 图像 | 输入的视频帧 | 告诉节点要改变哪个视频 | 输入需要转换的视频帧 | 连接前面节点的视频输出 |
| 提示词 | prompt | 文本 | 你的描述文字 | 告诉节点你想把视频变成什么样 | 用于指导视频转换的文本提示 | 比如:"变成卡通风格" |
| 负面提示词 | negative_prompt | 文本 | None | 告诉节点你不想要什么效果 | 用于指定不希望出现的转换效果 | 比如:"不要太夸张" |
| 模型路径 | model_path | 文本 | "cerspense/zeroscope_v2_XL" | 告诉节点用哪个模型来转换 | 指定使用的转换模型 | 使用默认模型即可 |
| 转换强度 | strength | 小数 | 0.70 | 告诉节点改变的程度有多大 | 控制转换的强度 | 0.7表示中等强度的改变 |
| 推理步数 | num_inference_steps | 整数 | 25 | 告诉节点要花多少步来转换 | 指定转换过程的推理步数 | 25步是平衡速度和质量的好选择 |
| 引导强度 | guidance_scale | 小数 | 8.50 | 告诉节点多严格按照你的描述转换 | 控制转换结果与提示词的匹配程度 | 8.5表示比较严格按照描述转换 |
| 随机种子 | seed | 整数 | 42 | 告诉节点用什么数字作为随机基础 | 控制随机性的种子值 | 相同种子会产生相同结果 |
| 启用前向分块 | enable_forward_chunking | 布尔值 | False | 告诉节点是否要省内存的方式处理 | 是否启用前向分块以节省内存 | True表示省内存但可能慢一些 |
| 启用VAE切片 | enable_vae_slicing | 布尔值 | True | 告诉节点是否要用切片方式处理 | 是否启用VAE切片以节省内存 | True表示默认开启节省内存 |
输出:
- 转换后的视频帧:处理后的视频帧序列
3.6 SplitImageChannels 节点 - 颜色分离器
这个节点就像一个颜色分离器,能够把彩色图片拆分成红、绿、蓝三个单色图片。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 图像 | image | 图像 | 输入的图片 | 告诉节点要分离哪张图片的颜色 | 输入需要分离颜色通道的图像 | 连接任何图片输出 |
输出:
- 红色通道:图片的红色成分(黑白图)
- 绿色通道:图片的绿色成分(黑白图)
- 蓝色通道:图片的蓝色成分(黑白图)
3.7 RemapRange 节点 - 数值转换器
这个节点就像一个数值转换器,能够把一个范围的数值转换到另一个范围。就像把摄氏度转换成华氏度一样。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 输入值 | value | 小数 | 0.0 | 告诉节点要转换的数值 | 需要重新映射的输入值 | 比如:0.5 |
| 输入最小值 | input_min | 小数 | 0.0 | 告诉节点原来数值的最小值 | 输入范围的最小值 | 比如:0(表示原来是0-1的范围) |
| 输入最大值 | input_max | 小数 | 1.0 | 告诉节点原来数值的最大值 | 输入范围的最大值 | 比如:1(表示原来是0-1的范围) |
| 输出最小值 | output_min | 小数 | 0.0 | 告诉节点转换后的最小值 | 输出范围的最小值 | 比如:-10(表示转换后是-10到10的范围) |
| 输出最大值 | output_max | 小数 | 1.0 | 告诉节点转换后的最大值 | 输出范围的最大值 | 比如:10(表示转换后是-10到10的范围) |
| 限制范围 | clamp | 布尔值 | False | 告诉节点是否要限制输出不超过范围 | 是否将输出值限制在输出范围内 | True表示超出范围就截断 |
输出:
- 转换后的值:重新映射后的数值
3.8 ResizeByImage 节点 - 图片尺寸匹配器
这个节点就像一个裁缝,能够把一张图片改成和另一张图片一样的尺寸。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 参考图像 | reference_image | 图像 | 参考图片 | 告诉节点要参考哪张图片的尺寸 | 用作尺寸参考的图像 | 连接一张你想要的尺寸的图片 |
| 输入图像 | input_image | 图像 | 要调整的图片 | 告诉节点要调整哪张图片的尺寸 | 需要调整尺寸的图像 | 连接需要改变尺寸的图片 |
输出:
- 调整后的图像:尺寸匹配参考图像的新图片
3.9 IncrementEveryN 节点 - 步进计数器
这个节点就像一个楼梯计数器,每走N步才数一次数。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 输入值 | input_value | 整数 | 0 | 告诉节点当前是第几步 | 输入的递增整数值 | 比如:当前是第15步 |
| 步长 | step_size | 整数 | 1 | 告诉节点每几步才计数一次 | 输入递增多少才让输出递增1 | 比如:6表示每6步才计数1次 |
| 偏移量 | offset | 整数 | 0 | 告诉节点要在最终结果上加多少 | 添加到最终输出的偏移值 | 比如:10表示最终结果要加10 |
输出:
- 计数值:按步长递增的输出值
3.10 DepthToNormalMap 节点 - 深度图立体化器
这个节点就像一个3D魔法师,能够把平面的深度图转换成有立体感的法线图。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 深度图 | depth_maps | 图像 | 深度图片 | 告诉节点要转换哪张深度图 | 输入需要转换的深度图像 | 连接黑白的深度图 |
| 法线强度 | normal_intensity | 小数 | 1.0 | 告诉节点立体效果要多强 | 控制法线图效果的强度 | 1.0是标准强度,越大越明显 |
| 翻转X轴 | flip_x | 布尔值 | True | 告诉节点是否要左右翻转效果 | 是否翻转法线图的X轴 | True表示翻转X轴 |
| 翻转Y轴 | flip_y | 布尔值 | False | 告诉节点是否要上下翻转效果 | 是否翻转法线图的Y轴 | False表示不翻转Y轴 |
| 深度缩放 | depth_scale | 小数 | 1.0 | 告诉节点深度变化要多明显 | 深度值的缩放因子 | 1.0是标准缩放,可以调整深度范围 |
输出:
- 法线图:转换后的法线图像
4. 使用技巧和建议
4.1 文件处理技巧
- 使用TextFileLineIterator时,确保文本文件编码是UTF-8,避免中文乱码
- ImageDirIterator和VidDirIterator支持多级文件夹搜索,使用"**/"前缀可以搜索所有子文件夹
- 批量处理时建议先从小批次开始测试,确认效果后再增加批次大小
4.2 视频生成技巧
- Modelscopet2v生成视频时,提示词要具体明确,避免太抽象的描述
- 视频转换时(Modelscopev2v),strength参数很重要:0.3-0.5适合轻微调整,0.7-0.9适合大幅改变
- 如果显存不足,可以开启enable_vae_slicing节省内存
4.3 图像处理技巧
- SplitImageChannels常用于制作特殊效果,比如提取特定颜色信息
- DepthToNormalMap转换时,先从默认参数开始,再根据效果调整强度
- ResizeByImage保持宽高比,适合批量统一图片尺寸
4.4 数值处理技巧
- RemapRange常用于控制动画参数,比如把0-1的值映射到-10到10的范围
- IncrementEveryN适合制作循环动画,比如每6帧切换一次效果
5. 常见问题解答
5.1 安装问题
Q:安装后找不到节点?
A:重启ComfyUI,如果还是找不到,检查custom_nodes文件夹里是否有ComfyUI_cspnodes文件夹。
Q:节点显示错误?
A:可能缺少依赖,在ComfyUI的控制台查看错误信息,通常需要安装额外的Python包。
5.2 使用问题
Q:文本文件读取乱码?
A:确保文本文件是UTF-8编码,或者在文件开头添加BOM标记。
Q:视频生成太慢?
A:减少推理步数(比如从25减到15),或者开启内存优化选项。
Q:深度图转换效果不好?
A:调整normal_intensity参数,高分辨率图片用较小值(0.5-0.8),低分辨率用较大值(1.5-2.0)。
5.3 性能问题
Q:处理大量图片时卡顿?
A:减少batch_size,或者分批处理。
Q:显存不足?
A:在视频生成节点中开启enable_vae_slicing和enable_forward_chunking。
6. 高级应用场景
6.1 批量内容生成
结合TextFileLineIterator和ImageDirIterator,可以实现:
- 批量读取提示词文件,生成大量不同内容的图片
- 自动从图片库中选择素材进行二次创作
6.2 视频工作流
使用Modelscopet2v和Modelscopev2v可以构建完整的视频制作流程:
- 先用文字生成基础视频
- 再用描述词对视频进行风格转换
- 最后用其他节点进行细节调整
6.3 循环动画制作
利用IncrementEveryN和RemapRange:
- 创建循环变化的参数
- 制作无缝循环的动画效果
- 控制动画的节奏和强度
6.4 特效制作
结合SplitImageChannels和DepthToNormalMap:
- 制作特殊的颜色通道效果
- 创建立体感强的材质贴图
- 制作游戏和动画中的特效素材
这个插件的10个节点各有特色,组合使用可以创造出非常丰富的效果。建议从简单的单个节点开始练习,逐步掌握后再尝试复杂的组合工作流。