18 KiB
title, date, tags
| title | date | tags | ||||
|---|---|---|---|---|---|---|
| ComfyUI 视频分割系统 - 界面搭建操作指南 | 2026-04-22 |
|
ComfyUI 视频分割系统 - 界面搭建操作指南
前置假设:你已安装以下节点包。如未安装,请先通过 ComfyUI Manager 安装:
ComfyUI-Manager(管理器本身)ComfyUI-VideoHelperSuite(视频加载/保存)ComfyUl-segment-anything-2(SAM2 分割,推荐 kijai 版)ComfyUI-Impact-Pack(Grounding DINO / 检测器)rgthree-comfy(Fast Muter / Bypass 节点)
第一步:打开节点添加菜单
在画布空白处 双击鼠标左键,或 右键单击空白处 → 选择 添加节点。
你会看到一个分类菜单(如 image, video, SAM2, rgthree 等)。
第二步:搭建视频输入端
2.1 加载视频
- 右键/双击空白处打开节点菜单
- 在第二级菜单中找到 Video Helper Suite(带有紫色摄像机图标的那一项)
- 在右侧弹出的第三级菜单中,根据你的需求选择以下任意一个节点:
- Load Video (Upload):如果你想从电脑本地上传一个视频文件
- Load Video (Path):如果你想通过输入电脑上的文件夹路径来读取视频
- 点击创建节点
- 节点出现在画布上,把它拖到左上角区域
2.2 提取第一帧(关键帧选择器)
- 回到 Video Helper Suite(紫色摄像机图标)的第三级菜单
- 找到
图像分类下的Select Images:- 在较新版本的 Video Helper Suite 中,它取代了旧版的
VHS_SelectFrames名称,功能完全一致,都是通过索引(Index)从视频流中挑选特定帧
- 在较新版本的 Video Helper Suite 中,它取代了旧版的
- (可选抽帧)如果你不想逐帧处理,也可以使用它上方的
Select Every Nth Image,每隔几帧取一张 - 连接:
Load Video的IMAGE输出 →Select Images的image输入 - 设置参数:
index = 0(表示取第一帧)
操作技巧:ComfyUI 中,鼠标从一个节点的圆形输出端拖拽到另一个节点的圆形输入端即可完成连线。
第三步:放置 SAM2 模型加载器
这是整个系统的核心引擎。
- 右键/双击空白处
- 找到分类:
SAM2,别选segment_anything2 - 选择节点:
(Down)Load SAM2Model(名称可能为SAM2ModelLoader或SAM2::Model Loader) - 参数设置:
model_name: 选择sam2.1 hiera_base_plus.safetensors(精度与速度平衡)device:cuda(若显存不足可选cpu,但极慢)precision:fp16(推荐,省显存)
将这个节点放在画布中上部,作为公共模型源。
第四步:SAM2 节点功能总览与选型
comfyui-segment-anything-2 提供了 6 个核心节点。以下是它们的功能定位:
4.1 核心加载类
(Down)Load SAM2Model
- 功能:从本地加载或从服务器下载指定的 SAM2 模型文件
- 关键参数:
model: 如sam2.1_hiera_base_plus.safetensorssegmentor: 可选择单图或视频模式device:cuda或cpuprecision:fp16(推荐)、bf16、fp32
4.2 静态图像分割类
Sam2Segmentation
- 功能:标准单帧分割器。根据输入的正向/负向点坐标、检测框或初始遮罩生成分割结果
- 关键输入:
coordinates_positive(正选点)、coordinates_negative(反选点)、bboxes
Sam2AutoSegmentation
- 功能:"分割一切"模式。无需手动点击,通过全图布设点阵(
points_per_side)自动识别所有可能的物体 - 适用:全自动抠出图中所有物体
4.3 视频追踪与交互类
Sam2VideoSegmentationAddPoints
- 功能:视频工作流的"交互站"。允许你在特定帧(
frame_index)添加点标注,并将标注注入到视频推理状态(inference_state)中 - 关键作用:
- 初始化视频追踪状态
- 通过
prev_inference_state链式追加多帧标注(实现人工纠正)
- 关键输入:
image(视频批次或关键帧)、coordinates_positive、coordinates_negative、frame_index
Sam2VideoSegmentation
- 功能:视频推理的核心引擎。接收模型和带有标注信息的
inference_state,执行跨帧自动追踪 - 输出:
mask(完整视频的分割结果批次)
4.4 辅助与坐标转换类
Florence2 Coordinates
- 功能:桥接节点。将 Florence-2 视觉模型输出的检测数据转换为 SAM2 可识别的坐标格式(中心点
center_coordinates或检测框boxes) - 用途:实现"文字搜图并抠图"的全自动流程
4.5 快速选型建议
| 任务场景 | 核心节点组合 |
|---|---|
| 全自动抠出图中所有物体 | (Down)Load SAM2Model + Sam2AutoSegmentation |
| 手动点击抠出视频第一帧 | (Down)Load SAM2Model + Sam2Segmentation |
| 将第一帧的效果推广到全视频 | Sam2VideoSegmentationAddPoints + Sam2VideoSegmentation |
| 全自动语义分割(如:抠出手柄) | Florence-2 相关节点 + Florence2 Coordinates + Sam2Segmentation |
第五步:单帧分割测试(确认第一帧标注)
在接入视频追踪前,建议先用单帧节点快速验证标注位置是否准确。
5.1 手动点/框标注(Sam2Segmentation)
-
添加节点:
SAM2→Sam2Segmentation -
连线:
Select Images(第一帧)的图像输出 →Sam2Segmentation的image(Down)Load SAM2Model的模型输出 →Sam2Segmentation的sam2_model
-
选择以下任意一种提示方式填入:
方式 A:手绘 Mask(最直观,强烈推荐)
- 将
Select Images的图像先连到一个Preview Image节点 - 在预览图上右键 →
Open in Mask Editor - 用画笔在目标区域涂抹(不需要很精确,覆盖目标大致轮廓即可),点击 Save to node
- 将得到的
mask连到Sam2Segmentation的mask输入 - 这样无需计算精确坐标,手绘的粗略区域即可引导 SAM2 生成分割
方式 B:点坐标(适合精确控制)
coordinates_positive: 填入正选点坐标(如[[0.45, 0.52]])coordinates_negative: 填入反选点坐标(如[[0.55, 0.48]]),如无则留空-
坐标获取技巧:
Sam2Segmentation节点本身不带图像点击界面。你可以:
- 先用
Sam2AutoSegmentation(见 5.2)跑一次,从它输出的bbox列表中估算目标中心坐标 - 或将第一帧保存到本地,在图像编辑软件(如画图、Photoshop)中查看鼠标位置的像素坐标,再归一化(除以图像宽高)后填入
方式 C:检测框(适合规则形状物体)
bboxes: 填入边界框坐标[x1, y1, x2, y2]- 可通过
Florence2 Coordinates或Grounding DINO节点自动生成(见第六、七章)
- 将
-
参数:
keep_model_loaded: 可开启(若后续继续用同一模型)individual_objects: 根据需求选择(多目标时开启)
-
输出连到
image→Preview Image查看效果
多次迭代的技巧:SAM2 的分割结果对提示位置敏感。如果第一次效果不佳,不需要重新连线:
- 若用 方式 A(Mask):重新打开 Mask Editor,调整手绘区域,再次 Save,然后直接点击「运行」
- 若用 方式 B(坐标):直接修改
coordinates_positive的数值,再次点击「运行」建议先用 方式 A 手绘 mask 快速确认目标能被正确分割,然后再根据效果决定视频追踪时使用的精确坐标。
5.2 自动分割一切(Sam2AutoSegmentation)
如果你不想手动标注,可以使用全自动模式:
- 添加节点:
SAM2→Sam2AutoSegmentation - 连线:
Select Images→image,(Down)Load SAM2Model→sam2_model - 参数调整(可选):
points_per_side: 网格密度(默认 32,越大越精细但越慢)pred_iou_thresh: IOU 阈值过滤低质量 mask
- 输出:
mask、segmented_image、bbox
此时你可以先点击「运行」测试单帧分割效果。
第六步:视频追踪核心链路
comfyui-segment-anything-2 的视频追踪由两个节点配合完成:Sam2VideoSegmentationAddPoints(注入提示)+ Sam2VideoSegmentation(执行追踪)。
6.1 Sam2VideoSegmentationAddPoints(视频交互注入)
- 添加节点:
SAM2→Sam2VideoSegmentationAddPoints - 连线:
(Down)Load SAM2Model→sam2_modelLoad Video的完整图像批次 →image(视频源)coordinates_positive: 填入第一帧的正选点坐标coordinates_negative: 填入反选点坐标(可选)
- 参数:
frame_index:0(表示在第 0 帧添加这些点标注)object_index:0(单目标保持默认,多目标时递增)prev_inference_state: 首次追踪时留空;链式追加关键帧时接入上一步的inference_state
- 输出:
inference_state(携带了视频帧信息和标注状态)
6.2 Sam2VideoSegmentation(视频推理引擎)
- 添加节点:
SAM2→Sam2VideoSegmentation - 连线:
(Down)Load SAM2Model→sam2_modelSam2VideoSegmentationAddPoints的inference_state→inference_state
- 参数:
keep_model_loaded: 推荐开启(避免重复加载模型)
- 输出:
mask(完整视频的分割结果,批次形式)
6.3 标准视频工作流连线示意
[Load Video] ───────────────────────┐
│ │
↓ ↓
[Sam2VideoSegmentationAddPoints] ──→ [Sam2VideoSegmentation] ──→ [Preview / Save]
↑ ↑
[(Down)Load SAM2Model] [(Down)Load SAM2Model]
↑
[coordinates_positive / coordinates_negative]
第七步:人工纠正与多关键帧(Fast Muter 应用)
Sam2VideoSegmentationAddPoints 的 prev_inference_state 输入天然支持链式追加多帧标注。这是实现"第一帧标注 + 中途修正"的核心机制。
7.1 多关键帧链式结构(无修正时的标准链路)
如果你只想用第一帧推广到全视频,链路如下:
[Sam2VideoSegmentationAddPoints(第0帧标注)]
↓ inference_state
[Sam2VideoSegmentation]
↓ mask
[Preview / Save]
7.2 中途人工纠正链路
当视频较长、目标发生遮挡/形变导致追踪漂移时,可在中间帧追加标注:
[Sam2VideoSegmentationAddPoints(第0帧)]
↓ inference_state
[Sam2VideoSegmentationAddPoints(第45帧修正, prev_inference_state接入)]
↓ inference_state
[Sam2VideoSegmentation]
↓ mask
[Preview / Save]
操作方式:
- 第一个
AddPoints节点保持第一帧的标注不变 - 新建第二个
AddPoints节点:image: 接入Load Video的完整批次(与第一个相同)prev_inference_state: 接入第一个AddPoints的inference_stateframe_index: 修正帧号(如45)coordinates_positive: 修正后的点坐标
- 第二个
AddPoints的inference_state→Sam2VideoSegmentation - 重新运行,系统会以第 0 帧和第 45 帧为锚点,综合追踪整个视频
第八步:输出与可视化
8.1 预览 Mask
- 添加节点:
image→MaskToImage(将 mask 转为可视图像) - 再添加:
image→Preview Image - 连接追踪输出的 mask →
MaskToImage→Preview Image
8.2 合成视频(原图 + Mask 叠加)
- 添加节点:
video→VHS_VideoCombine(VideoHelperSuite) - 或:
image→Composite Mask/ImageCompositeMasked - 参数:
color:#FF0000(Mask 颜色)alpha:0.6(透明度)
8.3 保存 Mask 序列
- 添加节点:
image→Save Image(批量保存时每个 mask 会存为独立文件) - 或使用
VHS_SaveImageSequence - 建议设置
filename_prefix:mask_segment
第九步:用 Fast Muter 优化纠正 Workflow
在 comfyui-segment-anything-2 中,纠正本质上是通过 prev_inference_state 链式追加 Sam2VideoSegmentationAddPoints。Fast Muter 的作用是让你提前建好纠正节点但默认不执行,避免每次运行都走一遍修正链路。
9.1 创建 Fast Muter 节点
- 右键/双击空白处
- 找到:
rgthree→Fast Muter(或Fast Muter/Bypasser) - 该节点有一个开关按钮,点击可在 启用(绿色) 和 跳过/静音(红色) 之间切换
9.2 搭建纠正分支(推荐方案)
核心思路:将修正用的 Sam2VideoSegmentationAddPoints 节点插入到主链路的 prev_inference_state 路径上,默认通过 Fast Muter / Bypass 跳过它。
具体步骤:
-
主链路保持不变:
Sam2VideoSegmentationAddPoints(第0帧)→Sam2VideoSegmentation
-
插入修正节点:
- 新建第二个
Sam2VideoSegmentationAddPoints,命名为 "Fix_AddPoints" prev_inference_state:接入主链路第一个 AddPoints 的inference_stateimage: 接入Load Video的完整批次(与主链路相同)frame_index:45(示例问题帧)coordinates_positive: 填入修正后的点坐标- 该节点的
inference_state→Sam2VideoSegmentation
- 新建第二个
-
使用 Fast Muter 控制:
- 方案 A(Mute 节点输入):在 "Fix_AddPoints" 的
coordinates_positive输入前放置Fast Muter,默认红色(阻断)。需要纠正时变绿,坐标流入,修正生效。 - 方案 B(原生 Bypass):直接对 "Fix_AddPoints" 节点右键 →
Bypass。被 Bypass 时,ComfyUI 会跳过该节点,数据直接从上游流到下游(相当于无修正)。需要纠正时取消 Bypass。
- 方案 A(Mute 节点输入):在 "Fix_AddPoints" 的
9.3 实际操作流程
第一次运行:
1. Fix_AddPoints 被 Bypass / Fast Muter 关闭
2. 运行完整工作流(仅第 0 帧标注)
3. 检查 Preview Image / 输出视频
发现问题(如第 45 帧漂移):
1. 修改 "Fix_AddPoints" 的 frame_index = 45
2. 修改 "Fix_AddPoints" 的 coordinates_positive 为正确坐标
3. 取消 Bypass / Fast Muter 变绿(启用)
4. 重新点击「运行」
5. 系统以第 0 帧 + 第 45 帧为锚点,综合追踪整个视频
确认修复后:
1. 恢复 Bypass / Fast Muter 关闭
2. 保存最终工作流
第十步:工作流连线总览
按以下逻辑检查你的连线是否完整:
[Load Video] ───────────────────────┬───────────────────────────────────────────┐
│ │ │
↓ ↓ │
[Select Images] [Sam2VideoSegmentationAddPoints] │
│ (index=0) ↑ │
│ [(Down)Load SAM2Model] │
│ ↑ │
│ [coordinates_positive] │
↓ │ │
[Sam2Segmentation] ←───────────────┘ (可选:单帧预览测试) │
│ │
↓ ↓
[Preview Image] [Sam2VideoSegmentation]
│
┌─────────────────────────────────────────────────────────────────────────┘
│
├──→ [MaskToImage] ──→ [Preview Image]
└──→ [Save Image] / [VHS_VideoCombine]
纠正分支(可选,默认关闭):
[Sam2VideoSegmentationAddPoints(第0帧)] ──→ [Fix_AddPoints(第N帧)] ──→ [Sam2VideoSegmentation]
↑
[coordinates_positive(修正坐标)]
[Fast Muter / Bypass (控制开关)]
运行前检查清单
- SAM2 模型文件已下载到
ComfyUI/models/sam2/目录 - Florence-2 / Grounding DINO 模型已下载(如使用语义提示)
Load Video已选择有效视频路径Select Images的index=0正确提取了第一帧coordinates_positive的坐标格式与节点要求一致(归一化 0~1 或像素坐标)Sam2VideoSegmentationAddPoints的image接入的是完整视频批次,而非单帧Sam2VideoSegmentationAddPoints的frame_index指向了正确的标注帧Fast Muter/ 修正节点 Bypass 状态符合预期(首次运行应为关闭)- 输出节点的保存路径可写
常见问题速查
| 问题 | 排查方向 |
|---|---|
| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 |
| SAM2 节点报错显存不足 | 换 sam2.1_hiera_tiny.safetensors,或降低视频分辨率,或启用 fp16 |
| 追踪结果全黑/全白 | 检查 coordinates_positive 是否正确传入;检查坐标格式(0~1 vs 像素);确认 frame_index 与标注帧一致 |
| Florence-2 / Grounding DINO 无检测结果 | 降低 threshold,或简化 prompt(如只写 "person") |
| 修正后重新追踪无变化 | 确认修正节点已取消 Bypass / Fast Muter 已启用;确认修正节点的 prev_inference_state 正确接入上游 |
| 视频输出帧率不对 | 在 Load Video 和 VideoCombine 中统一设置 fps 参数 |
下一步建议
- 先跑通单帧分割:不连视频追踪链路,只用
Sam2Segmentation+Preview Image确认第一帧分割正确 - 再接入视频追踪:确认单帧无误后,再连
Sam2VideoSegmentationAddPoints+Sam2VideoSegmentation - 最后添加纠正分支:等标准流程跑通后再加入 RGThree Fast Muter 机制
- 保存工作流模板:
Workflow→Save(或 Ctrl+S),命名为VideoSeg_Template.json