SplazMatte is a video matting and point tracking tool built with NiceGUI + SAM2/SAM3 + MatAnyone/VideoMaMa + CoTracker3.
Key capabilities:
- Interactive keyframe annotation (positive/negative clicks)
- Full-video mask propagation (
SAM2/SAM3) - Fine-grained video matting (
MatAnyone/VideoMaMa) - Point trajectory tracking (
CoTracker3) with After Effects export - Queue-based batch processing
- Optional cloud upload (Cloudflare R2 / Aliyun OSS) and Feishu notifications
- Web UI workflow: upload video -> annotate keyframes -> propagate masks -> run matting -> view/download outputs
- Propagation models
SAM2: stable default choiceSAM3: supports text prompt detection (for example,"person in red")
- Matting engines
MatAnyone: faster, suitable for common scenesVideoMaMa: finer edges, suitable for hair/complex boundaries
- Point tracking (separate
/trackingpage)CoTracker3: supports Online (forward) and Offline (bidirectional) modes- Three input modes: manual click, SAM-assisted object selection, full-frame grid
- Export results as After Effects keyframe data (
.txt)
- Outputs:
alpha.mp4andforeground.mp4(matting); tracking result video and AE keyframe data (tracking)
- macOS / Linux (Windows can use
start.bat) - Conda (Miniconda/Anaconda)
- Python 3.11 (created by setup script)
ffmpeg/ffprobejust(recommended command runner) — a command runner that stores project recipes in ajustfile; this project uses it forsetup,app,download-models, etc. See just for installation instructions (Homebrew, Cargo, pre-built binaries, etc.).
Device selection is automatic:
CUDA->MPS(Apple Silicon) ->CPU.
git clone <your-repo-url>
cd SplazMattejust setupOr force platform:
just setup --mps
# or
just setup --cudaDownload all:
just download-modelsDownload specific models:
just download-models --sam2
just download-models --sam3
just download-models --matanyone
just download-models --videomama
just download-models --cotrackerVerify downloads:
just download-models --verify
SAM3is a gated HuggingFace model. Runhuggingface-cli loginand request access first. CoTracker3 requires its source code undersdks/co-tracker/. The setup script clones it automatically.
cp .env.example .envCommon variables:
SPLAZMATTE_PORT: web port (default7870)SPLAZMATTE_STORAGE_SECRET: NiceGUI storage secret (change in production)SPLAZMATTE_STORAGE_BACKEND:r2/oss/ empty (disable upload)SPLAZMATTE_FEISHU_WEBHOOK_URL: Feishu bot webhookSPLAZMATTE_LAN_IP: optional manual LAN IP override
Storage-specific variables:
- R2:
SPLAZMATTE_R2_* - OSS:
SPLAZMATTE_OSS_*
Start Web UI:
just appCustom port:
just app-port 7870Open http://localhost:<port>.
Recommended matting flow (/):
- Upload a video
- Annotate keyframes (positive/negative clicks)
- Save keyframes (cover motion/occlusion changes)
- Run propagation (
SAM2/SAM3) - Choose matting engine and run matting
- Review
AlphaandForegroundoutputs - Add tasks to queue for batch processing
Point tracking flow (/tracking):
- Upload a video (or restore a previous tracking session)
- Select tracking points using one of three methods:
- Manual click: click directly on the preview frame to add query points
- SAM-assisted: use SAM2/SAM3 to select an object, then auto-generate grid points inside the mask
- Grid mode: enable grid mode to track a uniform point grid across the entire frame
- Save keyframes (supports multi-frame query points)
- Configure tracking options (forward-only or bidirectional)
- Run tracking (
CoTracker3) - Preview the result video with tracked trajectories
- Download result video and After Effects keyframe data (
.txt)
just list # list sessions and status
just run <session_id> # process one session
just run-queue # process all pending queue tasksjust app
just setup
just install-deps
just download-models
just device
just check
just clean
just clean-logs
just versionSplazMatte/
├── app.py # NiceGUI entry (matting + tracking pages)
├── app_logic.py # matting UI interaction logic
├── cotracker_logic.py # tracking UI interaction logic
├── tracking_runner.py # tracking task execution
├── tracking_export.py # After Effects keyframe data export
├── tracking_session_store.py # tracking session persistence
├── run.py # CLI entry
├── matting_runner.py # matting pipeline execution core
├── session_store.py # matting session persistence
├── queue_logic.py # queue logic (matting + tracking)
├── engines/ # SAM2/SAM3/MatAnyone/VideoMaMa/CoTracker wrappers
├── pipeline/ # frame extraction and video encoding
├── scripts/ # setup and model download scripts
├── models/ # local model weights
├── workspace/ # sessions, intermediates, outputs
└── sdks/ # upstream source (co-tracker cloned by setup.sh)
sdks/co-trackeris cloned automatically duringjust setup. Other directories undersdks/are for source reference only.
Matting sessions are under workspace/sessions/<session_id>/:
source.*: source videoframes/: extracted framesmasks/: keyframe and propagated masksalpha.mp4: alpha videoforeground.mp4: foreground videometa.json/state.json: session metadata/state
Tracking sessions are under workspace/tracking_sessions/<session_id>/:
frames/: extracted frameskeyframes/*.json: saved query point keyframesraw_tracks.npy/raw_visibility.npy: raw tracking resultsmeta.json/state.json: session metadata/state
Tracking results are under workspace/tracking_results/:
tracking_*.mp4: result video with visualized trajectoriesae_export_*.txt: After Effects keyframe data
Queue state is stored in workspace/queue.json.
ffmpeg/ffprobenot found- Install ffmpeg and ensure it is available in
PATH.
- Install ffmpeg and ensure it is available in
- SAM3 download fails
- Run
huggingface-cli loginand confirm access tofacebook/sam3.
- Run
- Out of memory / slow performance
- Prefer
MatAnyone, reduce video duration/resolution. - For
VideoMaMa, reducebatch_sizeandoverlap.
- Prefer
- Cloud upload missing
- Check
SPLAZMATTE_STORAGE_BACKENDand related credentials.
- Check
- No Feishu notification
- Check
SPLAZMATTE_FEISHU_WEBHOOK_URL.
- Check
- CoTracker import error /
No module named 'cotracker'- Run
just setupto clonesdks/co-tracker, or manually:git clone https://github.com/facebookresearch/co-tracker.git sdks/co-tracker
- Run
- CoTracker model weights missing
- Run
python scripts/download_models.py --cotrackerto downloadscaled_online.pthandscaled_offline.pth.
- Run
- CoTracker slow on Apple Silicon
- CoTracker uses CPU on MPS by default (MPS lacks
grid_sampler_3d). This is expected behavior.
- CoTracker uses CPU on MPS by default (MPS lacks
- Commands are managed by
justfile; usejust <recipe>whenever possible. - Main runtime paths:
- Matting:
app.py->app_logic.py/queue_logic.py->matting_runner.py - Tracking:
app.py(/tracking) ->cotracker_logic.py->tracking_runner.py->engines/cotracker_engine.py
- Matting:
- Recommended iteration style: validate in CLI first, then integrate into UI.
SplazMatte 是一个基于 NiceGUI + SAM2/SAM3 + MatAnyone/VideoMaMa + CoTracker3 的视频抠像与轨迹追踪工具。
核心能力:
- 关键帧交互标注(正/负点点击)
- 全视频遮罩传播(
SAM2/SAM3) - 精细视频抠像(
MatAnyone/VideoMaMa) - 点轨迹追踪(
CoTracker3),支持导出 After Effects 关键帧数据 - 队列批处理
- 可选云上传(Cloudflare R2 / 阿里云 OSS)和飞书通知
- Web UI 工作流:上传视频 -> 标注关键帧 -> 运行传播 -> 开始抠像 -> 查看/下载结果
- 传播模型
SAM2:默认稳定方案SAM3:支持文本提示检测(例如"person in red")
- 抠像引擎
MatAnyone:速度更快,适合常规场景VideoMaMa:边缘更细腻,适合毛发/复杂边界
- 点轨迹追踪(独立
/tracking页面)CoTracker3:支持 Online(前向)和 Offline(双向)两种模式- 三种输入方式:手动点击、SAM 辅助选择目标、全帧网格
- 导出 After Effects 关键帧数据(
.txt)
- 输出结果:
alpha.mp4与foreground.mp4(抠像);追踪结果视频与 AE 关键帧数据(追踪)
- macOS / Linux(Windows 可使用
start.bat) - Conda(Miniconda/Anaconda)
- Python 3.11(由安装脚本自动创建)
ffmpeg/ffprobejust(推荐的命令入口)— 一个命令运行器,将项目命令保存在justfile中;本项目用它执行setup、app、download-models等。安装方法请参阅 just(支持 Homebrew、Cargo、预编译二进制等)。
设备会自动选择:
CUDA->MPS(Apple Silicon)->CPU。
git clone <your-repo-url>
cd SplazMattejust setup或手动指定平台:
just setup --mps
# 或
just setup --cuda下载全部:
just download-models按需下载:
just download-models --sam2
just download-models --sam3
just download-models --matanyone
just download-models --videomama
just download-models --cotracker校验下载:
just download-models --verify
SAM3是 HuggingFace gated 模型,首次下载前请先执行huggingface-cli login并申请访问权限。 CoTracker3 需要sdks/co-tracker/下的源码,安装脚本会自动克隆。
cp .env.example .env常用变量:
SPLAZMATTE_PORT:Web 端口(默认7870)SPLAZMATTE_STORAGE_SECRET:NiceGUI 存储密钥(生产环境务必修改)SPLAZMATTE_STORAGE_BACKEND:r2/oss/ 空(关闭上传)SPLAZMATTE_FEISHU_WEBHOOK_URL:飞书机器人 webhookSPLAZMATTE_LAN_IP:可选,手动覆盖局域网 IP
存储相关变量:
- R2:
SPLAZMATTE_R2_* - OSS:
SPLAZMATTE_OSS_*
启动 Web UI:
just app指定端口:
just app-port 7870打开 http://localhost:<port>。
抠像流程(/):
- 上传视频
- 在关键帧上点击标注(正/负点)
- 保存关键帧(覆盖运动与遮挡变化)
- 运行传播(
SAM2/SAM3) - 选择抠像引擎并执行抠像
- 查看
Alpha与Foreground结果 - 需要批处理时,将任务加入队列统一执行
轨迹追踪流程(/tracking):
- 上传视频(或恢复之前的追踪会话)
- 通过以下三种方式之一选择追踪点:
- 手动点击:在预览帧上直接点击添加查询点
- SAM 辅助:使用 SAM2/SAM3 选择目标对象,自动在 Mask 内生成网格点
- 网格模式:启用网格模式,在整帧上追踪均匀分布的点
- 保存关键帧(支持多帧查询点)
- 配置追踪选项(前向追踪或双向追踪)
- 运行追踪(
CoTracker3) - 预览带有可视化轨迹的结果视频
- 下载结果视频与 After Effects 关键帧数据(
.txt)
just list # 查看会话与状态
just run <session_id> # 处理单个会话
just run-queue # 处理队列中所有待处理任务just app
just setup
just install-deps
just download-models
just device
just check
just clean
just clean-logs
just versionSplazMatte/
├── app.py # NiceGUI 入口(抠像 + 追踪页面)
├── app_logic.py # 抠像 UI 交互逻辑
├── cotracker_logic.py # 追踪 UI 交互逻辑
├── tracking_runner.py # 追踪任务执行
├── tracking_export.py # After Effects 关键帧数据导出
├── tracking_session_store.py # 追踪会话持久化
├── run.py # CLI 入口
├── matting_runner.py # 抠像推理执行核心
├── session_store.py # 抠像 Session 持久化
├── queue_logic.py # 队列逻辑(抠像 + 追踪)
├── engines/ # SAM2/SAM3/MatAnyone/VideoMaMa/CoTracker 封装
├── pipeline/ # 抽帧与编码工具
├── scripts/ # 环境安装与模型下载脚本
├── models/ # 本地模型权重
├── workspace/ # 会话、中间产物、输出
└── sdks/ # 上游源码(co-tracker 由 setup.sh 自动克隆)
sdks/co-tracker在执行just setup时自动克隆。sdks/下其他目录仅供参考上游实现。
抠像会话位于 workspace/sessions/<session_id>/:
source.*:原始视频frames/:抽帧结果masks/:关键帧与传播遮罩alpha.mp4:透明度视频foreground.mp4:前景视频meta.json/state.json:会话元数据与状态
追踪会话位于 workspace/tracking_sessions/<session_id>/:
frames/:抽帧结果keyframes/*.json:已保存的查询点关键帧raw_tracks.npy/raw_visibility.npy:原始追踪结果meta.json/state.json:会话元数据与状态
追踪结果位于 workspace/tracking_results/:
tracking_*.mp4:带可视化轨迹的结果视频ae_export_*.txt:After Effects 关键帧数据
队列状态保存在 workspace/queue.json。
- 提示
ffmpeg/ffprobenot found- 安装 ffmpeg,并确保已加入
PATH。
- 安装 ffmpeg,并确保已加入
- SAM3 下载失败
- 执行
huggingface-cli login,并确认有facebook/sam3访问权限。
- 执行
- 显存不足 / 速度慢
- 优先使用
MatAnyone,降低视频时长或分辨率。 - 使用
VideoMaMa时可调小batch_size、overlap。
- 优先使用
- 云上传无结果
- 检查
SPLAZMATTE_STORAGE_BACKEND和对应凭证。
- 检查
- 飞书不通知
- 检查
SPLAZMATTE_FEISHU_WEBHOOK_URL。
- 检查
- CoTracker 导入报错 /
No module named 'cotracker'- 执行
just setup以克隆sdks/co-tracker,或手动执行:git clone https://github.com/facebookresearch/co-tracker.git sdks/co-tracker
- 执行
- CoTracker 模型权重缺失
- 执行
python scripts/download_models.py --cotracker下载scaled_online.pth和scaled_offline.pth。
- 执行
- CoTracker 在 Apple Silicon 上运行较慢
- CoTracker 在 MPS 上默认使用 CPU(MPS 不支持
grid_sampler_3d),这是预期行为。
- CoTracker 在 MPS 上默认使用 CPU(MPS 不支持
- 项目命令统一在
justfile中,建议优先使用just <recipe>。 - 主要运行链路:
- 抠像:
app.py->app_logic.py/queue_logic.py->matting_runner.py - 追踪:
app.py(/tracking)->cotracker_logic.py->tracking_runner.py->engines/cotracker_engine.py
- 抠像:
- 建议采用最小验证单元:先 CLI 验证,再接入 UI。