ComfyUI 插件教程:ComfyUI Overly Complicated Sampling(超级复杂采样器)
1. 插件简介
ComfyUI Overly Complicated Sampling 是一个实验性的高级采样插件,来自 GitHub 仓库:https://github.com/blepping/comfyui_overly_complicated_sampling。
这个插件有什么用?
想象你在调制一杯完美的咖啡,普通的咖啡机只能给你一种冲泡方式。而这个插件就像是一台超级复杂的咖啡机,它提供了几十种不同的冲泡方法,让你可以:
- 在同一次生图过程中使用多种不同的采样器(就像先用意式浓缩,再用美式稀释)
- 精确控制每一步的生图过程(就像控制水温、时间、压力)
- 添加各种特殊效果,比如重启采样、噪声混合等
能带来什么效果?
- 更精细的图像质量控制
- 更多样的生图风格选择
- 更强的创意可能性
- 但同时也更复杂,需要更多时间学习
2. 如何安装
通用安装方法
- 打开 ComfyUI Manager(管理器)
- 在搜索框中输入
comfyui_overly_complicated_sampling - 找到插件后点击安装
- 重启 ComfyUI
- 刷新浏览器页面
或者手动安装:
- 在 ComfyUI 的
custom_nodes文件夹中打开命令行 - 输入:
git clone https://github.com/blepping/comfyui_overly_complicated_sampling.git - 重启 ComfyUI
3. 节点详解
3.1 OCS Sampler(主采样器)节点
这个节点是干嘛的?
这就像是整个系统的大脑,负责协调所有的采样工作。就像一个指挥官,告诉其他节点什么时候该做什么事情。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Groups | groups | 连接OCS Group | 必须连接 | 连接分组节点,告诉采样器用哪些规则 | 连接OCS Group节点链 | 把OCS Group节点的输出连到这里 |
| Restart Custom Noise | restart_custom_noise | 自定义噪声 | 可选 | 重启采样时用的特殊噪声类型 | 重启采样使用的自定义噪声 | 连接自定义噪声节点 |
| Params | params | 参数输入 | 可选 | 连接额外的参数设置 | 连接OCS Param节点 | 可以连接OCS Param节点添加更多设置 |
| Params Text | params_text | YAML文本 | 空或自定义 | 用文本方式设置各种参数 | YAML格式的参数配置 | 输入类似 s_noise: 1.0 的配置 |
3.2 OCS Group(分组)节点
这个节点是干嘛的?
想象你要做一道复杂的菜,需要分几个步骤,每个步骤用不同的方法。这个节点就是定义每个"烹饪阶段"的规则,比如"前3步用小火,后面的步骤用大火"。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Substeps | substeps | 连接OCS Substeps | 必须连接 | 连接具体的采样步骤设置 | 连接OCS Substeps节点 | 把OCS Substeps节点输出连到这里 |
| Merge Method | merge_method | simple/divide/overshoot等 | simple | 选择怎么合并多个子步骤的结果 | 子步骤合并策略 | simple最简单,divide会创建线性计划 |
| Time Mode | time_mode | step/step_pct/sigma | step | 选择时间匹配方式 | 时间匹配模式 | step按步数,step_pct按百分比 |
| Time Start | time_start | 数字 | 0 | 这个组从第几步开始生效 | 匹配开始时间 | 设置0表示从第一步开始 |
| Time End | time_end | 数字 | 999 | 这个组到第几步结束 | 匹配结束时间 | 设置999表示到最后一步 |
| Groups | groups | 连接下个OCS Group | 可选 | 连接下一个分组节点 | 连接下一个OCS Group | 可以串联多个分组 |
| Restart Custom Noise | restart_custom_noise | 自定义噪声 | 可选 | 重启时用的特殊噪声 | 重启采样噪声 | 连接噪声节点 |
| Custom Noise | custom_noise | 自定义噪声 | 可选 | 这个组专用的噪声类型 | 分组专用噪声 | 连接特殊噪声节点 |
| Params | params | 参数输入 | 可选 | 连接额外参数 | 连接OCS Param节点 | 添加更多设置 |
| Params Text | params_text | YAML文本 | 空或自定义 | 用文本设置这个组的参数 | YAML格式参数 | 设置如 eta: 1.0 等 |
3.3 OCS Substeps(子步骤)节点
这个节点是干嘛的?
这就像是具体的"操作手册",告诉系统用什么方法、多少步骤来生成图像。就像烹饪中的"用中火炒5分钟,然后转小火焖10分钟"。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Substeps | substeps | 数字 | 1 | 每个主步骤分成几个小步骤 | 子步骤数量 | 设置4就是把1步分成4小步 |
| Step Method | step_method | euler/rk4/heun等 | euler | 选择采样算法 | 采样方法 | euler最快,rk4更精确但更慢 |
| Next | next | 连接下个OCS Substeps | 可选 | 连接下一个子步骤节点 | 连接下一个OCS Substeps | 可以串联多个子步骤设置 |
| Custom Noise | custom_noise | 自定义噪声 | 可选 | 这个子步骤专用的噪声 | 子步骤专用噪声 | 连接特殊噪声节点 |
| Params | params | 参数输入 | 可选 | 连接额外参数 | 连接OCS Param节点 | 添加更多设置 |
| Params Text | params_text | YAML文本 | 空或自定义 | 用文本设置子步骤参数 | YAML格式参数 | 设置如 eta: 1.0 等 |
3.4 OCS Param(参数)节点
这个节点是干嘛的?
这就像是一个"调料盒",让你可以添加各种特殊的设置,比如自定义噪声类型。就像烹饪时需要特殊的调料一样。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Key | key | 文本 | 根据需要 | 参数的名字 | 参数键名 | 比如输入 custom_noise |
| Value | value | 对应类型输入 | 根据Key | 参数的具体值 | 参数值 | 连接对应类型的节点 |
| Params Opt | params_opt | 连接其他OCS Param | 可选 | 连接更多参数节点 | 连接其他参数节点 | 可以串联多个参数 |
| Params Text | params_text | YAML文本 | 空或自定义 | 用文本设置参数重命名等 | YAML格式配置 | 设置如 rename: test |
3.5 OCS MultiParam(多参数)节点
这个节点是干嘛的?
就像是一个"多格调料盒",可以同时设置多个不同的参数,比单个参数节点更方便。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Key 1 | key_1 | 文本 | 根据需要 | 第一个参数的名字 | 第一个参数键名 | 比如 custom_noise |
| Value 1 | value_1 | 对应类型输入 | 根据Key 1 | 第一个参数的值 | 第一个参数值 | 连接对应节点 |
| Key 2 | key_2 | 文本 | 根据需要 | 第二个参数的名字 | 第二个参数键名 | 比如 restart_custom_noise |
| Value 2 | value_2 | 对应类型输入 | 根据Key 2 | 第二个参数的值 | 第二个参数值 | 连接对应节点 |
| (依此类推到Key 8) | (key_3到key_8) | 文本 | 根据需要 | 更多参数的名字 | 更多参数键名 | 可以设置最多8个参数 |
| Params Opt | params_opt | 连接其他参数节点 | 可选 | 连接更多参数节点 | 连接其他参数节点 | 可以串联更多参数 |
| Params Text | params_text | YAML文本 | 空或自定义 | 用文本设置参数重命名等 | YAML格式配置 | 设置参数重命名规则 |
3.6 OCS SimpleRestartSchedule(简单重启计划)节点
这个节点是干嘛的?
想象你在画画时,画错了可以擦掉重画。这个节点就是制定"重画计划"的,告诉系统什么时候回到之前的步骤重新开始。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Start Step | start_step | 数字 | 0 | 从第几步开始执行重启计划 | 重启计划开始步骤 | 设置3表示从第4步开始(从0计数) |
| Sigmas | sigmas | 连接Sigma计划 | 必须连接 | 连接标准的噪声计划 | 连接SIGMAS输出 | 连接KSampler等节点的sigma输出 |
| Params Text | params_text | YAML/JSON列表 | 重启规则 | 用文本设置重启规则 | 重启计划配置 | 如 [[4, -3], [2, -1]] 表示4步后回退3步 |
3.7 OCS ModelSetMaxSigma(模型设置最大噪声)节点
这个节点是干嘛的?
这就像是给图像生成过程设置一个"噪声上限",防止噪声太大导致图像质量下降。就像调音响时设置最大音量一样。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Model | model | 连接模型 | 必须连接 | 连接要设置的模型 | 连接MODEL输出 | 连接CheckpointLoaderSimple等的model输出 |
| Max Sigma | max_sigma | 数字 | 1000.0 | 设置最大噪声值 | 最大噪声级别 | 设置14.6是常用值 |
3.8 OCSNoise PerlinSimple(简单柏林噪声)节点
这个节点是干嘛的?
这就像是一个"纹理生成器",可以创造各种自然的噪声纹理,比如云朵、木纹、水波等。就像在图像上添加各种自然的质感。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Seed | seed | 数字 | 随机 | 噪声的种子值,控制随机性 | 随机种子 | 相同种子产生相同纹理 |
| Depth | depth | 数字 | 0 | 是否生成3D噪声 | 3D噪声深度 | 设置0是2D,大于0是3D |
| Detail Level | detail_level | 数字 | 1.0 | 噪声的细节程度 | 细节级别 | 数值越高细节越多 |
| Octaves | octaves | 数字 | 4 | 噪声的层数,影响复杂度 | 噪声层数 | 层数越多越复杂,但更慢 |
| Persistence | persistence | 数字或列表 | 0.5 | 控制噪声的粗糙程度 | 噪声粗糙度 | 低值更平滑,高值更像随机噪声 |
| Lacunarity | lacunarity | 数字或列表 | 2.0 | 控制频率倍数 | 频率倍数 | 影响不同层次的噪声比例 |
| Res Height | res_height | 数字或列表 | 4.0 | 垂直方向的噪声周期数 | 垂直分辨率 | 控制垂直方向的噪声密度 |
| Res Width | res_width | 数字或列表 | 4.0 | 水平方向的噪声周期数 | 水平分辨率 | 控制水平方向的噪声密度 |
| Break Pattern | break_pattern | 0.0-1.0 | 0.9 | 打破柏林噪声的规律性 | 模式破坏强度 | 0.9以上推荐,避免色彩斑点 |
3.9 OCSNoise PerlinAdvanced(高级柏林噪声)节点
这个节点是干嘛的?
这是简单柏林噪声的升级版,就像从普通画笔升级到专业绘画套装,提供更多精细的控制选项。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| Seed | seed | 数字 | 随机 | 噪声的种子值 | 随机种子 | 控制纹理的随机性 |
| Depth | depth | 数字 | 0 | 3D噪声的深度 | 3D噪声深度 | 0是2D,大于0是3D |
| Detail Level | detail_level | 数字 | 1.0 | 细节级别 | 细节程度 | 控制纹理细节丰富度 |
| Octaves | octaves | 数字 | 4 | 噪声层数 | 噪声层数 | 更多层数=更复杂纹理 |
| Persistence | persistence | 数字或列表 | 0.5 | 各层噪声的粗糙度 | 噪声粗糙度 | 可以为每层设置不同值 |
| Lacunarity Height | lacunarity_height | 数字或列表 | 2.0 | 垂直方向频率倍数 | 垂直频率倍数 | 控制垂直方向的噪声缩放 |
| Lacunarity Width | lacunarity_width | 数字或列表 | 2.0 | 水平方向频率倍数 | 水平频率倍数 | 控制水平方向的噪声缩放 |
| Lacunarity Depth | lacunarity_depth | 数字或列表 | 2.0 | 深度方向频率倍数 | 深度频率倍数 | 3D噪声的深度缩放 |
| Res Height | res_height | 数字或列表 | 4.0 | 垂直分辨率 | 垂直噪声周期 | 控制垂直方向纹理密度 |
| Res Width | res_width | 数字或列表 | 4.0 | 水平分辨率 | 水平噪声周期 | 控制水平方向纹理密度 |
| Res Depth | res_depth | 数字或列表 | 4.0 | 深度分辨率 | 深度噪声周期 | 3D噪声的深度纹理密度 |
| Break Pattern | break_pattern | 0.0-1.0 | 0.9 | 模式破坏强度 | 模式破坏程度 | 避免规律性过强 |
| Initial Depth | initial_depth | 数字 | 0 | 3D噪声的起始深度 | 起始深度索引 | 3D噪声从哪个深度开始 |
| Wrap Depth | wrap_depth | 数字 | 0 | 深度循环设置 | 深度循环索引 | 0禁用,其他值启用循环 |
| Max Depth | max_depth | 数字 | -1 | 最大深度限制 | 最大深度值 | -1无限制,其他值设置上限 |
| Tileable Height | tileable_height | 布尔值 | false | 垂直方向是否可平铺 | 垂直平铺设置 | true可以无缝平铺 |
| Tileable Width | tileable_width | 布尔值 | false | 水平方向是否可平铺 | 水平平铺设置 | true可以无缝平铺 |
| Tileable Depth | tileable_depth | 布尔值 | false | 深度方向是否可平铺 | 深度平铺设置 | 3D噪声的深度平铺 |
| Blend | blend | 混合模式 | LERP | 噪声混合方式 | 混合模式 | LERP是线性混合 |
| Pattern Break Blend | pattern_break_blend | 混合模式 | LERP | 模式破坏的混合方式 | 破坏模式混合 | 控制如何混合破坏后的噪声 |
| Depth Over Channels | depth_over_channels | 布尔值 | false | 深度是否覆盖通道 | 深度通道模式 | 影响3D噪声的通道处理 |
| Pad Height | pad_height | 数字 | 0 | 垂直方向填充 | 垂直填充大小 | 生成时的边缘填充 |
| Pad Width | pad_width | 数字 | 0 | 水平方向填充 | 水平填充大小 | 生成时的边缘填充 |
| Pad Depth | pad_depth | 数字 | 0 | 深度方向填充 | 深度填充大小 | 3D噪声的深度填充 |
| Initial Amplitude | initial_amplitude | 数字 | 1.0 | 初始振幅 | 第一层噪声强度 | 控制第一层噪声的强度 |
| Initial Frequency Height | initial_frequency_height | 数字 | 1.0 | 垂直初始频率 | 垂直方向初始频率 | 第一层噪声的垂直频率 |
| Initial Frequency Width | initial_frequency_width | 数字 | 1.0 | 水平初始频率 | 水平方向初始频率 | 第一层噪声的水平频率 |
| Initial Frequency Depth | initial_frequency_depth | 数字 | 1.0 | 深度初始频率 | 深度方向初始频率 | 3D噪声的深度频率 |
| Normalize | normalize | 布尔值 | true | 是否标准化输出 | 噪声标准化 | 建议保持true |
| Device | device | cpu/cuda | cuda | 计算设备选择 | 计算设备 | cuda更快但结果可能不同 |
3.10 OCSNoise to SONAR_CUSTOM_NOISE(噪声转换)节点
这个节点是干嘛的?
这就像是一个"转换器",把这个插件生成的特殊噪声转换成其他插件能识别的格式。就像把不同品牌的充电器转换成通用接口。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| OCS Noise | ocs_noise | 连接OCS噪声 | 必须连接 | 连接OCS噪声节点的输出 | 连接OCS噪声输出 | 连接柏林噪声节点的输出 |
4. 使用技巧和建议
4.1 新手入门建议
- 从简单开始:先用基础的 OCS Sampler + OCS Group + OCS Substeps 组合
- 逐步添加功能:熟悉基本用法后再添加自定义噪声和重启采样
- 保存工作流:每次成功的配置都要保存,方便以后使用
4.2 性能优化技巧
- 子步骤不要设置太多:substeps设置过高会大幅增加生成时间
- 选择合适的采样器:euler最快,rk4精度高但慢4倍
- 合理使用3D噪声:3D噪声很耗资源,没必要不要开启
4.3 参数调整建议
- ETA参数:控制"祖先性",1.0是完全随机,0.0是完全确定
- S_NOISE参数:控制噪声强度,通常保持1.0即可
- 柏林噪声:break_pattern建议设置0.9以上,避免产生彩色斑点
4.4 常用组合推荐
- 高质量组合:OCS Sampler + OCS Group(rk4) + 柏林噪声
- 快速预览组合:OCS Sampler + OCS Group(euler) + 基础设置
- 创意实验组合:OCS Sampler + 多个OCS Group串联 + 重启采样
5. 常见问题解答
5.1 安装相关问题
Q:安装后找不到节点?
A:确保重启了ComfyUI并刷新了浏览器。节点在"sampling"分类下。
Q:提示缺少依赖?
A:这个插件需要一些Python库,建议同时安装ComfyUI-bleh和ComfyUI-sonar插件。
5.2 使用相关问题
Q:生成速度太慢?
A:检查substeps设置是否过高,某些采样器(如rk4)比euler慢很多。
Q:出现错误信息?
A:确保所有必要的连接都正确,特别是OCS Sampler必须连接OCS Group。
Q:图像质量没有改善?
A:这个插件主要用于实验和创意,不是所有情况都能改善质量。建议先用默认设置测试。
5.3 参数设置问题
Q:YAML格式怎么写?
A:基本格式是参数名: 值,比如eta: 1.0。注意冒号后面要有空格。
Q:柏林噪声参数太复杂?
A:新手建议只修改seed、octaves和break_pattern,其他保持默认。
6. 高级功能补充
6.1 表达式系统
插件支持动态表达式,可以在采样过程中根据步骤动态调整参数。这就像是给采样器装了个"大脑",能根据情况自动调整策略。
6.2 重启采样
重启采样可以让生成过程"回头重来",有时能产生更好的结果。就像画画时觉得画错了可以退回几步重新开始。