ComfyUI的节点式工作流让它在做图像编辑时格外灵活,但很多编辑场景都绕不开一个前提:你得先把要编辑的区域选出来。传统做法是手工画蒙版,费时费力还边缘生硬。Segment Anything(SAM)模型的出现改变了这个局面,它可以根据文本提示自动定位并分割图像中的物体,配合ComfyUI的节点体系,能够实现精准的局部重绘、抠图换背景等操作。本文将从节点安装讲起,一步步搭建一个完整的SAM分割辅助编辑工作流。

SAM分割的基本原理
在动手之前,先搞清楚这套方案的工作机制。ComfyUI里常用的SAM分割方案实际上是两个模型的组合:GroundingDINO负责理解你的文本描述,在图像中框出目标物体的大致位置;SAM则根据这个框,生成像素级的精细蒙版。两者缺一不可,只用SAM的话需要手动提供坐标点或框,只用GroundingDINO则只能得到粗略的矩形框,边缘细节完全不够用。
这套组合的优势在于零训练成本。你不需要为自己的目标物体准备数据集,只要能用自然语言描述出来,比如一只猫、红色的椅子、人物的手部,模型就能尝试定位。当然它也有局限,对于过于抽象的描述(比如氛围感很强的一块区域)效果不佳,这类需求还是得回到手工蒙版。
实际运行时的显存开销需要注意,SAM的ViT-H版本模型体积约2.4GB,推理时占用更高。如果显卡显存只有8GB甚至更少,建议直接选择量化后的模型版本,或者把采样分辨率适当降低。
节点安装与模型下载
Segment Anything节点并非ComfyUI自带,需要通过ComfyUI Manager安装。打开Manager面板搜索Segment Anything,安装后重启ComfyUI即可。如果你的环境无法使用Manager,也可以手动克隆仓库到custom_nodes目录:
cd ComfyUI/custom_nodes git clone https://github.com/storyicon/comfyui_segment_anything.git pip install -r comfyui_segment_anything/requirements.txt
安装完节点只是第一步,模型文件才是关键。需要的模型主要包括三类:SAM权重、GroundingDINO权重、以及文本编码用的BERT模型。以常用版本为例,下载后放入对应目录:
# SAM模型,放到 models/sams/ 目录 sam_vit_h_4b8939.pth # 约2.4GB,精度最高 sam_vit_b_01ec64.pth # 约375MB,速度更快 # GroundingDINO模型,放到 models/grounding-dino/ 目录 groundingdino_swint_ogc.pth # BERT相关文件,放到 models/bert-base-uncased/ 目录 config.json vocab.txt pytorch_model.bin
这里有个容易踩的坑:BERT模型的目录结构必须完整,缺少vocab.txt会直接报tokenizer初始化失败。如果下载速度太慢,可以寻找国内镜像源,注意核对文件体积是否与官方一致,不完整的权重文件会导致加载时静默失败,界面上的表现是节点一直卡在执行状态。
搭建分割工作流
模型就位后开始连线。核心链路是:加载图像节点连接GroundingDinoSAMSegment节点的image输入,文本提示写入prompt参数,SAMLoader选择对应模型版本后连到它的sam_model输入。这个节点会同时输出蒙版和分割后的图像,可以先连到预览节点确认效果。
节点参数的具体含义如下:
- sam_model:来自SAMLoader,决定使用哪个版本的SAM权重
- grounding_dino_model:来自GroundingDinoModelLoader节点
- prompt:文本提示,用英文描述目标物体,多个目标用逗号分隔
- threshold:检测置信度阈值,默认0.3,调高可过滤误检
- resolution:GroundingDINO推理分辨率,数值越高定位越准但速度越慢
一个最小可运行的工作流示例如下:
LoadImage
|
v
GroundingDinoModelLoader SAMLoader (vit_h)
| |
+----------------+-----------------+
|
v
GroundingDinoSAMSegment
prompt: "face, hair"
threshold: 0.3
| |
v v
mask image(分割结果)
|
v
PreviewImage / SaveImage写prompt时有技巧。描述要具体且与画面匹配,比如画面里有多个人的时候,写person会把所有人都分割出来;如果只要其中穿红衣服的人,可以先分割person,再用蒙版运算节点裁剪范围。此外threshold参数很敏感,检测不到目标时先降到0.25以下试试,误检太多则往上调。
结合重绘实现局部编辑
分割的最终目的通常是编辑。把GroundingDinoSAMSegment输出的蒙版接入VAE Encode for Inpainting节点的mask输入,就得到了一个只修改目标区域的局部重绘链路。相比手绘蒙版,SAM生成的蒙版边缘贴合物体轮廓,重绘后的边界过渡自然得多。
典型的局部重绘连线顺序是:原图经过VAE Encode后与SAM蒙版一起送入VAE Encode for Inpainting,再连接KSampler,denoise值建议设在0.5到0.8之间。denoise太低改动不明显,太高则可能溢出蒙版边界,导致物体和背景衔接处出现瑕疵。采样完成后经VAE Decode输出结果。
另一个高频用法是换背景。将SAM蒙版用InvertMask节点反转,得到背景蒙版,配合InpaintModel或直接对背景区域重绘,就能实现保留主体、替换环境的效果。如果只需要抠图,可以直接把分割输出连接到SaveImage节点,得到带透明通道的PNG。
常见问题排查
显存不足是最常见的问题,表现为运行时被系统杀掉或直接报CUDA out of memory。优先换用vit_b版本的SAM模型,体积只有高精度版的六分之一;再把resolution参数从1024降到512左右,GroundingDINO的推理开销会显著下降。
分割区域不准时,先检查prompt是否准确描述了目标,再调整threshold。还有一种情况是目标物体在画面中占比很小,这时可以提高resolution让检测模型看清细节。蒙版边缘有毛刺的话,可以在蒙版输出后接一个GrowMask节点做少量膨胀,或者用模糊节点柔化边缘后再用于重绘。
模型加载失败通常都是文件路径问题,重点核对目录名是否完全一致,比如models/grounding-dino中间是短横线而不是下划线。Windows用户还要注意系统可能隐藏了文件扩展名,把config.json误存成config.json.txt是新手高发错误。遇到节点报红,重新执行一次安装requirements.txt的依赖,多数缺依赖的问题都能解决。
掌握这套流程后,你会发现ComfyUI里的局部编辑效率提升明显。文本输入一句描述,几秒内得到精准蒙版,再配合不同后处理节点,抠图、换背景、局部重绘都能流畅完成。建议先用简单图片跑通流程,再逐步尝试复杂场景,理解每个参数对结果的影响后,SAM会成为你工作流里最稳定的辅助工具之一。
ComfyUISAMSegment Anything修改时间:2026-09-13 10:22:34