# ComfyUI-SecNodes_Ultra_Fast
**Repository Path**: kyle9088/ComfyUI-SecNodes_Ultra_Fast
## Basic Information
- **Project Name**: ComfyUI-SecNodes_Ultra_Fast
- **Description**: https://github.com/lihaoyun6/ComfyUI-SecNodes_Ultra_Fast
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-24
- **Last Updated**: 2026-01-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ComfyUI SeC Nodes Ultra Fast
这是一套为 **SeC (Segment Concept)** 设计的 ComfyUI 自定义节点
采用了由 OpenIXCLab 开发的 SeC-4B 模型,这是目前顶尖的视频对象分割技术,性能超越 SAM 2.1
> 关于安装和模型下载的教程,请向下滚动。
[\[📄 English\]](./README.md)
## 更新日志
### v1.2\_ultra\_fast (2025-10-16) 🎉 体验极致的显存控制与速度提升
**新特性:**
- **极低的显存需求**: 在 >= 3GB 显存的显卡上也能流畅运行 FP16 权重且无明显速度损失
- **无需磁盘缓存**: 不再使用磁盘作为帧缓存,从而保持处理过程完全在内存中进行
- **高速权重加载**: 权重加载速度提升10倍 (单文件加载速度从100秒提升至10秒)
### v1.1 (2025-10-13) - 单文件模型 & FP8 支持
**新特性:**
- **单文件模型格式**: 只需下载一个文件,告别分片的4文件格式
- FP16 (7.35GB) - 推荐默认选项
- ~~FP8 (3.97GB) - 适用于显存受限的系统 (需要 RTX 30系或更新的显卡)~~ (已弃用)
- BF16 (7.35GB) - FP16 的替代方案
- FP32 (14.14GB) - 全精度
- **FP8 量化支持**: 使用 torchao + Marlin 内核实现自动的仅权重(W8A16)量化
- 在实际使用中可节省 1.5-2GB 显存
- 需要 RTX 30系或更新的显卡 (Ampere架构及以上)
- 在旧款 GPU 上会自动回退到 FP16
**变更:**
- 模型加载器现在支持多种精度格式并能自动检测。同时保留了对分片模型的兼容性。
- `requirements.txt` 中增加了 `torchao>=0.1.0` 以支持 FP8
- 自动检测 GPU 能力以判断是否兼容 FP8
**下载:** 新的单文件模型可在此处获取 [https://huggingface.co/VeryAladeen/Sec-4B](https://huggingface.co/VeryAladeen/Sec-4B/tree/main)
## 什么是 SeC?
**SeC (Segment Concept, 分割概念)** 是视频对象分割领域的一项突破性进展,它从简单的特征匹配转向了**高层次的概念理解**。与主要依赖视觉相似性的 SAM 2.1 不同,SeC 使用**大型视觉语言模型 (LVLM)** 来从概念上理解*什么*是对象,从而实现更稳健的追踪,具体优势包括:
- **语义理解**: 通过概念识别对象,而不仅仅是外观
- **场景复杂度自适应**: 自动平衡语义推理与特征匹配
- **卓越的稳健性**: 在处理遮挡、外观变化和复杂场景方面优于 SAM 2.1
- **SOTA 性能**: 在 SeCVOS 基准测试中比 SAM 2.1 高出 11.8 分
### SeC 的工作原理
1. **视觉定位**: 你在某一帧上提供初始提示 (点/边界框/蒙版)
2. **概念提取**: SeC 的 LVLM 分析对象以建立语义理解
3. **智能追踪**: 动态地同时使用语义推理和视觉特征
4. **关键帧库**: 维护对象的多个不同视角,以实现稳健的概念理解
最终结果?SeC 在快速外观变化、遮挡和复杂多对象场景等挑战性情况下,能更可靠地追踪对象。
## 演示
https://github.com/user-attachments/assets/5cc6677e-4a9d-4e55-801d-b92305a37725
*示例: SeC 在场景变化和动态移动中追踪对象*
https://github.com/user-attachments/assets/9e99d55c-ba8e-4041-985e-b95cbd6dd066
*示例: 在某些场景中,SAM 未能正确追踪到狗*
## 功能特性
- **SeC 模型加载器**: 通过简单的设置加载 SeC 模型
- **SeC 视频分割**: 使用视觉提示进行顶尖水平的视频分割
- **坐标绘制器**: 在分割前可视化坐标点
- **完全独立**: 所有推理代码都已打包 - 无需外部代码库
- **双向追踪**: 从任何帧向任何方向进行追踪
## 安装
### 方式一: ComfyUI-Manager (推荐 - 最简单)
1. **安装 ComfyUI-Manager** (如果还没有的话):
- 从此获取: https://github.com/ltdrdata/ComfyUI-Manager
2. **下载一个模型** (见下面的模型下载部分)
3. **安装 SeC 节点**:
- 在 ComfyUI 中打开 ComfyUI Manager
- 点击 "Install via Git URL"
- 将 `https://github.com/lihaoyun6/ComfyUI-SecNodes_Ultra_Fast` 粘贴到文本框中
- 点击 "确认" 进行安装
4. **完成!** SeC 节点将出现在 "SeC" 类别下
---
### 方式二: 手动安装
#### 步骤 1: 安装自定义节点
```bash
cd ComfyUI/custom_nodes
git clone https://github.com/9nate-drake/Comfyui-SecNodes
```
#### 步骤 2: 安装依赖项
**ComfyUI 便携版 (Windows):**
```bash
cd ComfyUI/custom_nodes/Comfyui-SecNodes
../../python_embeded/python.exe -m pip install -r requirements.txt
```
**标准 Python 环境 (Linux/Mac):**
```bash
cd ComfyUI/custom_nodes/Comfyui-SecNodes
pip install -r requirements.txt
```
#### 步骤 3: 重启 ComfyUI
节点将出现在 "SeC" 类别下。
## 模型下载
**根据你的显存/质量需求,下载以下任一模型格式:**
SeC 模型加载器会自动检测并让你选择使用哪个模型。
从 [https://huggingface.co/VeryAladeen/Sec-4B](https://huggingface.co/VeryAladeen/Sec-4B) 下载并放置到你的 `ComfyUI/models/sams/` 文件夹中:
- 👍🏻**SeC-4B-fp16.safetensors** (推荐) - 7.35 GB
- 质量和大小的最佳平衡
- 适用于所有 CUDA GPU
- 配合自动CPU卸载,可以运行在 3GB 可用显存 + 6GB 可用内存上运行
- ~~**SeC-4B-fp8.safetensors** - 3.97 GB~~
- *已弃用*
- **SeC-4B-bf16.safetensors** (备选) - 7.35 GB
- FP16 的替代品,对某些 GPU 更友好
- **SeC-4B-fp32.safetensors** (全精度) - 14.14 GB
- 最高精度,最高显存占用
---
#### 备选: 原始分片权重
**仅适用于喜欢 OpenIXCLab 原始格式的用户 🙅🏻♀️不推荐普通用户下载:**
```bash
cd ComfyUI/models/sams
# 使用 huggingface-cli 下载 (推荐)
huggingface-cli download OpenIXCLab/SeC-4B --local-dir SeC-4B
# 或者使用 git lfs
git lfs clone https://huggingface.co/OpenIXCLab/SeC-4B
```
**详情:**
- 大小: ~14.14 GB (分片为4个文件)
- 精度: FP32
- 下载内容包含所有配置文件
## 系统要求
- **Python**: 3.10-3.12 (推荐 3.12)
- Python 3.13: 不推荐 - 处于实验性支持阶段,存在已知的依赖安装问题
- **PyTorch**: 2.6.0+ (ComfyUI 自带)
- **CUDA**: 11.8+ 用于 GPU 加速
- **CUDA GPU**: 推荐 (支持 CPU,但速度会慢很多)
- **显存**: 最低 3GB VRAM+ 6GB RAM 可用
- 启用 `enable_cpu_offload` 可以动态控制显存占用, 配合手动显存限制可以进一步节省显存
- 启用 `offload_video_to_cpu` 可以显著降低显存占用 (速度约慢3%)
**关于 CPU 模式的说明:**
- CPU 推理会自动使用 float32 精度 (CPU 不支持 bfloat16/float16)
- 预计性能会远慢于 GPU (根据硬件不同,慢约10-20倍)
- 不建议用于生产环境,主要用于测试或无 GPU 的系统
**Flash Attention 2 (可选):**
- 提供约2倍的速度提升,但需要特定硬件
- **GPU 要求**: 仅限 Ampere/Ada/Hopper 架构 (RTX 30/40 系列, A100, H100)
- 不适用于 RTX 20 系列 (Turing) 或更早的 GPU
- **CUDA**: 需要 12.0+
- **Windows + Python 3.12**: 使用预编译的 wheels 或禁用 flash attention
- 如果 Flash Attention 不可用,节点会自动回退到标准 attention
## 节点参考
### 1. SeC Model Loader (SeC 模型加载器)
加载并配置 SeC 模型以进行推理。自动检测 `ComfyUI/models/sams/` 目录中可用的模型。
| 参数 | 类型 | 默认值 | 描述 |
|-----------|------|---------|-------------|
| **model_file** | CHOICE | 第一个可用的模型 | 选择要加载的模型:
• FP32 (全精度 - ~14.5GB)
• FP16 (半精度 - 7.35GB)
• BF16 (Brain Float - ~7GB)
• FP8 (8位浮点 - 3.97GB)
• SeC-4B (分片/原始 - ~14GB)
**注意:** 每个模型都会自动使用其原生精度 |
| **device** | CHOICE | `auto` | 设备选择 (动态检测可用 GPU):
• `auto`: 如果有 cuda:0 则使用,否则使用 CPU (推荐)
• `cpu`: 强制使用 CPU (自动转换为 float32)
• `cuda:0`, `cuda:1`, 等: 指定 GPU |
| *use_flash_attn* | BOOLEAN | True | 启用 Flash Attention 2 以加速推理。
**注意:** 对 FP32/FP8 精度会自动禁用 (需要 FP16/BF16) |
| *enable_cpu_offload* | BOOLEAN | True | 自动卸载权重, 有助于节省显存 |
| *vram_limit* | INT | 0 | 显存占用上限, 0=自动分配 (单位为GB, 是参考值, 不绝对准确) |
| *allow_mask_overlap* | BOOLEAN | True | 允许对象重叠 (若要严格分离则禁用) |
**输出:** `model`
**说明:**
- **模型选择**: 动态显示 `ComfyUI/models/sams/` 目录中可用的模型
- 至少下载一种模型格式 (见上方的模型下载部分)
- 模型会以其**原生精度**加载 (FP8 保持为 FP8,不会向上转换!)
- 这保留了较小模型格式的所有内存优势
- **配置文件**: 已捆绑在此仓库中 - 单文件模型无需单独下载
- **CPU 模式**: 自动将模型转换为 float32 精度 (CPU 限制)。CPU 推理比 GPU 慢得多 (~10-20倍)。
- **Flash Attention**: 对 FP32 和 FP8 模型自动禁用 (需要 FP16/BF16)。将改用标准 attention。
---
### 2. SeC Video Segmentation (SeC 视频分割)
在视频帧之间分割和追踪对象。
| 参数 | 类型 | 默认值 | 描述 |
|-----------|------|---------|-------------|
| **model** | MODEL | - | 从加载器输出的 SeC 模型 |
| **frames** | IMAGE | - | 作为 IMAGE 批次的视频帧 |
| *positive_points* | STRING | "" | JSON 格式: `'[{"x": 100, "y": 200}]'` |
| *negative_points* | STRING | "" | JSON 格式: `'[{"x": 50, "y": 50}]'` |
| *bbox* | STRING | "" | 边界框: `"x1,y1,x2,y2"` |
| *input_mask* | MASK | - | 二值蒙版输入 |
| *tracking_direction* | CHOICE | `forward` | forward / backward / bidirectional (前向/后向/双向) |
| *annotation_frame_idx* | INT | 0 | 应用提示的帧的索引 |
| *object_id* | INT | 1 | 用于多对象追踪的唯一 ID |
| *max_frames_to_track* | INT | -1 | 最大追踪帧数 (-1 = 全部) |
| *mllm_memory_size* | INT | 12 | 用于语义理解的关键帧数量 (影响场景变化时的计算量,不影响显存)。原始论文使用 7。 |
| *offload_video_to_cpu* | BOOLEAN | False | 将视频帧卸载到 CPU (显著节省 GPU 内存,速度慢约3%) |
| *auto_unload_model* | BOOLEAN | True | 分割后自动从显存和内存中卸载模型。如果需要连续进行多次分割,请设为 false。 |
**输出:** `masks` (MASK), `object_ids` (INT)
**重要说明:**
- 至少提供一个视觉提示 (点、边界框或蒙版)
- **输出的帧数始终与输入匹配**: 如果你输入100帧,你会得到100个蒙版
- 追踪范围之外的帧将是空的 (黑色) 蒙版
- 示例: 100帧, annotation_frame_idx=50, direction=forward (前向) → 0-49帧为空,50-99帧被追踪
- 示例: 100帧, annotation_frame_idx=50, direction=backward (后向) → 0-50帧被追踪,51-99帧为空
- 示例: 100帧, annotation_frame_idx=50, direction=bidirectional (双向) → 所有 0-99 帧都被追踪
**输入组合行为:**
你可以组合不同的输入类型以实现强大的分割控制:
| 输入组合 | 行为 |
|-------------------|----------|
| **仅点** | 标准的基于点的分割 |
| **仅边界框** | 分割边界框内最突出的对象 |
| **仅蒙版** | 追踪蒙版区域 |
| **边界框 + 点** | **两阶段优化**: 边界框确定初始区域,然后点在该区域内优化分割 |
| **蒙版 + 正向点** | 只有**蒙版内部**的正向点会被用来优化要分割的蒙版区域部分 |
| **蒙版 + 负向点** | 所有负向点都用于从蒙版中排除区域 |
| **蒙版 + 正向 + 负向** | 蒙版内的正向点优化区域,负向点排除区域 |
**应用案例:**
- **边界框 + 点优化**: 在一个人周围画一个边界框,然后在他们的衬衫上加一个点,这样就只分割衬衫而不是整个人
- **粗略蒙版 + 精准点**: 在一个人周围画一个粗略的蒙版,然后在他们的脸上添加正向点以聚焦分割
- **蒙版 + 负向排除**: 蒙版一个对象,在不需要的部分添加负向点 (例如,从人物蒙版中排除一只手)
- **点过滤**: 蒙版边界外的正向点会被自动忽略,防止意外选择
**⚠ 关于蒙版与负向点的重要说明:**
- 负向点最好放置在蒙版区域**内部或附近**
- 离蒙版太远的负向点 (>50像素) 可能会导致意外结果或分割为空
- 如果负向点离蒙版太远,你会在控制台收到一条警告
---
### 3. Coordinate Plotter (坐标绘制器)
在图像上可视化坐标点以便调试。
| 参数 | 类型 | 默认值 | 描述 |
|-----------|------|---------|-------------|
| **coordinates** | STRING | `'[{"x": 100, "y": 100}]'` | 要绘制的 JSON 坐标 |
| *image* | IMAGE | - | 可选图像 (会覆盖宽度/高度设置) |
| *point_shape* | CHOICE | `circle` | circle / square / triangle (圆形/方形/三角形) |
| *point_size* | INT | 10 | 点的大小,单位像素 (1-100) |
| *point_color* | STRING | `#00FF00` | 十六进制 `#FF0000` 或 RGB `255,0,0` |
| *width* | INT | 512 | 如果没有图像,画布的宽度 |
| *height* | INT | 512 | 如果没有图像,画布的高度 |
**输出:** `image` (IMAGE)
## 追踪方向
| 方向 | 最佳适用场景 | 行为 |
|-----------|----------|----------|
| **forward (前向)** | 标准视频,对象在开头出现 | 从第 N 帧 → 结尾 |
| **backward (后向)** | 对象在后面出现,反向分析 | 从第 N 帧 → 开头 |
| **bidirectional (双向)** | 对象在中间最清晰,复杂场景 | 从第 N 帧 → 双向进行 |
### 理解 mllm_memory_size
`mllm_memory_size` 参数控制 SeC 的大型视觉语言模型用于语义理解的历史关键帧数量:
- **作用**: 存储帧引用 (第一帧 + 最近的 N-1 帧),供 LVLM 在场景变化时进行分析
- **显存影响**: 无 - 测试表明,3-20 的值使用相似的显存 (对于典型视频约 11-13GB)
- **计算影响**: 更高的值意味着在场景变化时有更多的帧通过视觉编码器处理
- **质量权衡**: 更多的关键帧 = 在复杂场景中对对象概念的理解更好,但超过约 10-12 帧后收益递减
- **原始研究**: SeC 论文使用了 7 并达到了 SOTA 性能 (比 SAM 2.1 高 11.8 分),强调关键帧的“质量而非数量”
**推荐值:**
- **默认 (12)**: 平衡的方法 - 比论文的 7 提供更多上下文,但不过度
- **低 (5-7)**: 在简单视频上推理更快,与原始研究设置相符
- **高 (15-20)**: 为非常复杂的视频提供最大的语义上下文 (无显存惩罚)
**为什么它不影响显存?** 该参数存储的是轻量级的帧索引和蒙版数组,而不是完整的帧张量。当场景变化发生时,帧是按需从磁盘加载以供 LVLM 处理的。底层的 SAM2 架构最多支持 22 帧。
## 版权归属
此节点实现了由 OpenIXCLab 开发的 **SeC-4B** 模型。
- **模型仓库**: [OpenIXCLab/SeC-4B](https://huggingface.co/OpenIXCLab/SeC-4B)
- **论文**: [arXiv:2507.15852](https://arxiv.org/abs/2507.15852)
- **官方实现**: [github.com/OpenIXCLab/SeC](https://github.com/OpenIXCLab/SeC)
- **许可证**: Apache 2.0
**数据集**: 原始工作包括 [SeCVOS Benchmark](https://huggingface.co/datasets/OpenIXCLab/SeCVOS) 数据集。
## 已知局限性
**仅蒙版输入**: 只使用蒙版或边界框可能会导致追踪不够稳定。这是由于底层的 SAM2 和 MLLM 组件处理蒙版和边界框输入的方式所致。为获得最佳效果,请将蒙版/边界框与坐标点结合使用以实现更精确的控制。
## 故障排除
**CUDA out of memory (CUDA 显存不足)**:
- 启用 `enable_cpu_offload` 自动分配, 还可以手动设置显存阈值, 最低 3GB 即可运行
- 启用 `offload_video_to_cpu` (节省 2-3GB 显存,速度仅慢约3%)
- 同时确保你正在使用 fp8 变体以最大程度节省显存
- 一次处理更少的帧 (将视频分割成更小的批次)
- 查看上方针对你的硬件等级的 GPU 显存建议
**推理缓慢**:
- 在模型加载器中启用 `use_flash_attn` (需要 Flash Attention 2)
- 如果你有足够的显存,禁用 `offload_video_to_cpu`
---
*完全独立的 ComfyUI 节点 - 只需安装即可开始分割!* 🎉