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

如何用两个节点让ComfyUI图像修复提速10倍:InpaintCrop与InpaintStitch源码解析

如何用两个节点让ComfyUI图像修复提速10倍:InpaintCrop与InpaintStitch源码解析

【免费下载链接】ComfyUI-Inpaint-CropAndStitchComfyUI nodes to crop before sampling and stitch back after sampling that speed up inpainting项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Inpaint-CropAndStitch

修一张4K大图,把整张图喂给采样器,一次出图等上3分钟并不夸张;而这只为了抹掉照片角落里的一根电线。ComfyUI图像修复插件 ComfyUI-Inpaint-CropAndStitch 的解法很直接:先裁剪、再采样、最后拼接——只让掩码圈出的局部区域通过模型,修完再无缝贴回去。本文拆解其核心节点 InpaintCropImproved 与 InpaintStitchImproved 的工作原理,看它是如何让修复提速一个量级的。

全景俯视图:一张图看懂"局部修复"全链路

从输入到输出,数据只走一条流水线:

原图 + 掩码 → 掩码预处理 → 圈定上下文区域 → 智能裁剪 + 缩放 → 局部采样修复 → 缩放回原尺寸 → 掩码混合拼接 → 输出成品

关键差异在于:未掩码的部分从头到尾不经过 VAE 编解码,也就不会被模型"二次创作",保真度天然更高。裁剪节点除了输出局部图,还会附带一个装满元数据的STITCHER对象——它记录了画布在哪、修复图该贴到哪、原始图又该从哪裁回。拼接节点拿到它,就能完成一次精准的"物归原位"。

图1:官方高分辨率修复工作流,可见裁剪→采样→放大→拼接的完整链路

看清了整体轮廓,现在把镜头拉近,看看一次点击背后究竟发生了什么。

一次任务的完整旅程:掩码进入后的六步流水线

第一步:掩码"体检"与预处理

掩码就像修图软件里的套索选区,但它往往不干净:有孔洞、边缘太硬、甚至带着半透明的灰。裁剪节点按固定顺序打理它——填孔(把被完全包围的区域也纳入掩码)、按像素膨胀可选反转高斯模糊(让后续拼接边缘柔和)、高通滤波(忽略低于阈值的"假掩码",避免用户在不知情时把浅灰当成白色)。

第二步:圈定上下文区域

模型修复局部时也需要"上下文"来判断画什么。节点先算出掩码的外接矩形,再用context_from_mask_extend_factor把它向外扩一圈(默认1.2倍),最后与可选的optional_context_mask取并集。这一步决定了"模型能看到多少周围环境",是画质的关键。

第三步:裁剪 + 对齐目标分辨率

拿到上下文区域后,crop_magic_im开始施展"魔法":把区域拉伸到目标宽高比、处理越界、必要时用边缘像素延伸画布(外画修复),最后缩放到模型期望的分辨率,比如 SD1.5 的 512×512、SDXL 或 Flux 的 1024×1024。

第四步:局部采样

此时模型处理的只是一小块图。计算量随像素数非线性增长,处理十分之一区域往往能省下几倍甚至十几倍的时间——这就是提速的根源。

第五步:缩放回原尺寸

修复图在拼接前要先缩放回裁剪时的原始尺寸,缩放方向不同会自动选用放大或缩小算法(默认 bicubic / bilinear),避免画质损失。

第六步:掩码加权混合回填

拼接节点把修复图按模糊后的掩码做alpha 混合贴回画布,再裁出原始图像区域。掩码边缘是渐变的,所以接缝处是"软过渡",肉眼几乎看不出修补痕迹。

放大镜:两个值得细品的巧思

InpaintCrop裁剪原理:给相框配照片的宽高比魔法

把上下文区域塞进目标分辨率时,最粗暴的做法是直接拉伸——但那样画面会变形。源码的做法是先算目标宽高比,再把裁剪框扩到匹配的比例,相当于"照片不动,把相框扩到合适大小":

# 裁剪前先算"目标宽高比",避免把图拉变形 target_ratio = target_w / target_h # 模型期望的比例,如 512/512=1 context_ratio = w / h # 当前上下文区域的比例 if context_ratio < target_ratio: # 上下文"太矮",按目标比例把宽度撑到与高度匹配 new_w = int(h * target_ratio) new_x = x - (new_w - w) // 2 # 居中扩展,四周都留上下文 else: # 上下文"太宽",同理把高度补上去 new_h = int(w / target_ratio) new_y = y - (new_h - h) // 2

扩完如果越出图像边界,就用图像边缘像素向外延伸(而不是镜像),既满足模型的填充倍数要求(output_padding默认32),也不会出现诡异的镜像纹理。拼接时STITCHER记录的三组坐标(原始图在画布中的位置、修复图在画布中的位置)保证了一切严丝合缝——旧版本曾有1像素错位,新版已彻底修复。

CPU与GPU模式切换:同一份菜谱的两个厨子

项目用策略模式抽象出ProcessorLogic基类,派生出 CPU 与 GPU 两个实现,对外暴露完全相同的接口。CPU 版本基于 PIL 和 SciPy(灰色膨胀、高斯滤波),兼容性最好;GPU 版本则用 PyTorch 原生算子重写了热点:

# GPU 上用最大池化近似形态学膨胀,比逐像素循环快一个量级 kernel = ceil(pixels / 4 * 1.5 + 1) | 1 # 膨胀核大小(强制奇数) dilated = max_pool2d(pad(mask, 'reflect'), kernel) # 反射填充防止边缘发黑

高斯模糊也换成了卷积核实现。据官方说明,在处理瓶颈场景(如视频修复)下,GPU 模式比 CPU 模式快30~100倍。选择逻辑只发生在inpaint_crop开头几行,节点内部对用户完全透明。

