当前位置: 首页 > java >正文

【ComfyUI学习笔记04】案例学习:局部重绘 - 上

【ComfyUI学习笔记04】案例学习:局部重绘 - 上

  • 前言
  • 局部重绘的通识介绍
  • 蒙版 Mask的基本认识
  • VAE Encode for Inpainting 工作流
    • 工作流解读
    • 关键节点
    • 案例演示

前言

大多时候,我们会对AI生成的图片感到整体的满意,但觉得其中的一些细节尚需修改,这要怎么做呢?

本节讲述了ComfyUI中实现对图片进行局部重绘的2个工作流及其核心节点 VAE Encode for Inpainting 应用讲解,并涉及对蒙版的基本认识和编辑操作,下一节将额外补充蒙版 Mask 的相关知识和编辑方式。

本系列博客不涉及过多底层原理,若有纰漏,万望海涵

【往期传送门】

ComfyUI学习笔记01:下载安装 | 运行第一个工作流 | 学习思路
ComfyUI学习笔记02:工作区的整理与注释办法 | 2个节点包推荐
ComfyUI学习笔记03:案例学习:图片放大的3个基本工作流

局部重绘的通识介绍

一句话概括,局部重绘 inpainting 是利用蒙版 Mask 来有针对性地修改画面内容做法的统称。根据官方手册对 Image Upscaling1 的介绍:

这就像让一位艺术家(AI模型)绘制一幅画,但我们对具体细节仍不满意。我们需要告诉艺术家需要调整的区域(遮罩),然后让其根据我们的要求重新绘制(填充)。

局部重绘是 图生图Img2Img 的一种重要应用,常用于图片的局部修改,或者固定主体后进行画风调整。

在WebUI中,局部重绘被称译作蒙版模式,对蒙版区域的处理主要有填充、原版,潜空间噪声和空白潜空间4种:

  • 填充 Fill:一般情况下会得到一个“色块”,它的色彩数值来自蒙版区域周围的像素颜色和纹理

  • 原版 Original:保留蒙版区域原始图像的内容,然后将这些内容连同新的提示词一起扔进潜空间进行重绘。注意!它不是从零开始画,而是读取原图的数据作为底图 + 新图的描述进行生成

  • 潜空间噪声 Latent Noise:无视蒙版区域的任何原始信息,直接在潜空间的对应区域填满纯粹的、随机的噪声;

  • 空白潜空间 Empty Latent:用一个中性的、零值的“空”信号来填充潜空间区域,等待下一步的信息输入
    四种生成方式的对比

上图来自:Beginner’s guide to inpainting (step-by-step examples)2

面向直接应用的需要,ComfyUI中为一般用户提供了“原版”和“空白潜空间”这两种模式,分别对应了两个重绘的关键电池——Set Latent Noise MaskVAE Encode (for inpainting),我们将在后面的案例中上手体会。

在今天的案例中,我们将通过局部重绘功能实现以下的效果:
本期任务

由于疏忽,准备资料的时候忘了保存原始数据了,接下来的案例出图与上图将有点小差异

蒙版 Mask的基本认识

不妨将我们想象成一位医生,需要对患者的病灶进行精准手术,为了屏蔽非手术区域对我们的干扰,我们会在病灶处搭上一块“布”,即“铺巾”,布面上留出的孔洞就是我们要操作的部位。在上述的情境中,那块“布”其实就是我们图片重绘中的蒙版,不同的是,医生用的是绿色的,我们用的是黑色的

在ComfyUI中,蒙版以黑白表示是否被修改,白色表示待修改,黑色表示不修改,灰色则控制修改的强弱。

对图片添加蒙版的方式主要有两种:

  • 手动绘制:在ComfyUI中,右键Load Image的图片,在弹出的菜单下方找到 Open in MaskEditor 进入蒙版编辑页面在这里插入图片描述在这里插入图片描述
  • 提前绘制导入:常用,下篇讲。

VAE Encode for Inpainting 工作流

VAE Encode for Inpainting基础工作流

如图展示的是使用“VAE Encode for Inpainting”进行局部重绘的最基础工作流,由3块组成——导入,重绘和生成。

工作流解读

  • 导入模型、图片、VAE:这是工作流的准备阶段,导入要修改的图片,自备的蒙版等,模型 CheckPoint 将决定重绘时的画风,Load VAE 是可选项,亦可以通过Load Checkpoint节点中的vae进行后续连线,但由于ComfyUI的vae是默认的SD XL,1等版本使用的vae,可能与当前的checkpoint结合起来并不是最优的,所以:
    • 【建议】查看 模型 Checkpoint 的作者手册中对此是否有额外的推荐;,在作者没有特别对Checkpoint搭配的VAE有推荐时,可以加载通用 VAE :vaeFtMse840000EmaPruned_vaeFtMse840k3.
  • 图片生成:CLIP Text Encode(Prompt)主要用于添加重绘部分的提示词,Ksampler进行采样,然后经过Vae Decode,Preview Image进行图片查看
    • 【建议】正面提示词的建构一般是:“重绘部分”的内容+模型激活词、调用词(有使用Lora时)
  • 局部重绘:此处仅为最基础的工作流,因此,直接入了本案例关键的VAE Encode for Inpainting
    • 局部重绘部分进阶还会加入对蒙版的处理,主要是导入,扩展/收缩选取,羽化边缘

