--- title: ComfyUI 视频分割系统 - 界面搭建操作指南 date: 2026-04-22 tags: - comfyUI - 操作指南 - SAM2 - 工作流搭建 --- # ComfyUI 视频分割系统 - 界面搭建操作指南 > 前置假设:你已安装以下节点包。如未安装,请先通过 ComfyUI Manager 安装: > - `ComfyUI-Manager`(管理器本身) > - `ComfyUI-VideoHelperSuite`(视频加载/保存) > - `ComfyUI-SAM2`(SAM2 分割,推荐 kijai 版) > - `ComfyUI-Impact-Pack`(Grounding DINO / 检测器) > - `rgthree-comfy`(Fast Muter / Bypass 节点) --- ## 第一步:打开节点添加菜单 在画布空白处 **双击鼠标左键**,或 **右键单击空白处** → 选择 `添加节点`。 你会看到一个分类菜单(如 `image`, `video`, `SAM2`, `rgthree` 等)。 --- ## 第二步:搭建视频输入端 ### 2.1 加载视频 1. 右键/双击空白处 2. 依次找到:`video` → `Load Video (Upload)` 或 `Load Video (Path)` - 如果你用 VideoHelperSuite,路径通常是 `video` → `VHS_LoadVideo` 3. 点击创建节点 4. 节点出现在画布上,把它拖到左上角区域 ### 2.2 提取第一帧(关键帧选择器) 1. 添加节点:`video` → `VHS_SelectFrames` 或 `Get Image From Batch` - 如果没有专用选帧节点,可用原生 `ImageBatch` 配合索引拆分 2. 连接:`Load Video` 的 `IMAGE` 输出 → `SelectFrames` 的 `image` 输入 3. 设置参数:`frame_index = 0`(表示取第一帧) > **操作技巧**:ComfyUI 中,鼠标从一个节点的**圆形输出端**拖拽到另一个节点的**圆形输入端**即可完成连线。 --- ## 第三步:放置 SAM2 模型加载器 这是整个系统的核心引擎。 1. 右键/双击空白处 2. 找到分类:`SAM2` 或 `segment_anything` 3. 选择节点:`SAM2 Model Loader`(名称可能为 `SAM2ModelLoader` 或 `SAM2::Model Loader`) 4. 参数设置: - `model_name`: 选择 `sam2_hiera_base_plus.pt`(精度与速度平衡) - `device`: `cuda`(若显存不足可选 `cpu`,但极慢) - `precision`: `fp16`(推荐,省显存) 将这个节点放在画布**中上部**,作为公共模型源。 --- ## 第四步:创建交互式提示(三选一或组合) 根据你的需求,添加以下**至少一种**提示节点。建议**三种都创建**,后期灵活切换。 ### 4.1 点标注(正选/反选) 1. 添加节点:`SAM2` → `SAM2 Point Prompt` 或 `Point Prompt` 2. 参数设置: - `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 框标注 1. 添加节点:`SAM2` → `SAM2 Box Prompt` 或 `Box Prompt` 2. 参数: - `box`: `[0.3, 0.3, 0.7, 0.8]`(xyxy 格式,归一化坐标) ### 4.3 语义提示(文本 → 检测框 → Mask) 这是**自动化程度最高**的路径,需要两步: #### Step A:文本转检测框 1. 添加节点:`Impact` → `GroundingDinoDetector` 或 `UltralyticsDetectorProvider` - 选择 `Grounding DINO` 节点 2. 参数: - `prompt`: `"a person"`(你的目标描述) - `threshold`: `0.3`(置信度阈值) #### Step B:检测框转 SAM2 框提示 1. `Grounding DINO` 的 `BOXES` 输出 → 连接到 `Box Prompt` 节点的 `box` 输入 2. 这样文本自动生成了空间位置信息 --- ## 第五步:单帧分割(SAM2 Image Predictor) 1. 添加节点:`SAM2` → `SAM2 Image Predictor` 2. 连线如下: - `SelectFrames` 的图像输出 → `SAM2 Image Predictor` 的 `image` - `SAM2 Model Loader` 的模型输出 → `SAM2 Image Predictor` 的 `sam2_model` - `Point Prompt` / `Box Prompt` 的提示输出 → `SAM2 Image Predictor` 的 `prompt` 3. 参数: - `multimask_output`: `False`(一般场景单 mask 即可,复杂场景可开 True 再筛选) **此时你可以先点击「运行」测试单帧分割效果。** --- ## 第六步:视频追踪核心(SAM2 Video Predictor) 这是将单帧结果传播到全视频的关键节点。 1. 添加节点:`SAM2` → `SAM2 Video Predictor` 或 `SAM2VideoPredictor` 2. 连线: - `SAM2 Model Loader` → `sam2_model` - `Load Video` 的完整图像批次 → `video_frames`(或 `images`) - `SAM2 Image Predictor` 输出的 `mask` → `initial_mask` - `SelectFrames` 的帧索引(或通过常量节点设置 `frame_index=0`)→ `frame_index` 3. **内部逻辑**:该节点会对视频所有帧预编码,并在第 0 帧注入你刚才分割的 mask --- ## 第七步:双向追踪(Track Range) 部分 SAM2 节点包将追踪拆分为独立节点,部分内嵌在 Video Predictor 中。 ### 情况 A:有独立追踪节点 1. 添加节点:`SAM2` → `SAM2 Track Forward` 和 `SAM2 Track Backward` 2. 或者查找:`SAM2` → `Track Range` / `Track Bidirectional` 3. 连线:`SAM2 Video Predictor` 的 `state` 输出 → `Track Range` 的 `video_state` 4. 参数: - `start_frame`: 关键帧索引(如 0) - `direction`: `both` 或分别创建前向/后向节点 ### 情况 B:追踪内嵌在 Video Predictor 中 - 若你的节点包版本直接输出 `mask_sequence`,则跳过此步,直接连到预览/保存节点。 --- ## 第八步:输出与可视化 ### 8.1 预览 Mask 1. 添加节点:`image` → `MaskToImage`(将 mask 转为可视图像) 2. 再添加:`image` → `Preview Image` 3. 连接追踪输出的 mask → `MaskToImage` → `Preview Image` ### 8.2 合成视频(原图 + Mask 叠加) 1. 添加节点:`video` → `VHS_VideoCombine`(VideoHelperSuite) 2. 或:`image` → `Composite Mask` / `ImageCompositeMasked` 3. 参数: - `color`: `#FF0000`(Mask 颜色) - `alpha`: `0.6`(透明度) ### 8.3 保存 Mask 序列 1. 添加节点:`image` → `Save Image`(批量保存时每个 mask 会存为独立文件) 2. 或使用 `VHS_SaveImageSequence` 3. 建议设置 `filename_prefix`: `mask_segment` --- ## 第九步:人工纠正分支(RGThree Fast Muter) 这是提升迭代效率的核心技巧。 ### 9.1 创建 Fast Muter 节点 1. 右键/双击空白处 2. 找到:`rgthree` → `Fast Muter`(或 `Fast Bypasser`) 3. 该节点有一个开关按钮,点击可在 **启用(绿色)** 和 **跳过/静音(红色)** 之间切换 ### 9.2 搭建纠正分支 **思路**:在主线旁创建一条「修正输入」的旁路,默认关闭(Bypass)。发现问题时打开,覆盖原追踪结果。 #### 具体步骤: 1. **创建修正用的 Frame Picker**: - 再添加一个 `SelectFrames` 节点,命名为 "Fix_Frame" - 参数 `frame_index`:留空或设为 `45`(示例问题帧) 2. **创建修正用的 Point Prompt**: - 再添加一个 `Point Prompt`,命名为 "Fix_Points" - 填入修正后的坐标 3. **创建修正用的 SAM2 Image Predictor**: - 添加第二个 `SAM2 Image Predictor`,命名为 "SAM2_Fix" - 输入:`Fix_Frame` 的图像 + `Fix_Points` + 公共 `SAM2 Model Loader` 4. **插入 Fast Muter 控制修正流**: - 在 "SAM2_Fix" 的 `mask` 输出后,连接到一个 `Fast Muter` 节点 - `Fast Muter` 的输出 → `SAM2 Video Predictor` 的 `correction_mask` 或 `additional_hint` 输入 - **默认状态**:点击 `Fast Muter` 使其变为红色(Muted/跳过),此时修正分支不参与运算 - **需要修正时**:点击变绿(启用),修正 mask 被注入追踪器 5. **创建重新追踪控制**: - 如果 SAM2 Video Predictor 支持 `retrack_from_frame` 输入,将 `Fix_Frame` 的帧索引连入 - 或使用第二个 `Track Range` 节点,设置 `start_frame` 为修正帧 ### 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 参数 | --- ## 下一步建议 1. **先跑通单帧分割**:不连 Video Predictor,只用 Image Predictor + Preview Image 确认第一帧分割正确 2. **再接入视频追踪**:确认单帧无误后,再连 SAM2 Video Predictor 3. **最后添加纠正分支**:等标准流程跑通后再加入 RGThree Fast Muter 机制 4. **保存工作流模板**:`Workflow` → `Save`(或 Ctrl+S),命名为 `VideoSeg_Template.json`