实战组合拳:三种模型工作流配置

安装只需把仓库克隆到 ComfyUI 的custom_nodes目录:

git clone https://gitcode.com/gh_mirrors/co/ComfyUI-Inpaint-CropAndStitch

然后用官方提供的示例工作流直接开跑:

  • SD1.5 标准流程Load Image → Inpaint Crop → InpaintModelConditioning → KSampler → VAE Decode → Inpaint Stitch,配合"裁剪后放大到512×512再采样",玻璃瓶这类场景修复得又快又自然。
  • Flux + ControlNet 流程:在 Flux 工作流中接入裁剪节点,配合 ControlNet Inpainting 条件控制,适合追求高质量细节的场景。
  • 高分辨率修复流程:先小图采样,再用 4x 放大模型放大、做 hiRes 修复,最后拼回原图——这是"局部修复 + 超分"组合的典型用法。

图2:SD1.5 工作流与修复前后对比,掩码区域被水彩玻璃瓶自然填充

图3:Flux + 条件控制的修复工作流,体现了高质量细节恢复能力

取舍与调优:快与好的平衡艺术

  • 上下文留多少?context_from_mask_extend_factor越大,模型看到的环境越多、语义越准,但裁剪图也越大、采样越慢。从1.2起步,按效果逐步上调。
  • 降采样防"双头"伪影:掩码区域过大时,先降采样再采样,可避免模型画出两个头、两个身体;修完拼回时自动放大,视觉无损失。
  • 强制目标分辨率:开启output_resize_to_target_size,让每种模型都工作在它最舒服的分辨率上(SD1.5 用512、SDXL/Flux 用1024)。
  • CPU与GPU模式切换的最佳实践:默认 CPU 保证兼容;当节点成为瓶颈(如批量视频修复)时切到 GPU,输入需能装进显存,可换来30倍以上的吞吐。
  • 掩码务必纯白:若修复后还能透出原图,多半是掩码带了灰阶——即使人眼看不出,也要确保边界是 255,255,255。

启发与延伸

这个插件的价值不止于"快":它把"在整图上采样"这件昂贵的全局操作,降维成了"局部采样 + 无损回填",同时让模型始终工作在理想分辨率下。沿着这个思路,还有三个方向值得自己动手探索:

  • 把裁剪节点接到视频修复流程里,配合批量掩码,看看 GPU 模式能省下多少显存与时间;
  • optional_context_mask精确控制上下文区域,实验"模型该看什么、不该看什么"对画质的影响;
  • crop_magic_im之后插入任意放大模型(不只是官方4x Ultrasharp),构建自己的超分修复管线。

裁剪之后你还会贴什么回去?欢迎在实践中给出你的答案。

【免费下载链接】ComfyUI-Inpaint-CropAndStitchComfyUI nodes to crop before sampling and stitch back after sampling that speed up inpainting项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Inpaint-CropAndStitch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1391993/

相关文章:

  • 法学医学类硕士论文降AI工具免费推荐:2026年人文社科研究生论文降AI4.8元亲测达标方案 - 还在做实验的师兄
  • 破解物理AI技术困局(48):TVA帕累托最优决策
  • 三步为扫描版PDF添加导航书签:免费开源工具pdfdir快速上手指南
  • mcp-server-mcpindex MCP 服务说明文档
  • 公众号排版工具大合集:8款微信编辑器优缺点一次说清 - peipei33
  • 为什么本地企业做官网必须选对技术伙伴详解南昌网站建设加王道下拉的实战逻辑与避坑指南
  • 多功能蒸馏仪行业龙头厂家推荐:恒美智造全自动一体化蒸馏仪解析 - 专业仪器测评品牌推荐
  • 《派出你的AI同事:WorkBuddy案例实战》057:文书自动起草与合规审查
  • 华为OD机试 - 消消乐能量碰撞(Java 新系统 100分)
  • Navigation2和TEB局部规划器调参问题及解决办法
  • springboot校园失物招领系统08239-计算机课程设计/毕业设计
  • Spring Boot 图书管理系统设计与实现|React + MySQL + 借阅、续借、归还与活动管理-----附源码76826
  • Android应用安装辅助工具,apk安装
  • 2026年南京企业家社群竞争力研判与选型指南 - 甄选测评馆
  • Kettle数据迁移实战:一次搞定从旧系统到新平台的完整避坑指南
  • Visual C++ Redistributable AIO 完整使用指南:一条命令终结 msvcp140.dll 缺失烦恼
  • 2026 红河州蒙自市具备相关资质的专业防水补漏门店有哪些? - 甄选测评馆
  • IDEA全局设置JDK、Maven、编码格式(转载)、moudle被ignore
  • 2026 北京消杀服务商合作指南:靶向防制体系、服务流程与选择建议 - 中国华商产业观察网
  • python 基础语法学习: 集合 (set) 方法汇总
  • 外贸建站公司哪家好?B2B询盘站、独立站和多语言官网服务商推荐
  • 【C++】记录size of std::vector的巧妙坑
  • 2026 年福州叉车吊车租赁,高空作业车吊装搬运服务问答 - LYL仔仔
  • 破解物理AI技术困局(49):TVA实现分层记忆索引
  • 【毕设作品】基于Django的智慧旅游数据分析平台的设计与实现
  • GetQzonehistory:不写一行代码,一次扫码把QQ空间历史说说永久备份回家
  • 移植Letter Shell到ThreadX
  • 《派出你的AI同事:WorkBuddy案例实战》056:商品文案批量生成与选品分析
  • 2026智能运维管理平台怎么选?4大核心维度拆解
  • 【关注可白嫖源码】--课程设计--+毕业设计+springboot某小区物业管理系统[编号:project88951](案例分析)