关键节点

  • VAE Encode for Inpainting

    • pixels 像素图输入: 用于接入图片信息,并经过vae,与Mask一同被转化成Latent信息
    • vae:略
    • mask:较常用节点 VAE Encode 多出来的接口,用于专门接收蒙版 Mask信息
    • grow_mask_by: 向外扩充蒙版的待修改区域(白区),值越高,向外扩充的像素就越多,被修改区域就越大grow_mask_by
  • KSampler:重绘实际上就是对选定区域重新采样,因此在接口和参数的设置上会有以下一下变动和考量:

    • model:即大模型 Checkpoint,此处接入的模型将会直接影响重绘的画风,在对人物的二次元化、三次元化、背景的替换中尤为重要
      • 具体可以去C站上进行画风的挑选,【!!留意部分Checkpoint是有指定“唤醒词”的,需要添加进CLIP Text Encode中】
    • positive / negative:接入提示词 Prompts,这里的正向 positive 提示词只用写重绘部分即可,不用再将原来的prompt复制过去
      • 再次提醒,如果调用的Checkpoint,Lora需要“唤醒词”,请及时加上
    • latent_image: 接入VAE Encode for Inpainting即可
    • Step:优先根据调用的Checkpoint的推荐值进行设定,但由于是局部重绘,在电脑配置不足的时候,可以稍微调低 5 - 10
    • cfg:优先根据调用的Checkpoint的推荐值进行设定
    • 采样器:优先根据调用的Checkpoint的推荐值进行设定
    • denoise:在使用 VAE Encode for Inpainting 时,值不能太低,0.8调整的基准,可以上下浮动0.2进行调整;

    案例演示

此处是案例原图,需要请自取案例原图案例最终呈现在这里插入图片描述
案例基本参数:(请将以下内容复制到空白ComfyUI中打开)

{"id": "b8009e0e-6d6c-4708-9148-aa17c260e600","revision": 0,"last_node_id": 19,"last_link_id": 21,"nodes": [{"id": 18,"type": "VAEDecode","pos": [1850,220],"size": [140,46],"flags": {},"order": 7,"mode": 0,"inputs": [{"name": "samples","type": "LATENT","link": 12},{"name": "vae","type": "VAE","link": 21}],"outputs": [{"name": "IMAGE","type": "IMAGE","links": [13]}],"properties": {"cnr_id": "comfy-core","ver": "0.3.44","Node name for S&R": "VAEDecode"},"widgets_values": []},{"id": 13,"type": "VAELoader","pos": [737.1824340820312,721.64794921875],"size": [270,58],"flags": {},"order": 0,"mode": 0,"inputs": []
http://www.xdnf.cn/news/16619.html

相关文章:

  • 服务器分布式的作用都有什么?
  • ABP VNext + GraphQL Federation:跨微服务联合 Schema 分层
  • Apache Ignite 的连续查询(Continuous Queries)功能的详细说明
  • Python的生态力量:现代开发的通用工具与创新引擎
  • 【PHP】Swoole:CentOS安装Composer+Hyperf
  • ⭐ Unity 异步加载PPT页面 并 首帧无卡顿显示
  • 【EDA】Calma--早期版图绘制工具商
  • AR辅助前端设计:虚实融合场景下的设备维修指引界面开发实践
  • 2025年06月03日 Go生态洞察:语法层面的错误处理支持
  • Java 11 新特性详解与代码示例
  • Spring Boot中的this::语法糖详解
  • 递归推理树(RR-Tree)系统:构建认知推理的骨架结构
  • 力扣热题100--------240.搜索二维矩阵
  • Generative AI in Game Development
  • 板凳-------Mysql cookbook学习 (十二--------7)
  • 亚马逊 Vine 计划:评论生态重构与合规运营策略
  • C++基础:模拟实现queue和stack。底层:适配器
  • 解决mac下git pull、push需要输入密码
  • MySQL(配置)——MariaDB使用
  • 探索 Vim:Linux 下的高效文本编辑利器
  • SBB指令的“生活小剧场“
  • Linux 系统启动与 GRUB2 核心操作指南
  • Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
  • 作物生长模型Oryza V3实战17:土壤数据集
  • 【RH134 问答题】第 9 章 访问网络附加存储
  • 2025年Solar应急响应公益月赛-7月笔记ing
  • 正运动控制器Zbasic回零详细教程(不带Z信号)
  • 【Linux知识】Linux Shell 脚本中的 `set -ex` 命令深度解析
  • SQL排查、分析海量数据以及锁机制
  • Fast Video generation with sliding tile attention