vault backup: 2026-04-24 10:37:55

This commit is contained in:
2026-04-24 10:37:55 +08:00
parent a25c1985b7
commit 9b4f89fe45
3 changed files with 268 additions and 165 deletions

View File

@@ -4,8 +4,8 @@
"title": "Design ComfyUI video segmentation and tracking",
"titleGenerationStatus": "success",
"createdAt": 1776871296744,
"updatedAt": 1776995136544,
"lastResponseAt": 1776995136544,
"updatedAt": 1776997703748,
"lastResponseAt": 1776997703748,
"sessionId": "50e1c568-9493-4c86-8ca1-1f50b0f2e724",
"providerState": {
"providerSessionId": "50e1c568-9493-4c86-8ca1-1f50b0f2e724"
@@ -15,12 +15,12 @@
],
"usage": {
"model": "kimi-for-coding",
"inputTokens": 46448,
"inputTokens": 80085,
"cacheCreationInputTokens": 0,
"cacheReadInputTokens": 0,
"contextWindow": 200000,
"contextTokens": 46448,
"percentage": 23,
"contextTokens": 80085,
"percentage": 40,
"contextWindowIsAuthoritative": true
}
}

View File

@@ -68,85 +68,176 @@ tags:
---
## 第四步:创建交互式提示(三选一或组合)
## 第四步:SAM2 节点功能总览与选型
根据你的需求,添加以下**至少一种**提示节点。建议**三种都创建**,后期灵活切换。
`comfyui-segment-anything-2` 提供了 6 个核心节点。以下是它们的功能定位:
### 4.1 点标注(正选/反选)
### 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]` 表示第一个点是前景、第二个点是背景排除
**`(Down)Load SAM2Model`**
- **功能**:从本地加载或从服务器下载指定的 SAM2 模型文件
- **关键参数**
- `model`: `sam2.1_hiera_base_plus.safetensors`
- `segmentor`: 可选择单图或视频模式
- `device`: `cuda``cpu`
- `precision`: `fp16`(推荐)、`bf16``fp32`
> **注意**SAM2 的坐标通常是**归一化坐标**0~1而非像素坐标。部分节点包也支持像素坐标请查看节点说明。
### 4.2 静态图像分割类
### 4.2 框标注
**`Sam2Segmentation`**
- **功能**:标准单帧分割器。根据输入的正向/负向点坐标、检测框或初始遮罩生成分割结果
- **关键输入**`coordinates_positive`(正选点)、`coordinates_negative`(反选点)、`bboxes`
1. 添加节点:`SAM2``SAM2 Box Prompt``Box Prompt`
2. 参数:
- `box`: `[0.3, 0.3, 0.7, 0.8]`xyxy 格式,归一化坐标)
**`Sam2AutoSegmentation`**
- **功能**"分割一切"模式。无需手动点击,通过全图布设点阵(`points_per_side`)自动识别所有可能的物体
- **适用**:全自动抠出图中所有物体
### 4.3 语义提示(文本 → 检测框 → Mask
### 4.3 视频追踪与交互类
这是**自动化程度最高**的路径,需要两步:
**`Sam2VideoSegmentationAddPoints`**
- **功能**:视频工作流的"交互站"。允许你在特定帧(`frame_index`)添加点标注,并将标注注入到视频推理状态(`inference_state`)中
- **关键作用**
- 初始化视频追踪状态
- 通过 `prev_inference_state` 链式追加多帧标注(实现人工纠正)
- **关键输入**`image`(视频批次或关键帧)、`coordinates_positive``coordinates_negative``frame_index`
#### Step A文本转检测框
1. 添加节点:`Impact``GroundingDinoDetector``UltralyticsDetectorProvider`
- 选择 `Grounding DINO` 节点
2. 参数:
- `prompt`: `"a person"`(你的目标描述)
- `threshold`: `0.3`(置信度阈值)
**`Sam2VideoSegmentation`**
- **功能**:视频推理的核心引擎。接收模型和带有标注信息的 `inference_state`,执行跨帧自动追踪
- **输出**`mask`(完整视频的分割结果批次)
#### Step B检测框转 SAM2 框提示
1. `Grounding DINO``BOXES` 输出 → 连接到 `Box Prompt` 节点的 `box` 输入
2. 这样文本自动生成了空间位置信息
### 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` |
---
## 第五步:单帧分割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`
在接入视频追踪前,建议先用单帧节点快速验证标注位置是否准确。
### 5.1 手动点/框标注Sam2Segmentation
1. 添加节点:`SAM2``Sam2Segmentation`
2. 连线:
- `Select Images`(第一帧)的图像输出 → `Sam2Segmentation``image`
- `(Down)Load SAM2Model` 的模型输出 → `Sam2Segmentation``sam2_model`
- `coordinates_positive`: 填入你的正选点坐标(如 `[[0.45, 0.52]]`
- `coordinates_negative`: 填入反选点坐标(如 `[[0.55, 0.48]]`),如无则留空
- `bboxes`: 如使用检测框则填入,否则留空
3. 参数:
- `multimask_output`: `False`(一般场景单 mask 即可,复杂场景可开 True 再筛选
- `keep_model_loaded`: 可开启(若后续继续用同一模型
- `individual_objects`: 根据需求选择(多目标时开启)
4. 输出连到 `image``Preview Image` 查看效果
> **坐标格式提示**:请查看该节点说明,确认使用的是**归一化坐标**0~1还是**像素坐标**。
### 5.2 自动分割一切Sam2AutoSegmentation
如果你不想手动标注,可以使用全自动模式:
1. 添加节点:`SAM2``Sam2AutoSegmentation`
2. 连线:`Select Images``image``(Down)Load SAM2Model``sam2_model`
3. 参数调整(可选):
- `points_per_side`: 网格密度(默认 32越大越精细但越慢
- `pred_iou_thresh`: IOU 阈值过滤低质量 mask
4. 输出:`mask``segmented_image``bbox`
**此时你可以先点击「运行」测试单帧分割效果。**
---
## 第六步:视频追踪核心SAM2 Video Predictor
## 第六步:视频追踪核心链路
这是将单帧结果传播到全视频的关键节点
`comfyui-segment-anything-2` 的视频追踪由两个节点配合完成:`Sam2VideoSegmentationAddPoints`(注入提示)+ `Sam2VideoSegmentation`(执行追踪)
1. 添加节点:`SAM2``SAM2 Video Predictor``SAM2VideoPredictor`
### 6.1 Sam2VideoSegmentationAddPoints视频交互注入
1. 添加节点:`SAM2``Sam2VideoSegmentationAddPoints`
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
- `(Down)Load SAM2Model``sam2_model`
- `Load Video` 的完整图像批次 → `image`(视频源
- `coordinates_positive`: 填入第一帧的正选点坐标
- `coordinates_negative`: 填入反选点坐标(可选)
3. 参数:
- `frame_index`: `0`(表示在第 0 帧添加这些点标注)
- `object_index`: `0`(单目标保持默认,多目标时递增)
- `prev_inference_state`: **首次追踪时留空**;链式追加关键帧时接入上一步的 `inference_state`
4. 输出:`inference_state`(携带了视频帧信息和标注状态)
### 6.2 Sam2VideoSegmentation视频推理引擎
1. 添加节点:`SAM2``Sam2VideoSegmentation`
2. 连线:
- `(Down)Load SAM2Model``sam2_model`
- `Sam2VideoSegmentationAddPoints``inference_state``inference_state`
3. 参数:
- `keep_model_loaded`: 推荐开启(避免重复加载模型)
4. 输出:`mask`(完整视频的分割结果,批次形式)
### 6.3 标准视频工作流连线示意
```
[Load Video] ───────────────────────┐
│ │
↓ ↓
[Sam2VideoSegmentationAddPoints] ──→ [Sam2VideoSegmentation] ──→ [Preview / Save]
↑ ↑
[(Down)Load SAM2Model] [(Down)Load SAM2Model]
[coordinates_positive / coordinates_negative]
```
---
## 第七步:双向追踪Track Range
## 第七步:人工纠正与多关键帧Fast Muter 应用
部分 SAM2 节点包将追踪拆分为独立节点,部分内嵌在 Video Predictor 中
`Sam2VideoSegmentationAddPoints``prev_inference_state` 输入天然支持**链式追加**多帧标注。这是实现"第一帧标注 + 中途修正"的核心机制
### 情况 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` 或分别创建前向/后向节点
### 7.1 多关键帧链式结构(无修正时的标准链路)
### 情况 B追踪内嵌在 Video Predictor 中
- 若你的节点包版本直接输出 `mask_sequence`,则跳过此步,直接连到预览/保存节点。
如果你只想用第一帧推广到全视频,链路如下:
```
[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]
```
**操作方式**
1. 第一个 `AddPoints` 节点保持第一帧的标注不变
2. 新建第二个 `AddPoints` 节点:
- `image`: 接入 `Load Video` 的完整批次(与第一个相同)
- `prev_inference_state`: 接入第一个 `AddPoints``inference_state`
- `frame_index`: 修正帧号(如 `45`
- `coordinates_positive`: 修正后的点坐标
3. 第二个 `AddPoints``inference_state``Sam2VideoSegmentation`
4. 重新运行,系统会以第 0 帧和第 45 帧为锚点,综合追踪整个视频
---
@@ -174,61 +265,54 @@ tags:
---
## 第九步:人工纠正分支RGThree Fast Muter
## 第九步:用 Fast Muter 优化纠正 Workflow
这是提升迭代效率的核心技巧
`comfyui-segment-anything-2` 中,纠正本质上是通过 `prev_inference_state` 链式追加 `Sam2VideoSegmentationAddPoints``Fast Muter` 的作用是让你**提前建好纠正节点但默认不执行**,避免每次运行都走一遍修正链路
### 9.1 创建 Fast Muter 节点
1. 右键/双击空白处
2. 找到:`rgthree``Fast Muter`(或 `Fast Bypasser`
2. 找到:`rgthree``Fast Muter`(或 `Fast Muter/Bypasser`
3. 该节点有一个开关按钮,点击可在 **启用(绿色)****跳过/静音(红色)** 之间切换
### 9.2 搭建纠正分支
### 9.2 搭建纠正分支(推荐方案)
**思路**在主线旁创建一条「修正输入」的旁路默认关闭Bypass。发现问题时打开覆盖原追踪结果
**核心思路**将修正用的 `Sam2VideoSegmentationAddPoints` 节点插入到主链路的 `prev_inference_state` 路径上,默认通过 **Fast Muter / Bypass** 跳过它
#### 具体步骤:
1. **创建修正用的 Frame Picker**
- 再添加一个 `SelectFrames` 节点,命名为 "Fix_Frame"
- 参数 `frame_index`:留空或设为 `45`(示例问题帧)
1. **主链路保持不变**
- `Sam2VideoSegmentationAddPoints(第0帧)``Sam2VideoSegmentation`
2. **创建修正用的 Point Prompt**
- 再添加一个 `Point Prompt`,命名为 "Fix_Points"
- 填入修正后的坐标
2. **插入修正节点**
- 新建第二个 `Sam2VideoSegmentationAddPoints`,命名为 "Fix_AddPoints"
- `prev_inference_state`:接入主链路第一个 AddPoints 的 `inference_state`
- `image`: 接入 `Load Video` 的完整批次(与主链路相同)
- `frame_index`: `45`(示例问题帧)
- `coordinates_positive`: 填入修正后的点坐标
- 该节点的 `inference_state``Sam2VideoSegmentation`
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` 为修正帧
3. **使用 Fast Muter 控制**
- **方案 AMute 节点输入)**:在 "Fix_AddPoints" 的 `coordinates_positive` 输入前放置 `Fast Muter`,默认红色(阻断)。需要纠正时变绿,坐标流入,修正生效。
- **方案 B原生 Bypass**:直接对 "Fix_AddPoints" 节点右键 → `Bypass`。被 Bypass 时ComfyUI 会跳过该节点,数据直接从上游流到下游(相当于无修正)。需要纠正时取消 Bypass。
### 9.3 实际操作流程
```
第一次运行:
1. Fast Muter = 红色(关闭
2. 运行完整工作流
1. Fix_AddPoints 被 Bypass / Fast Muter 关闭
2. 运行完整工作流(仅第 0 帧标注)
3. 检查 Preview Image / 输出视频
发现问题(如第 45 帧漂移):
1. 修改 "Fix_Frame" 的 frame_index = 45
2. 修改 "Fix_Points" 的坐标为正确位置
3. 点击 Fast Muter → 绿色(启用)
1. 修改 "Fix_AddPoints" 的 frame_index = 45
2. 修改 "Fix_AddPoints" 的 coordinates_positive 为正确坐标
3. 取消 Bypass / Fast Muter 变绿(启用)
4. 重新点击「运行」
5. 系统从第 45 帧重新追踪,覆盖错误区间
5. 系统以第 0 帧 + 第 45 帧为锚点,综合追踪整个视频
确认修复后:
1. Fast Muter → 红色(关闭,避免影响后续运行)
1. 恢复 Bypass / Fast Muter 关闭
2. 保存最终工作流
```
@@ -239,19 +323,30 @@ tags:
按以下逻辑检查你的连线是否完整:
```
[Load Video] ──→ [SelectFrames(0)] ──→ [SAM2 Image Predictor] ←── [SAM2 Model Loader]
│ [Point Prompt / Box Prompt / Text→Grounding→Box]
[Load Video] ───────────────────────┬───────────────────────────────────────────┐
│ │
↓ ↓ │
[Select Images] [Sam2VideoSegmentationAddPoints] │
│ (index=0) ↑ │
│ [(Down)Load SAM2Model] │
│ ↑ │
│ [coordinates_positive] │
↓ │ │
[Sam2Segmentation] ←───────────────┘ (可选:单帧预览测试) │
│ │
[Fast Muter] ←── [SelectFrames(N)] ──→ [SAM2 Image Predictor(修正)]
(默认关闭)
│ [Fix Points]
[SAM2 Video Predictor] ←── initial_mask ───┘
[Preview Image] [Sam2VideoSegmentation]
├──→ [Track Forward] ──
└──→ [Track Backward] ─┼──→ [合并 Mask Sequence] ──→ [MaskToImage] ──→ [Preview Image]
└────────────────────────────────────────────────→ [Save Image]
┌─────────────────────────────────────────────────────────────────────────
├──→ [MaskToImage] ──→ [Preview Image]
└──→ [Save Image] / [VHS_VideoCombine]
纠正分支(可选,默认关闭):
[Sam2VideoSegmentationAddPoints(第0帧)] ──→ [Fix_AddPoints(第N帧)] ──→ [Sam2VideoSegmentation]
[coordinates_positive(修正坐标)]
[Fast Muter / Bypass (控制开关)]
```
---
@@ -259,12 +354,13 @@ tags:
## 运行前检查清单
- [ ] SAM2 模型文件已下载到 `ComfyUI/models/sam2/` 目录
- [ ] Grounding DINO 模型已下载(如使用语义提示)
- [ ] Florence-2 / Grounding DINO 模型已下载(如使用语义提示)
- [ ] `Load Video` 已选择有效视频路径
- [ ] `SelectFrames(0)` 正确提取了第一帧
- [ ] Prompt 节点的坐标格式与节点要求一致(归一化 0~1 或像素坐标)
- [ ] `SAM2 Video Predictor`的是**完整视频批次**,而非单帧
- [ ] `Fast Muter` 当前状态符合预期(首次运行应为关闭/红色)
- [ ] `Select Images``index=0` 正确提取了第一帧
- [ ] `coordinates_positive` 的坐标格式与节点要求一致(归一化 0~1 或像素坐标)
- [ ] `Sam2VideoSegmentationAddPoints``image`的是**完整视频批次**,而非单帧
- [ ] `Sam2VideoSegmentationAddPoints``frame_index` 指向了正确的标注帧
- [ ] `Fast Muter` / 修正节点 Bypass 状态符合预期(首次运行应为关闭)
- [ ] 输出节点的保存路径可写
---
@@ -274,17 +370,17 @@ tags:
| 问题 | 排查方向 |
|------|---------|
| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 |
| SAM2 节点报错显存不足 | 换 `sam2_hiera_tiny.pt`,或降低视频分辨率,或启用 fp16 |
| 追踪结果全黑/全白 | 检查 `initial_mask` 是否正确传入检查坐标格式0~1 vs 像素) |
| Grounding DINO 无检测结果 | 降低 `threshold`,或简化 prompt如只写 `"person"` |
| 修正后重新追踪无变化 | 确认 `Fast Muter` 已启用(绿色),且修正 mask 正确连入 Video Predictor |
| 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 参数 |
---
## 下一步建议
1. **先跑通单帧分割**:不连 Video Predictor只用 Image Predictor + Preview Image 确认第一帧分割正确
2. **再接入视频追踪**:确认单帧无误后,再连 SAM2 Video Predictor
1. **先跑通单帧分割**:不连视频追踪链路,只用 `Sam2Segmentation` + `Preview Image` 确认第一帧分割正确
2. **再接入视频追踪**:确认单帧无误后,再连 `Sam2VideoSegmentationAddPoints` + `Sam2VideoSegmentation`
3. **最后添加纠正分支**:等标准流程跑通后再加入 RGThree Fast Muter 机制
4. **保存工作流模板**`Workflow``Save`(或 Ctrl+S命名为 `VideoSeg_Template.json`

View File

@@ -17,7 +17,7 @@ tags:
| 节点包 | 作用 |
|-------|------|
| `ComfyUI-VideoHelperSuite` | 视频加载、帧提取、视频合成 |
| `ComfyUI-SAM2`(推荐 kijai 版) | SAM2 模型加载、图像/视频预测 |
| `ComfyUI-segment-anything-2` | SAM2 模型加载、图像/视频分割与追踪 |
| `ComfyUI-Impact-Pack` | Grounding DINO 语义检测 |
| `rgthree-comfy` | Fast Muter / Bypass 节点 |
@@ -52,47 +52,49 @@ tags:
### 第 3 步SAM2 模型加载器
- 搜索:`SAM2``SAM2 Model Loader`
- 搜索:`SAM2``(Down)Load SAM2Model`
- 拖到画布**中上方**,作为公共模型源
- 参数设置:
- `model_name`: `sam2_hiera_base_plus.pt`
- `model`: `sam2.1_hiera_base_plus.safetensors`
- `segmentor`: 根据用途选择(单图或视频)
- `device`: `cuda`
- `precision`: `fp16`(省显存)
### 第 4 步:创建提示节点(建议三种都建
### 第 4 步:单帧分割测试Sam2Segmentation
| 节点路径 | 参数示例 | 用途 |
|---------|---------|------|
| `SAM2``SAM2 Point Prompt` | `points=[[0.5,0.5]]`, `labels=[1]` | 点选目标1=正选0=反选) |
| `SAM2``SAM2 Box Prompt` | `box=[0.3,0.3,0.7,0.8]` | 框选目标 |
| `Impact``Grounding DINO` → 连到 Box Prompt | `prompt="a person"` | 语义提示转检测框 |
> 连线方式:从节点的**圆形输出端**拖拽到另一个节点的**圆形输入端**。
### 第 5 步:单帧分割测试
- 搜索:`SAM2``SAM2 Image Predictor`
- 搜索:`SAM2``Sam2Segmentation`
- 连接:
- `Get Image From Batch(0)` `image`
- `SAM2 Model Loader``sam2_model`
- `Point Prompt` / `Box Prompt``prompt`
- 再加一个 `image``Preview Image`,连到 Image Predictor 的输出
- `Select Images`(第一帧)`image`
- `(Down)Load SAM2Model``sam2_model`
- `coordinates_positive`: 填入正选点坐标(如 `[[0.45, 0.52]]`
- `coordinates_negative`: 填入反选点坐标(可选)
- `bboxes`: 如使用检测框则填入,否则留空
- 再加一个 `image``Preview Image`,连到 `Sam2Segmentation``mask` 输出
- **点击右上角「运行」**,先确认第一帧分割正确
### 第 6 步:视频追踪
### 第 5 步:视频追踪核心链路
- 搜索:`SAM2``SAM2 Video Predictor`
**5.1 Sam2VideoSegmentationAddPoints注入提示**
- 搜索:`SAM2``Sam2VideoSegmentationAddPoints`
- 连接:
- `SAM2 Model Loader``sam2_model`
- `Load Video` 的完整 `IMAGE`(批次,不是单帧)→ `images``video_frames`
- `SAM2 Image Predictor``mask``initial_mask`
- 设置 `frame_index = 0`
- `(Down)Load SAM2Model``sam2_model`
- `Load Video` 的完整图像批次 → `image`
- `coordinates_positive`: 第一帧的正选点坐标
- `coordinates_negative`: 反选点坐标(可选)
- 参数:
- `frame_index`: `0`(在第 0 帧添加标注)
- `object_index`: `0`(单目标默认)
- `prev_inference_state`: 首次追踪时留空
### 第 7 步:追踪输出
**5.2 Sam2VideoSegmentation执行追踪**
- 搜索:`SAM2``Sam2VideoSegmentation`
- 连接:
- `(Down)Load SAM2Model``sam2_model`
- `Sam2VideoSegmentationAddPoints``inference_state``inference_state`
- 参数:`keep_model_loaded` 推荐开启
- 输出:`mask`(完整视频的分割结果)
- 若 SAM2 包有 `SAM2 Track Forward/Backward`,将 Video Predictor 的 `state` 连入
- 若 Video Predictor 直接输出 `mask_sequence`,跳过此步
### 第 8 步:可视化与保存
### 第 6 步:可视化与保存
| 节点 | 路径 | 用途 |
|------|------|------|
@@ -101,23 +103,28 @@ tags:
| `Save Image` | `image``Save Image` | 保存 mask 序列 |
| `VHS_VideoCombine` | `video``VHS_VideoCombine` | 合成带遮罩的视频 |
### 第 9人工纠正分支RGThree Fast Muter
### 第 7人工纠正分支RGThree Fast Muter
- 搜索:`rgthree``Fast Muter`
- 在主线旁创建第二条「修正流」:
1. 再建一个 `Get Image From Batch``index` 填问题帧号(如 45
2. 再建一`SAM2 Point Prompt`,填修正坐标
3. 再建一个 `SAM2 Image Predictor`(修正版)
4. 修正 Image Predictor 的 `mask`**`Fast Muter`** → `SAM2 Video Predictor``correction_mask`(或额外提示输入)
- **默认点击 Fast Muter 使其变红**(关闭,不参与运算
- 需要修正时,**点击变绿**(启用),修改帧号和坐标,重新运行
- **核心思路**:利用 `Sam2VideoSegmentationAddPoints``prev_inference_state` 链式追加修正,默认通过 Fast Muter / Bypass 跳过修正节点
- 具体搭建:
1. 新建第二`Sam2VideoSegmentationAddPoints`,命名为 "Fix_AddPoints"
2. `prev_inference_state` 接入主链路第一个 AddPoints 的 `inference_state`
3. `image`: 接入 `Load Video` 的完整批次
4. `frame_index`: 问题帧号(如 `45`
5. `coordinates_positive`: 修正后的点坐标
6. 该节点的 `inference_state``Sam2VideoSegmentation`
7. 对该修正节点使用 **Bypass** 或在其坐标输入前加 **`Fast Muter`**,默认关闭
- **默认状态**:修正节点被跳过(红色/关闭),不参与运算
- **需要修正时**:取消 Bypass / Fast Muter 变绿(启用),修改帧号和坐标,重新运行
### 第 10 步:总连线检查
### 第 8 步:总连线检查
确保以下点:
- Video Predictor 吃的是**完整视频**,不是单帧
- Image Predictor第一帧只吃了 `index=0` 的单
- Fast Muter 当前状态符合预期
确保以下点:
- `Sam2VideoSegmentationAddPoints``image` 接入的是**完整视频批次**,不是单帧
- `Sam2VideoSegmentationAddPoints``frame_index` 指向了正确的标注
- `Sam2Segmentation`(单帧预览)只吃了 `index=0` 的单帧
- Fast Muter / 修正节点 Bypass 状态符合预期
---
@@ -125,9 +132,9 @@ tags:
不要一次性连完所有节点再运行!按以下顺序验证:
1. **只连第 1~5**(到 Preview Image→ 运行 → 确认第一帧分割正确
2. **接入第 6~8**Video Predictor + 输出)→ 运行 → 确认整段视频能跑通
3. **最后加第 9**Fast Muter 修正分支)→ 测试一次纠正流程
1. **只连第 1~4**(到 Preview Image→ 运行 → 确认第一帧分割正确
2. **接入第 5~6**VideoSegmentationAddPoints + VideoSegmentation + 输出)→ 运行 → 确认整段视频能跑通
3. **最后加第 7**Fast Muter 修正分支)→ 测试一次纠正流程
---
@@ -135,18 +142,18 @@ tags:
```
首次运行:
Fast Muter = 红色(关闭
Fix_AddPoints 被 Bypass / Fast Muter 关闭
→ 点击「运行」→ 检查 Preview Image
发现第 N 帧错了:
1. 修改修正 Frame Picker 的 index = N
2. 修改修正 Point Prompt 的坐标
3. Fast Muter = 绿色(打开)
1. 修改 "Fix_AddPoints" 的 frame_index = N
2. 修改 "Fix_AddPoints" 的 coordinates_positive 为正确坐标
3. 取消 Bypass / Fast Muter = 绿色(打开)
4. 再次点击「运行」
5. 系统从第 N 帧重新追踪
5. 系统以第 0 帧 + 第 N 帧为锚点,综合追踪整个视频
修好了:
Fast Muter = 红色(关闭)
恢复 Bypass / Fast Muter = 红色(关闭)
→ 保存最终工作流模板
```
@@ -157,8 +164,8 @@ tags:
| 问题 | 排查方向 |
|------|---------|
| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 |
| SAM2 节点报错显存不足 | 换 `sam2_hiera_tiny.pt`,或降低视频分辨率,或启用 fp16 |
| 追踪结果全黑/全白 | 检查 `initial_mask` 是否正确传入检查坐标格式0~1 vs 像素) |
| Grounding DINO 无检测结果 | 降低 `threshold`,或简化 prompt如只写 `"person"` |
| 修正后重新追踪无变化 | 确认 `Fast Muter` 已启用(绿色),且修正 mask 正确连入 Video Predictor |
| 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 参数 |