12 KiB
12 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(推荐,省显存)
将这个节点放在画布中上部,作为公共模型源。
第四步:创建交互式提示(三选一或组合)
根据你的需求,添加以下至少一种提示节点。建议三种都创建,后期灵活切换。
4.1 点标注(正选/反选)
- 添加节点:
SAM2 →SAM2 Point Prompt或Point Prompt` - 参数设置:
points:[[0.5, 0.5]](归一化坐标,格式为 JSON 列表)labels:[1](1= 正选前景,0= 反选背景)- 示例:
points = [[0.45, 0.52], [0.55, 0.48]],labels = [1, 0]表示第一个点是前景、第二个点是背景排除
注意:SAM2 的坐标通常是归一化坐标(0~1),而非像素坐标。部分节点包也支持像素坐标,请查看节点说明。
4.2 框标注
- 添加节点:
SAM2→SAM2 Box Prompt或Box Prompt - 参数:
box:[0.3, 0.3, 0.7, 0.8](xyxy 格式,归一化坐标)
4.3 语义提示(文本 → 检测框 → Mask)
这是自动化程度最高的路径,需要两步:
Step A:文本转检测框
- 添加节点:
Impact→GroundingDinoDetector或UltralyticsDetectorProvider- 选择
Grounding DINO节点
- 选择
- 参数:
prompt:"a person"(你的目标描述)threshold:0.3(置信度阈值)
Step B:检测框转 SAM2 框提示
Grounding DINO的BOXES输出 → 连接到Box Prompt节点的box输入- 这样文本自动生成了空间位置信息
第五步:单帧分割(SAM2 Image Predictor)
- 添加节点:
SAM2→SAM2 Image Predictor - 连线如下:
SelectFrames的图像输出 →SAM2 Image Predictor的imageSAM2 Model Loader的模型输出 →SAM2 Image Predictor的sam2_modelPoint Prompt/Box Prompt的提示输出 →SAM2 Image Predictor的prompt
- 参数:
multimask_output:False(一般场景单 mask 即可,复杂场景可开 True 再筛选)
此时你可以先点击「运行」测试单帧分割效果。
第六步:视频追踪核心(SAM2 Video Predictor)
这是将单帧结果传播到全视频的关键节点。
- 添加节点:
SAM2→SAM2 Video Predictor或SAM2VideoPredictor - 连线:
SAM2 Model Loader→sam2_modelLoad Video的完整图像批次 →video_frames(或images)SAM2 Image Predictor输出的mask→initial_maskSelectFrames的帧索引(或通过常量节点设置frame_index=0)→frame_index
- 内部逻辑:该节点会对视频所有帧预编码,并在第 0 帧注入你刚才分割的 mask
第七步:双向追踪(Track Range)
部分 SAM2 节点包将追踪拆分为独立节点,部分内嵌在 Video Predictor 中。
情况 A:有独立追踪节点
- 添加节点:
SAM2→SAM2 Track Forward和SAM2 Track Backward - 或者查找:
SAM2→Track Range/Track Bidirectional - 连线:
SAM2 Video Predictor的state输出 →Track Range的video_state - 参数:
start_frame: 关键帧索引(如 0)direction:both或分别创建前向/后向节点
情况 B:追踪内嵌在 Video Predictor 中
- 若你的节点包版本直接输出
mask_sequence,则跳过此步,直接连到预览/保存节点。
第八步:输出与可视化
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
第九步:人工纠正分支(RGThree Fast Muter)
这是提升迭代效率的核心技巧。
9.1 创建 Fast Muter 节点
- 右键/双击空白处
- 找到:
rgthree→Fast Muter(或Fast Bypasser) - 该节点有一个开关按钮,点击可在 启用(绿色) 和 跳过/静音(红色) 之间切换
9.2 搭建纠正分支
思路:在主线旁创建一条「修正输入」的旁路,默认关闭(Bypass)。发现问题时打开,覆盖原追踪结果。
具体步骤:
-
创建修正用的 Frame Picker:
- 再添加一个
SelectFrames节点,命名为 "Fix_Frame" - 参数
frame_index:留空或设为45(示例问题帧)
- 再添加一个
-
创建修正用的 Point Prompt:
- 再添加一个
Point Prompt,命名为 "Fix_Points" - 填入修正后的坐标
- 再添加一个
-
创建修正用的 SAM2 Image Predictor:
- 添加第二个
SAM2 Image Predictor,命名为 "SAM2_Fix" - 输入:
Fix_Frame的图像 +Fix_Points+ 公共SAM2 Model Loader
- 添加第二个
-
插入 Fast Muter 控制修正流:
- 在 "SAM2_Fix" 的
mask输出后,连接到一个Fast Muter节点 Fast Muter的输出 →SAM2 Video Predictor的correction_mask或additional_hint输入- 默认状态:点击
Fast Muter使其变为红色(Muted/跳过),此时修正分支不参与运算 - 需要修正时:点击变绿(启用),修正 mask 被注入追踪器
- 在 "SAM2_Fix" 的
-
创建重新追踪控制:
- 如果 SAM2 Video Predictor 支持
retrack_from_frame输入,将Fix_Frame的帧索引连入 - 或使用第二个
Track Range节点,设置start_frame为修正帧
- 如果 SAM2 Video Predictor 支持
9.3 实际操作流程
第一次运行:
1. Fast Muter = 红色(关闭)
2. 运行完整工作流
3. 检查 Preview Image / 输出视频
发现问题(如第 45 帧漂移):
1. 修改 "Fix_Frame" 的 frame_index = 45
2. 修改 "Fix_Points" 的坐标为正确位置
3. 点击 Fast Muter → 绿色(启用)
4. 重新点击「运行」
5. 系统从第 45 帧重新追踪,覆盖错误区间
确认修复后:
1. Fast Muter → 红色(关闭,避免影响后续运行)
2. 保存最终工作流
第十步:工作流连线总览
按以下逻辑检查你的连线是否完整:
[Load Video] ──→ [SelectFrames(0)] ──→ [SAM2 Image Predictor] ←── [SAM2 Model Loader]
│ ↑
│ [Point Prompt / Box Prompt / Text→Grounding→Box]
│ │
│ [Fast Muter] ←── [SelectFrames(N)] ──→ [SAM2 Image Predictor(修正)]
│ (默认关闭) ↑
│ [Fix Points]
↓
[SAM2 Video Predictor] ←── initial_mask ───┘
│
├──→ [Track Forward] ──┐
└──→ [Track Backward] ─┼──→ [合并 Mask Sequence] ──→ [MaskToImage] ──→ [Preview Image]
└────────────────────────────────────────────────→ [Save Image]
运行前检查清单
- SAM2 模型文件已下载到
ComfyUI/models/sam2/目录 - Grounding DINO 模型已下载(如使用语义提示)
Load Video已选择有效视频路径SelectFrames(0)正确提取了第一帧- Prompt 节点的坐标格式与节点要求一致(归一化 0~1 或像素坐标)
SAM2 Video Predictor接收的是完整视频批次,而非单帧Fast Muter当前状态符合预期(首次运行应为关闭/红色)- 输出节点的保存路径可写
常见问题速查
| 问题 | 排查方向 |
|---|---|
| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 |
| SAM2 节点报错显存不足 | 换 sam2_hiera_tiny.pt,或降低视频分辨率,或启用 fp16 |
| 追踪结果全黑/全白 | 检查 initial_mask 是否正确传入;检查坐标格式(0~1 vs 像素) |
| Grounding DINO 无检测结果 | 降低 threshold,或简化 prompt(如只写 "person") |
| 修正后重新追踪无变化 | 确认 Fast Muter 已启用(绿色),且修正 mask 正确连入 Video Predictor |
| 视频输出帧率不对 | 在 Load Video 和 VideoCombine 中统一设置 fps 参数 |
下一步建议
- 先跑通单帧分割:不连 Video Predictor,只用 Image Predictor + Preview Image 确认第一帧分割正确
- 再接入视频追踪:确认单帧无误后,再连 SAM2 Video Predictor
- 最后添加纠正分支:等标准流程跑通后再加入 RGThree Fast Muter 机制
- 保存工作流模板:
Workflow→Save(或 Ctrl+S),命名为VideoSeg_Template.json