尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

如何用两个节点让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/5121 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 模式快30100倍。选择逻辑只发生在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 修复最后拼回原图——这是局部修复 超分组合的典型用法。图2SD1.5 工作流与修复前后对比掩码区域被水彩玻璃瓶自然填充图3Flux 条件控制的修复工作流体现了高质量细节恢复能力取舍与调优快与好的平衡艺术上下文留多少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),仅供参考
返回列表