ComfyUI WFC Like 插件完全保姆级教程
1. 插件简介
ComfyUI WFC Like 是一个基于波函数塌陷算法(Wave Function Collapse)的图像生成插件。插件地址:https://github.com/bmad4ever/comfyui_wfc_like
这个插件就像是一个"智能拼图机器人",它能学习你给它的图片里的瓷砖拼接规律,然后按照这些规律生成新的、更大的图片。就好比你给机器人看了一些房子的墙面瓷砖,它就能学会如何铺设更大面积的墙面,保证每块瓷砖都和相邻的瓷砖搭配得很好。
能带来什么效果?
- 把小的瓷砖样本图片扩展成大的完整图片
- 生成具有相同风格和规律的新图案
- 制作游戏地图、纹理贴图等
- 实现图片的智能补全和扩展
2. 如何安装
方法一:使用 ComfyUI Manager(推荐)
- 在 ComfyUI 界面点击"Manager"按钮
- 点击"Install Custom Nodes"
- 搜索"wfc_like"
- 找到"comfyui_wfc_like"点击安装
- 重启 ComfyUI
方法二:手动安装
- 打开 ComfyUI 的安装目录
- 进入
custom_nodes文件夹 - 下载插件文件到这个文件夹
- 安装依赖包(需要 py_search)
- 重启 ComfyUI
3. 节点详细解析
3.1 Sample (WFC) 节点 - 样本学习机
这个节点就像一个"图案分析师",它会仔细观察你给它的图片,学习里面每个小瓷砖的排列规律,然后把这些规律记录下来供后面的节点使用。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| img_batch | img_batch | 图像输入 | 必填 | 就像给机器人看的"教学图片",告诉它什么样的瓷砖组合是对的 | 输入的图像批次,用于提取瓷砖类型和约束关系 | 连接一张包含重复瓷砖图案的图片 |
| tile_width | tile_width | 数字 | 根据实际瓷砖宽度 | 告诉机器人每个小瓷砖有多宽(像素) | 单个瓷砖的像素宽度 | 如果瓷砖是16像素宽,就填16 |
| tile_height | tile_height | 数字 | 根据实际瓷砖高度 | 告诉机器人每个小瓷砖有多高(像素) | 单个瓷砖的像素高度 | 如果瓷砖是16像素高,就填16 |
| output_tiles | output_tiles | 布尔值 | True | 开关按钮,决定是否要输出找到的所有不同瓷砖类型 | 是否通过unique_tiles输出端输出所有唯一瓷砖 | 设为True能看到机器人找到了哪些不同的瓷砖 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| sample | 传给生成节点的"规律数据包" | 包含了瓷砖类型和排列规律的信息 |
| unique_tiles | 所有不同瓷砖的集合 | 就像一个"瓷砖图鉴",显示找到的所有不同瓷砖 |
3.2 Generate (WFC) 节点 - 智能生成机
这个节点就像一个"拼图大师",它根据样本节点学到的规律,在空白画布上智能地放置瓷砖,生成新的图案。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| sample | sample | 数据输入 | 必填 | 从样本节点传来的"规律数据包" | 包含瓷砖约束和频率信息的样本数据 | 连接Sample节点的sample输出 |
| starting_state | starting_state | 状态输入 | 必填 | 告诉机器人从哪个"半成品"开始拼图 | 初始状态,可以是空白或部分完成的状态 | 通常连接EmptyState节点创建空白画布 |
| seed | seed | 数字 | 任意整数 | 就像"随机数种子",同样的数字会产生同样的结果 | 控制随机性的种子值,保证结果可重现 | 用123、456等固定数字保证每次结果一样 |
| max_freq_adjust | max_freq_adjust | 0-1之间 | 0.5 | 控制要不要严格按照原图的瓷砖出现频率来生成 | 频率调整的最大权重,0表示忽略频率,1表示严格按频率 | 0.5在速度和准确性之间平衡 |
| use_8_cardinals | use_8_cardinals | 布尔值 | True | 开关按钮,决定是否要考虑对角线相邻的瓷砖 | 是否使用8个方向的邻接约束(包括对角线) | True考虑所有方向,False只考虑上下左右 |
| relax_validation | relax_validation | 布尔值 | False | 开关按钮,决定是否要放松检查规则(可能更快但不太准确) | 是否放松验证,允许一些无效的瓷砖组合 | False保证质量,True提高速度 |
| plateau_check_interval | plateau_check_interval | 数字 | -1 | 控制"放弃"检查的间隔,避免机器人卡太久 | 检查生成停滞的间隔,-1为自动设置 | -1让机器人自己决定何时停止尝试 |
可选输入:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| custom_temperature_config | custom_temperature_config | 配置输入 | 可选 | 高级设置,控制机器人在遇到困难时的"决策温度" | 温度配置,影响随机性和频率调整权重 | 不填使用默认设置即可 |
| custom_node_value_config | custom_node_value_config | 配置输入 | 可选 | 高级设置,控制机器人如何给不同选择打分 | 节点值配置,影响搜索优先级 | 不填使用默认设置即可 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| state | 生成的状态结果 | 包含瓷砖位置信息的"拼图结果",需要用Decode节点转换成图片 |
3.3 Decode (WFC) 节点 - 图像转换器
这个节点就像一个"照相机",它把生成节点产生的抽象"拼图结果"转换成我们能看到的图片。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| state | state | 状态输入 | 必填 | 从生成节点传来的"拼图结果"数据 | 包含瓷砖位置信息的状态矩阵 | 连接Generate节点的state输出 |
| sample | sample | 数据输入 | 必填 | 告诉转换器每个编号对应什么瓷砖图案 | 包含瓷砖图像数据的样本,用于将数字ID转换为实际图像 | 连接Sample节点的sample输出 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| IMAGE | 最终生成的图片 | 可以直接看到的完整图片 |
| MASK | 遮罩图像 | 黑白图,显示哪些地方有瓷砖,哪些地方是空白 |
3.4 Encode (WFC) 节点 - 图像编码器
这个节点就像一个"逆向工程师",它能把图片重新分解成瓷砖编号,方便进一步处理。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| image | image | 图像输入 | 必填 | 要重新分解的图片 | 需要编码为状态的图像 | 连接任何图片输入 |
| sample | sample | 数据输入 | 必填 | 告诉编码器如何识别不同的瓷砖 | 包含瓷砖类型信息的样本数据 | 连接Sample节点的sample输出 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| state | 编码后的状态 | 图片被重新分解成的瓷砖位置信息 |
3.5 EmptyState (WFC) 节点 - 空白画布生成器
这个节点就像一个"画布准备工",它创建指定大小的空白画布,为生成节点提供起始状态。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| width | width | 数字 | 根据需要 | 告诉机器人画布要有多少个瓷砖宽 | 状态矩阵的宽度(以瓷砖为单位) | 想要32个瓷砖宽就填32 |
| height | height | 数字 | 根据需要 | 告诉机器人画布要有多少个瓷砖高 | 状态矩阵的高度(以瓷砖为单位) | 想要24个瓷砖高就填24 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| state | 空白状态 | 全空的画布状态,等待被填充 |
3.6 SetTiles (WFC) 节点 - 瓷砖设置器
这个节点就像一个"橡皮擦"或"画笔",它能在现有的状态上擦除特定类型的瓷砖,或者把特定瓷砖变成空白。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| state | state | 状态输入 | 必填 | 要修改的"拼图状态" | 需要处理的状态矩阵 | 连接任何状态输出 |
| tiles_batch | tiles_batch | 图像输入 | 必填 | 要处理的瓷砖类型(图片形式) | 包含要设置为空的瓷砖类型的图像批次 | 连接包含特定瓷砖的图像 |
| reverse | reverse | 布尔值 | False | 开关按钮,决定是"擦除指定瓷砖"还是"只保留指定瓷砖" | 是否反转操作:False擦除指定瓷砖,True保留指定瓷砖 | False会把指定瓷砖变空白,True会把其他瓷砖变空白 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| state | 修改后的状态 | 经过擦除或保留操作后的新状态 |
3.7 GenerateParallel (WFC) 节点 - 并行生成器
这个节点就像一个"多线程工厂",它可以同时运行多个生成任务,提高工作效率。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| sample | sample | 数据输入 | 必填 | 从样本节点传来的"规律数据包" | 包含瓷砖约束和频率信息的样本数据 | 连接Sample节点的sample输出 |
| starting_state | starting_state | 状态输入 | 必填 | 告诉机器人从哪个"半成品"开始拼图 | 初始状态,可以是空白或部分完成的状态 | 通常连接EmptyState节点创建空白画布 |
| seed | seed | 数字 | 任意整数 | 就像"随机数种子",同样的数字会产生同样的结果 | 控制随机性的种子值,保证结果可重现 | 用123、456等固定数字保证每次结果一样 |
| max_freq_adjust | max_freq_adjust | 0-1之间 | 0.5 | 控制要不要严格按照原图的瓷砖出现频率来生成 | 频率调整的最大权重,0表示忽略频率,1表示严格按频率 | 0.5在速度和准确性之间平衡 |
| use_8_cardinals | use_8_cardinals | 布尔值 | True | 开关按钮,决定是否要考虑对角线相邻的瓷砖 | 是否使用8个方向的邻接约束(包括对角线) | True考虑所有方向,False只考虑上下左右 |
| relax_validation | relax_validation | 布尔值 | False | 开关按钮,决定是否要放松检查规则(可能更快但不太准确) | 是否放松验证,允许一些无效的瓷砖组合 | False保证质量,True提高速度 |
| plateau_check_interval | plateau_check_interval | 数字 | -1 | 控制"放弃"检查的间隔,避免机器人卡太久 | 检查生成停滞的间隔,-1为自动设置 | -1让机器人自己决定何时停止尝试 |
| max_parallel_tasks | max_parallel_tasks | 数字 | 4 | 控制同时运行多少个生成任务 | 最大并行任务数量 | 根据电脑性能调整,4-8个比较合适 |
可选输入:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| custom_temperature_config | custom_temperature_config | 配置输入 | 可选 | 高级设置,控制机器人在遇到困难时的"决策温度" | 温度配置,影响随机性和频率调整权重 | 不填使用默认设置即可 |
| custom_node_value_config | custom_node_value_config | 配置输入 | 可选 | 高级设置,控制机器人如何给不同选择打分 | 节点值配置,影响搜索优先级 | 不填使用默认设置即可 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| state | 生成的状态结果 | 包含瓷砖位置信息的"拼图结果",需要用Decode节点转换成图片 |
3.8 Custom Temperature 节点 - 温度配置器
这个节点就像一个"情绪调节器",它控制生成过程中机器人的"耐心程度",当遇到困难时是否要更加随机地尝试。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| initial_temperature | initial_temperature | 数字 | 0.5 | 机器人开始时的"冷静程度" | 初始温度值,影响随机性权重 | 0.5比较平衡,越大越随机 |
| min_temperature | min_temperature | 数字 | 0.1 | 机器人最冷静的时候(最理性) | 最低温度限制 | 0.1保证始终有一点随机性 |
| max_temperature | max_temperature | 数字 | 1.0 | 机器人最"冲动"的时候(最随机) | 最高温度限制 | 1.0允许完全随机选择 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| config | 温度配置 | 传给Generate节点的温度设置 |
3.9 Custom Node Value 节点 - 评分配置器
这个节点就像一个"评分标准设定器",它决定机器人在选择瓷砖时如何给不同选项打分。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| entropy_weight | entropy_weight | 数字 | 1.0 | 控制"信息量"在打分中的重要性 | 熵权重,影响选择的确定性 | 1.0是标准值,越大越倾向于选择确定性高的位置 |
| frequency_weight | frequency_weight | 数字 | 1.0 | 控制"频率匹配"在打分中的重要性 | 频率权重,影响对原始频率的遵循程度 | 1.0是标准值,越大越严格按照原图频率 |
| temperature_weight | temperature_weight | 数字 | 0.0 | 控制"温度随机性"在打分中的重要性 | 温度权重,影响随机性的作用程度 | 0.0表示不考虑温度影响 |
输出接口:
| 输出名 | 用途 | 通俗解释 |
|---|---|---|
| config | 评分配置 | 传给Generate节点的评分设置 |
4. 使用技巧和建议
基础使用流程
- 准备素材:找一张包含重复瓷砖图案的图片
- 设置Sample节点:设置正确的瓷砖尺寸(tile_width和tile_height)
- 创建画布:用EmptyState节点创建空白画布
- 开始生成:连接Generate节点进行生成
- 转换图片:用Decode节点将结果转换成图片
优化技巧
- 瓷砖尺寸要准确:错误的瓷砖尺寸会导致学习到错误的规律
- 种子值固定:用固定的seed值可以获得可重现的结果
- 合理设置频率调整:max_freq_adjust设为0.5通常效果最好
- 根据需要调整验证:简单图案可以开启relax_validation提高速度
- 并行生成节约时间:需要多个结果时使用GenerateParallel节点
常见应用场景
- 游戏地图生成:用地形瓷砖生成无限大的游戏地图
- 纹理扩展:将小的纹理样本扩展成大的纹理
- 图案补全:修复破损的图案或填充缺失部分
- 艺术创作:基于现有图案创作新的艺术作品
5. 常见问题解答
Q:为什么生成的图片看起来乱七八糟?
A:可能是瓷砖尺寸设置错误。检查tile_width和tile_height是否与实际瓷砖尺寸匹配。
Q:生成速度很慢怎么办?
A:可以尝试开启relax_validation,或者降低max_freq_adjust的值。
Q:生成的图片有黑色区域?
A:黑色区域表示未能生成的部分,可能是约束条件太严格。尝试调整参数或使用不同的种子值。
Q:如何控制生成结果的多样性?
A:使用不同的seed值获得不同结果,或者调整Custom Temperature节点的参数。
Q:可以处理彩色图片吗?
A:可以,插件支持任何颜色的图片,只要瓷砖尺寸设置正确。
Q:如何处理不规则的瓷砖?
A:插件主要适用于规则的矩形瓷砖,不规则形状可能需要预处理。
6. 高级应用
分层生成
可以先用一个样本生成大致结构,然后用SetTiles节点清空部分区域,再用另一个样本进行细节填充。
遮罩控制
结合Decode节点输出的mask,可以实现精确的区域控制和后处理。
批量处理
使用GenerateParallel节点可以同时生成多个不同的结果,提高工作效率。
与其他插件结合
可以将WFC生成的结果作为其他AI绘画插件的输入,实现更复杂的创作流程。
这个插件为ComfyUI带来了强大的程序化生成能力,特别适合需要保持一致性和规律性的图像生成任务。通过合理的参数调整和节点组合,可以创造出令人惊艳的生成效果。