From 7d3c36050bc1ec02fc18bfa26d449b09912b3777 Mon Sep 17 00:00:00 2001 From: ravi Date: Sat, 25 Apr 2026 16:23:09 +0530 Subject: [PATCH] first version --- CLAUDE.md | 7 + README.md | 213 + docs/BUILD_RELEASE.md | 226 + docs/HF_DEPLOY_OFFLINE.md | 226 + docs/POLYGON_SMOOTHING.md | 164 + files/README.md | 120 + files/client_example.py | 50 + files/sam3_server.py | 381 ++ requirements.txt | 4 + sam-tool-tauri/.gitignore | 14 + sam-tool-tauri/index.html | 12 + sam-tool-tauri/package-lock.json | 2149 +++++++ sam-tool-tauri/package.json | 27 + sam-tool-tauri/src-tauri/.gitignore | 2 + sam-tool-tauri/src-tauri/Cargo.lock | 5365 +++++++++++++++++ sam-tool-tauri/src-tauri/Cargo.toml | 35 + sam-tool-tauri/src-tauri/build.rs | 3 + .../src-tauri/capabilities/default.json | 11 + sam-tool-tauri/src-tauri/icons/128x128.png | Bin 0 -> 1969 bytes sam-tool-tauri/src-tauri/icons/128x128@2x.png | Bin 0 -> 3342 bytes sam-tool-tauri/src-tauri/icons/32x32.png | Bin 0 -> 663 bytes sam-tool-tauri/src-tauri/icons/icon.png | Bin 0 -> 2866 bytes sam-tool-tauri/src-tauri/src/annotate.rs | 169 + sam-tool-tauri/src-tauri/src/annotation.rs | 43 + sam-tool-tauri/src-tauri/src/coco.rs | 359 ++ sam-tool-tauri/src-tauri/src/decoder.rs | 351 ++ sam-tool-tauri/src-tauri/src/extract.rs | 188 + sam-tool-tauri/src-tauri/src/lib.rs | 307 + sam-tool-tauri/src-tauri/src/main.rs | 6 + sam-tool-tauri/src-tauri/src/sam.rs | 222 + sam-tool-tauri/src-tauri/src/settings.rs | 71 + sam-tool-tauri/src-tauri/src/state.rs | 14 + sam-tool-tauri/src-tauri/src/user.rs | 76 + sam-tool-tauri/src-tauri/src/video.rs | 106 + sam-tool-tauri/src-tauri/tauri.conf.json | 33 + sam-tool-tauri/src/App.tsx | 104 + sam-tool-tauri/src/assets/seek-logo.svg | 20 + sam-tool-tauri/src/assets/seek-mark.svg | 12 + .../src/components/annotate/ClassList.tsx | 98 + .../annotate/DeleteConfirmModal.tsx | 99 + .../src/components/annotate/ImageList.tsx | 68 + .../src/components/annotate/LabelPicker.tsx | 277 + sam-tool-tauri/src/components/auth/Login.tsx | 106 + .../src/components/extract/FrameCanvas.tsx | 26 + .../src/components/extract/overlay.ts | 149 + .../src/components/shell/ErrorBoundary.tsx | 42 + .../src/components/shell/SettingsModal.tsx | 274 + .../src/components/shell/TopNav.tsx | 80 + sam-tool-tauri/src/index.css | 2063 +++++++ sam-tool-tauri/src/ipc.ts | 94 + sam-tool-tauri/src/main.tsx | 10 + sam-tool-tauri/src/modes/AnnotateMode.tsx | 1825 ++++++ sam-tool-tauri/src/modes/ExtractMode.tsx | 648 ++ sam-tool-tauri/src/types.ts | 109 + sam-tool-tauri/src/vite-env.d.ts | 1 + sam-tool-tauri/tsconfig.json | 21 + sam-tool-tauri/tsconfig.node.json | 11 + sam-tool-tauri/vite.config.ts | 18 + sam2-backend/.gitignore | 7 + sam2-backend/README.md | 191 + sam2-backend/adapters/__init__.py | 10 + sam2-backend/adapters/base.py | 34 + sam2-backend/adapters/sam2_adapter.py | 82 + sam2-backend/adapters/sam3_adapter.py | 206 + sam2-backend/adapters/utils.py | 141 + sam2-backend/models.yaml | 69 + sam2-backend/registry.py | 141 + sam2-backend/requirements.txt | 13 + sam2-backend/run.sh | 32 + sam2-backend/server.py | 345 ++ sam2/sam2 | 1 + sam2/sam_extract.py | 500 ++ sam2/sam_image_mask_extract.py | 152 + 73 files changed, 19033 insertions(+) create mode 100644 CLAUDE.md create mode 100644 README.md create mode 100644 docs/BUILD_RELEASE.md create mode 100644 docs/HF_DEPLOY_OFFLINE.md create mode 100644 docs/POLYGON_SMOOTHING.md create mode 100644 files/README.md create mode 100644 files/client_example.py create mode 100644 files/sam3_server.py create mode 100644 requirements.txt create mode 100644 sam-tool-tauri/.gitignore create mode 100644 sam-tool-tauri/index.html create mode 100644 sam-tool-tauri/package-lock.json create mode 100644 sam-tool-tauri/package.json create mode 100644 sam-tool-tauri/src-tauri/.gitignore create mode 100644 sam-tool-tauri/src-tauri/Cargo.lock create mode 100644 sam-tool-tauri/src-tauri/Cargo.toml create mode 100644 sam-tool-tauri/src-tauri/build.rs create mode 100644 sam-tool-tauri/src-tauri/capabilities/default.json create mode 100644 sam-tool-tauri/src-tauri/icons/128x128.png create mode 100644 sam-tool-tauri/src-tauri/icons/128x128@2x.png create mode 100644 sam-tool-tauri/src-tauri/icons/32x32.png create mode 100644 sam-tool-tauri/src-tauri/icons/icon.png create mode 100644 sam-tool-tauri/src-tauri/src/annotate.rs create mode 100644 sam-tool-tauri/src-tauri/src/annotation.rs create mode 100644 sam-tool-tauri/src-tauri/src/coco.rs create mode 100644 sam-tool-tauri/src-tauri/src/decoder.rs create mode 100644 sam-tool-tauri/src-tauri/src/extract.rs create mode 100644 sam-tool-tauri/src-tauri/src/lib.rs create mode 100644 sam-tool-tauri/src-tauri/src/main.rs create mode 100644 sam-tool-tauri/src-tauri/src/sam.rs create mode 100644 sam-tool-tauri/src-tauri/src/settings.rs create mode 100644 sam-tool-tauri/src-tauri/src/state.rs create mode 100644 sam-tool-tauri/src-tauri/src/user.rs create mode 100644 sam-tool-tauri/src-tauri/src/video.rs create mode 100644 sam-tool-tauri/src-tauri/tauri.conf.json create mode 100644 sam-tool-tauri/src/App.tsx create mode 100644 sam-tool-tauri/src/assets/seek-logo.svg create mode 100644 sam-tool-tauri/src/assets/seek-mark.svg create mode 100644 sam-tool-tauri/src/components/annotate/ClassList.tsx create mode 100644 sam-tool-tauri/src/components/annotate/DeleteConfirmModal.tsx create mode 100644 sam-tool-tauri/src/components/annotate/ImageList.tsx create mode 100644 sam-tool-tauri/src/components/annotate/LabelPicker.tsx create mode 100644 sam-tool-tauri/src/components/auth/Login.tsx create mode 100644 sam-tool-tauri/src/components/extract/FrameCanvas.tsx create mode 100644 sam-tool-tauri/src/components/extract/overlay.ts create mode 100644 sam-tool-tauri/src/components/shell/ErrorBoundary.tsx create mode 100644 sam-tool-tauri/src/components/shell/SettingsModal.tsx create mode 100644 sam-tool-tauri/src/components/shell/TopNav.tsx create mode 100644 sam-tool-tauri/src/index.css create mode 100644 sam-tool-tauri/src/ipc.ts create mode 100644 sam-tool-tauri/src/main.tsx create mode 100644 sam-tool-tauri/src/modes/AnnotateMode.tsx create mode 100644 sam-tool-tauri/src/modes/ExtractMode.tsx create mode 100644 sam-tool-tauri/src/types.ts create mode 100644 sam-tool-tauri/src/vite-env.d.ts create mode 100644 sam-tool-tauri/tsconfig.json create mode 100644 sam-tool-tauri/tsconfig.node.json create mode 100644 sam-tool-tauri/vite.config.ts create mode 100644 sam2-backend/.gitignore create mode 100644 sam2-backend/README.md create mode 100644 sam2-backend/adapters/__init__.py create mode 100644 sam2-backend/adapters/base.py create mode 100644 sam2-backend/adapters/sam2_adapter.py create mode 100644 sam2-backend/adapters/sam3_adapter.py create mode 100644 sam2-backend/adapters/utils.py create mode 100644 sam2-backend/models.yaml create mode 100644 sam2-backend/registry.py create mode 100644 sam2-backend/requirements.txt create mode 100755 sam2-backend/run.sh create mode 100644 sam2-backend/server.py create mode 160000 sam2/sam2 create mode 100644 sam2/sam_extract.py create mode 100644 sam2/sam_image_mask_extract.py diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..094034c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,7 @@ + +| Principle | Addresses | +|-----------|-----------| +| **Think Before Coding** | Wrong assumptions, hidden confusion, missing tradeoffs | +| **Simplicity First** | Overcomplication, bloated abstractions | +| **Surgical Changes** | Orthogonal edits, touching code you shouldn't | +| **Goal-Driven Execution** | Leverage through tests-first, verifiable success criteria | diff --git a/README.md b/README.md new file mode 100644 index 0000000..9c14f99 --- /dev/null +++ b/README.md @@ -0,0 +1,213 @@ +# SAM-Tool + +Desktop video-frame extraction + image annotation tool, with optional +SAM 2 / SAM 3 segmentation backend. Built to replace an earlier +Python/Tkinter prototype (`sam_tool_v2.py`) for YOLO-style training +dataset prep. + +``` +┌──────────────────┐ HTTP ┌──────────────────┐ +│ sam-tool-tauri │ ◀───────────────▶ │ sam2-backend │ +│ (Tauri/Rust + UI)│ /predict, etc │ (FastAPI + GPU) │ +└──────────────────┘ └──────────────────┘ + │ │ + ▼ ▼ + local images + SAM 2.x / SAM 3 + sibling JSONs weights on disk +``` + +The two halves can run on the same machine or separate boxes — point the +desktop app at any reachable backend URL from **Settings**. + +--- + +## Layout + +``` +SAM-Tool/ +├── sam-tool-tauri/ # Desktop app (Tauri 2, React 18, TS, Vite) +│ ├── src/ # Frontend +│ ├── src-tauri/ # Rust commands (video, decoder, IPC) +│ └── package.json # `npm run tauri dev` / `tauri build` +│ +├── sam2-backend/ # FastAPI HTTP server (SAM 2 + SAM 3) +│ ├── server.py # /, /models, /predict +│ ├── registry.py # Lazy-load + single-resident cache +│ ├── adapters/ +│ │ ├── sam2_adapter.py +│ │ ├── sam3_adapter.py +│ │ └── utils.py # mask → polygon helper +│ ├── models.yaml # Model registry (paths + family) +│ ├── run.sh # Convenience launcher (env vars) +│ └── README.md # Install + run on the server side +│ +├── sam2/sam2/ # Meta SAM 2 source + checkpoints (vendored) +├── files/sam3_weights/ # SAM 3 weights (3.4 GB sam3.pt) +├── files/sam3_server.py # Reference SAM3 server (used as a guide) +│ +├── sam_tool_v2.py # Original Python/Tkinter tool (legacy) +├── sam_annotation_test/ # Sample data — dashcam MP4 + custom SAM JSON +│ +├── docs/ # ← you are here +│ ├── POLYGON_SMOOTHING.md How to tune mask→polygon output +│ ├── HF_DEPLOY_OFFLINE.md First-online-then-airgapped HF deploy +│ └── BUILD_RELEASE.md Building the Tauri app for release +│ +└── CLAUDE.md # Project rules (think → simplify → surgical) +``` + +--- + +## Quick start (single-machine dev) + +### 1. SAM backend + +```bash +cd sam2-backend +python3 -m venv .venv && source .venv/bin/activate +pip install --upgrade pip + +# Pick the right Torch wheel for your GPU (driver 570+ → cu128): +pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128 +# CPU-only fallback (slow): +# pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu + +# SAM 2 source + deps +pip install -e ../sam2/sam2 +pip install -r requirements.txt + +# Optional — SAM 3 support (needs HF account + accepted gating) +git clone https://github.com/facebookresearch/sam3.git .. +pip install -e ../sam3 +pip install "transformers>=4.57" +hf auth login # paste read token from https://huggingface.co/settings/tokens + +./run.sh # binds 0.0.0.0:9090, auto-picks cuda/cpu +``` + +Smoke-test: +```bash +curl http://localhost:9090/ # {"status":"ok",...} +curl http://localhost:9090/models # registered models +``` + +Full backend setup details: [`sam2-backend/README.md`](sam2-backend/README.md). + +### 2. Tauri desktop app + +```bash +cd sam-tool-tauri +npm install +npm run tauri dev # hot-reload dev mode + +# Or for a real build / installer: +npm run tauri build # see docs/BUILD_RELEASE.md +``` + +In the running app: +1. **Login** — pick or type a username (no password — used for annotation + author stamping). +2. **Extract mode** — Upload a video → optionally `Import annotations…` + (COCO / SAM JSON) → click `choose output folder…` (or just open a + video; the default `