跳到正文
Kwei 个人主页作品集 project library

COMFYUI WORKSHOP / 让素材进入剪辑

ComfyUI 抠图教程:把绿幕素材,变成透明 PNG

从一只橘猫开始,串起选色、蒙版、边缘处理和透明导出。附节点连线图与练习工作流。

8 分钟阅读节点图解 · 可下载工作流
本文目录06

如果要把一只猫叠进视频,拿到一张绿底图片,还差最后一步:让背景真正透明。写了“透明背景”的提示词,或把文件存成 PNG,都不能替我们完成这一步。

我更看重这条流程的地方,是把重复的素材处理留下来复用。先拆出“已有绿幕图 → 透明素材”这一段,弄懂每条线,再接回生图。

先看两种素材的差别绿幕图片 → 透明 PNG
橘猫绿幕素材,绿色背景仍属于图片像素
绿幕原图背景仍然会挡住下方画面
带透明通道的橘猫抠图结果,可切换衬底检查边缘
透明素材示例透明处露出网页底色
给右图换个底色:
右图已经裁去外围空白。耳朵、背部仍能看到少量绿边,切换深浅底色更容易发现。

01 / 准备材料先用一张已有图,把抠图这段跑通

颜色抠图,是按颜色找出背景,再把它转换为透明区域。 本例找的是绿幕,不需要理解“猫是什么”,也不需要加载扩散模型。先用现成图片,容易分清问题出在素材、选色,还是保存。

读图保留原始颜色Load Image
选背景把绿色找出来Image Select Color
做蒙版决定哪里保留转通道 / 反相 / 修边
存 PNG带上透明通道Cut By Mask → Save

一张背景容易区分的图片

可以下载本文的橘猫绿幕图。主体如果也有绿色,颜色抠图就可能误删它;先换素材,或改用适合该主体的分割方法。

一个能正常启动的 ComfyUI

本篇只处理单张图片。先确认下面三个节点包能加载,再导入工作流。界面布局可能随版本变化,认准节点名称就好。

Image Select ColorWAS Node Suite

根据 RGB 与容差找背景。

搜索 WAS Node Suite v3,核对仓库作者 WASasquatch。

Mask OpsComfyI2I

反相蒙版,调整收缩与羽化。

对应 ManglerFTW / ComfyI2I。

Cut By MaskMasquerade Nodes

把保留区域写入 Alpha,并裁去外围空白。

对应 BadCafeCode / masquerade-nodes-comfyui。

安装前,注意这是一条包含旧节点的路线

当前 WAS v3 要求 ComfyUI 0.14.0 或更新、Python 3.10 或更新。这只是 WAS 的最低要求;ComfyI2I 与 Masquerade 没有给出经过验证的现代版本兼容范围,不能据此保证三包组合在任意环境都能运行。

若 Manager 中找不到,参考官方自定义节点安装说明与各仓库 README,将节点放进当前实例的 custom_nodes,并用该实例的 Python 处理所需依赖。节点加载报错时,先看启动日志;不要用系统 Python 随意安装后就当依赖已经补齐。

在 Manager 中搜索并核对这三个项目,按各项目说明安装后重启 ComfyUI。Load Image、Convert Image to Mask、Preview Image 和 Save Image 是内置节点。这条支路需要三个节点包,只安装 ComfyI2I 还不够。

02 / 照图连线原图走三路,蒙版只管“留哪里”

IMAGE 是图像,MASK 是蒙版数据;名字接近,端口类型也要对得上。 原图一份拿去选色,一份交给 Mask Ops,一份留给 Cut By Mask 取出真正的主体颜色。

  1. 导入工作流,选择图片在 Workflows → Open 打开文末下载的 JSON,再在 Load Image 上传 source-cat-green.png,或换成自己的绿幕图。这份 JSON 只包含抠图支路。缺失节点时,先回到上面的插件清单。
  2. 从绿色图像里取出蒙版Image Select Color 的 IMAGE 接到 Convert Image to Mask 的 image,channel 选 green。再把 MASK 接到 Mask Ops 的 mask。此时较亮的区域对应背景,还不是最后要保留的猫。
  3. 把主体颜色和保留区域合在一起Mask Ops 的 mask_image 接 Cut By Mask 的 mask;Load Image 的 IMAGE 接 Cut By Mask 的 image。最后把 Cut By Mask 的 IMAGE 接到 Save Image。这里 Cut By Mask 的 mask 输入虽然名叫 mask,类型却是 IMAGE,所以要用 mask_image 输出,不要接旁边那个 MASK 口。
连线对照

Load Image.IMAGE → Image Select Color.image

Load Image.IMAGE → Mask Ops.image / Cut By Mask.image

Image Select Color.IMAGE → ImageToMask.image → Mask Ops.mask

Mask Ops.mask_image → Cut By Mask.mask / Preview Image.images

Cut By Mask.IMAGE → Save Image.images

抠图节点链点击放大 ↗
这里用人像界面演示抠图支路,按节点名称与端口类型连接。节点在画布上的位置可以自行调整。

连接好后点 Run;旧界面里可能叫 Queue Prompt。先看 Preview Image 的蒙版,再看 Save Image 的结果。背景判断错了,后面的节点只会把这个错误继续执行下去。

03 / 调好蒙版先看预览,再动这四个参数

蒙版是在给每个位置分配保留程度。 在本例最终送入 Cut By Mask 的蒙版里,白色保留、黑色透明、灰色半透明。这个约定不能直接套给所有节点:Load Image 读取透明图时输出的 MASK,方向就与它不同。

先检查拾色结果点击放大 ↗
图中 variance=100,调参时先看背景是否残留、主体是否被误选。容差越大,选中的颜色范围也越大。

RGB 与 variance选什么颜色 / 接受多大偏差

纯绿背景可从 0、255、0 开始。variance 增大,会把更多接近这个颜色的像素选进来。

背景没选全,逐步扩大范围;主体出现孔洞,检查是否误选。255会匹配整个画面,不能一把拉满。

invert翻转黑白方向

本流程先得到背景蒙版,设为1后把它翻成主体蒙版。

预览应是主体亮、背景暗。方向反了,可能只留下绿幕,把猫抠掉。

shrink_grow移动边界

这个旧节点先处理背景蒙版,再反相。因此本流程正值会扩大背景、让最终主体缩小。

从0开始,小幅增加可尝试清掉窄绿边;细毛、耳尖和胡须若变薄,就退回来。图中的8不是通用答案。

blur_radius让边缘过渡柔和

羽化会在边缘制造灰度过渡,也就是半透明区域。

先从0观察,再少量调整。变柔不等于去绿;羽化过大,轮廓会发虚,绿边也可能仍在。

蒙版反相与边缘处理点击放大 ↗
图中 shrink_grow=8、invert=1、blur_radius=1.0。从较小修改量开始,观察自己的素材。

下载的练习支路把 variance 设为30、shrink_grow 设为0、invert 设为1、blur_radius 设为0,方便先看到未经大幅修边的状态。这组数值是调试起点,仍要按素材调整。

04 / 再接生图抠图通过了,再把上游换成生图

生图负责给你像素,抠图负责给像素补上透明信息。 可以先在纯绿底图上画出可生成主体的范围,再用 VAE Encode for Inpainting 接入采样。生成后,VAE Decode 的 IMAGE 替代上面 Load Image 的三路图像输入。

生成绿幕素材的上游点击放大 ↗
上游生成素材,下游制作透明通道。两段分开调试,容易定位问题。
这两个环节,容易理解错

把主体提示词和 green background 分别编码,再用 Conditioning Concat 拼接,不等于给它们划好了可靠的空间区域。主体和绿幕是否分开,仍然要看实际结果。

“SD无法直接生成透明PNG”也需要限定:这里讨论的是普通 RGB 生图链,没有直接生成透明通道。不能用这一条工作流的限制概括所有现代模型或透明图像扩展。

a full-body orange tabby cat, centered, isolated on a uniform bright green background, paws and tail fully visible

下面是一句主体与背景的描述示例,不用于复现图中这只橘猫。主体与背景是否分开、绿色是否均匀,仍要看生成结果。

05 / 检查成品背景透明了,边缘也要过关

Alpha 是额外记录透明程度的通道。 PNG 可以携带它,也可以只有不透明的 RGB。判断方法很直接:把结果放在深色、白色和实际视频画面上,看背景是否真的透出来。

下载的是 PNG,怎么还是一块底色?

检查有没有直接保存绿幕原图,或把棋盘格本身画进了图片。确认 Save Image 前接的是 Cut By Mask 输出,中间没有把图转回丢失 Alpha 的 RGB。

猫耳和背部有绿边,继续加羽化吗?

先回看背景是否选全,再小幅调整收缩。羽化只会软化边界,未必消掉附着在主体边缘的绿色。上面的猫图在深色底下就能看到这种残留;细毛与颜色污染严重时,需要进一步去溢色或重新准备素材。

猫变小了,输出尺寸也变了?

Cut By Mask 会按蒙版非零范围裁边,所以输出可以比原图小。force_resize_width 和 height 先保持0,避免又强制拉伸。进入剪辑软件后重新确认位置与缩放;这条裁边路线不适合直接假定连续视频帧会保持稳定画幅。

预览里主体缺了一块?

先看蒙版有没有孔洞,确认容差是否误选了主体;再检查收缩是否过大。不要为了去绿边,顺手把主体轮廓也删掉。

把练习材料留一份

下载单张抠图支路和两张对照图片。JSON 已核对连线,尚未实机验证;使用前确认三个节点包可用。

文件直接从本页下载,不会上传你的素材。

Cut By Mask 会产生带 Alpha 的图像,内置 Save Image 能把四通道结果存为 PNG,不需要再找一个“开启透明”的按钮。真正要检查的是图像有没有保留这条通道,以及边缘是不是可用。

06 / 最后记住值得复用的,是这套判断顺序

先选对背景

主体与背景分不开,后面再精细也容易误删。

再看懂蒙版

认清黑白方向,再处理残留、孔洞与细边。

最后叠进画面

透明通道、边缘颜色、裁边后的大小都要检查。

我想强调的是,把“生成一张漂亮图片”和“交付一份能用的素材”分开处理。先用一张已知的绿幕图检查抠图,再接生图;哪一步出了问题,就回到哪一步修改。

可滚动查看节点与参数,按 Esc 关闭。