An open API service indexing awesome lists of open source software.

https://github.com/debaq/annotix

Open-source desktop platform for ML dataset annotation, training, and collaboration — Images, Video, Time Series, Tabular
https://github.com/debaq/annotix

annotation computer-vision dataset deep-learning desktop-app image-annotation machine-learning object-detection p2p react rust tauri time-series video-annotation yolo

Last synced: 2 months ago
JSON representation

Open-source desktop platform for ML dataset annotation, training, and collaboration — Images, Video, Time Series, Tabular

Awesome Lists containing this project

README

          


Annotix Logo

Annotix


Open-source desktop platform for ML dataset annotation, training, and collaboration

Images · Video · Time Series · Tabular Data


Latest Release
Downloads
Stars
License
Platform


Tauri 2
React 19
Rust
i18n
ML Backends


Download  • 
Read the Paper  • 
Build from Source  • 
Cite

---

## Paper

> **Annotix: An Open-Source Desktop Platform for Comprehensive Machine Learning Dataset Annotation**
>
> Published on [Preprints.org](https://www.preprints.org/manuscript/202604.0919) (April 2026)
>
> Universidad Austral de Chile, Campus Puerto Montt — [TecMedHub](https://github.com/tecmedhub)

If you use Annotix in your research, please [cite the paper](#citation).

---

## Why Annotix?

Most annotation tools focus on a single data type or require cloud accounts. Annotix is different:

| | Annotix | Cloud tools (CVAT, Label Studio) | Desktop tools (labelImg, LabelMe) |
|---|:---:|:---:|:---:|
| **Runs fully offline** | Yes | No | Yes |
| **Images + Video + Time Series + Tabular** | Yes | Partial | No |
| **Integrated ML training (19 backends)** | Yes | No | No |
| **P2P collaboration (no server)** | Yes | Server required | No |
| **Free GPU training (Colab automation)** | Yes | No | No |
| **Export to 11 formats** | Yes | Yes | Limited |
| **Cross-platform native app** | Yes | Browser | Partial |

---

## Status

> Last updated: April 2026 — v2.4.4

| Feature | Status | Notes |
|---------|--------|-------|
| **Image annotation** (7 tools) | :white_check_mark: Stable | BBox, OBB, Mask, Polygon, Keypoints, Landmarks, Pan |
| **Video annotation** | :white_check_mark: Stable | Tracks, keyframes, interpolation, bake |
| **Time series annotation** | :white_check_mark: Stable | 5 annotation types, Chart.js canvas |
| **Tabular ML** | :white_check_mark: Stable | scikit-learn integration, column selector |
| **ONNX inference** | :white_check_mark: Stable | Auto-detects YOLOv5-v12, DETR, SSD, classification |
| **Export** (11 formats) | :white_check_mark: Stable | YOLO, COCO, VOC, CSV, U-Net, TIX, etc. |
| **Import** (8 formats) | :white_check_mark: Stable | Auto-detection with confidence scoring |
| **Local ML training** (19 backends) | :white_check_mark: Stable | Isolated Python env, GPU auto-detection |
| **Cloud training** (7 providers) | :white_check_mark: Stable | Vertex AI, Kaggle, Lightning AI, HuggingFace, Saturn Cloud, Colab Enterprise |
| **Browser automation** (Colab free) | :white_check_mark: Stable | T4 GPU, real-time progress |
| **Keyboard shortcuts** | :white_check_mark: Stable | Fully customizable, conflict detection |
| **i18n** (10 languages) | :white_check_mark: Stable | Lazy loading, English fallback |
| **P2P collaboration** | :construction: Beta | Works but no auto-reconnection on network drop; last-write-wins conflict resolution; video frames excluded from sync |
| **Audio annotation** | :construction: In progress | Classification, speech recognition, sound event detection, TTS recording exist; waveform UI partially wired |
| **Audio export** | :construction: In progress | HuggingFace ASR, LJSpeech, CSV formats implemented; import not yet available |
| **Network sharing** (serve) | :construction: In development | HTTP server to share projects via browser; web annotation UI built; not yet released |
| **LLM chat via browser** | :construction: Beta | Kimi, Qwen, DeepSeek, HuggingChat; generic runner works, provider-specific modules are stubs |
| **macOS build** | :warning: Not tested | No CI for macOS; should build from source but untested |

:white_check_mark: = production-ready  ·  :construction: = usable but incomplete  ·  :warning: = known limitation

---

## Download

Pre-built binaries for the latest release:

| Platform | Download |
|----------|----------|
| **Windows** (x64) | [`.exe` installer](https://github.com/Debaq/Annotix/releases/latest/download/Annotix_2.4.4_x64-setup.exe)  \|  [`.msi`](https://github.com/Debaq/Annotix/releases/latest/download/Annotix_2.4.4_x64_en-US.msi) |
| **Linux** (x64) | [`.AppImage`](https://github.com/Debaq/Annotix/releases/latest/download/Annotix_2.4.4_amd64.AppImage) |
| **macOS** | Build from source (see [Getting Started](#getting-started)) |

> All releases: [github.com/Debaq/Annotix/releases](https://github.com/Debaq/Annotix/releases)

---

## Features at a Glance

### Annotation Tools

7 tools on a high-performance Konva canvas:

| Tool | Key | Description |
|------|-----|-------------|
| **BBox** | `B` | Rectangular bounding box with drag & resize |
| **OBB** | `O` | Oriented bounding box with free rotation |
| **Mask** | `M` | Freehand painting with configurable brush and eraser |
| **Polygon** | `P` | Point-by-point polygon with auto-close |
| **Keypoints** | `K` | Skeleton presets (COCO, face, hand, MediaPipe) |
| **Landmarks** | `L` | Named reference points with labels |
| **Pan** | `H` | Canvas navigation |

Plus: mouse wheel zoom, image rotation, label/grid toggles, quick class selection (`1`-`0`, `Q`-`P` for up to 20 classes), undo/redo with 100-step history.

### Project Types

- **Images** — Object detection, oriented detection, semantic/instance segmentation, keypoints, landmarks, single & multi-label classification
- **Video** — Frame extraction (FFmpeg), tracks with keyframes, linear interpolation, bake to per-frame annotations
- **Time Series** — Univariate & multivariate CSV, 5 annotation types (point, range, classification, event, anomaly)
- **Tabular** — Built-in editor with column selection and scikit-learn training

### Integrated ML Training (19 Backends)

Train models directly from the app with real-time metrics charts.

Full backend list

#### Object Detection
| Backend | Models |
|---------|--------|
| **YOLO** (Ultralytics) | YOLOv8, v9, v10, v11, v12 |
| **RT-DETR** (Ultralytics) | RT-DETR-l, RT-DETR-x |
| **RF-DETR** (Roboflow) | RF-DETR-base, RF-DETR-large |
| **MMDetection** (OpenMMLab) | 30+ architectures (Faster R-CNN, DINO, Co-DETR, etc.) |

#### Semantic Segmentation
| Backend | Models |
|---------|--------|
| **SMP** | U-Net, DeepLabV3+, FPN, PSPNet, etc. |
| **HuggingFace Segmentation** | SegFormer, Mask2Former, etc. |
| **MMSegmentation** | Full OpenMMLab catalog |

#### Instance Segmentation
| Backend | Models |
|---------|--------|
| **Detectron2** (Meta) | Mask R-CNN, Cascade R-CNN, etc. |

#### Keypoints & Pose
| Backend | Models |
|---------|--------|
| **MMPose** | HRNet, ViTPose, RTMPose, etc. |

#### Oriented Object Detection (OBB)
| Backend | Models |
|---------|--------|
| **MMRotate** | Oriented R-CNN, RoI Transformer, etc. |

#### Image Classification
| Backend | Models |
|---------|--------|
| **timm** | 700+ models (ResNet, EfficientNet, ViT, ConvNeXt, etc.) |
| **HuggingFace Classification** | ViT, BEiT, DeiT, Swin, etc. |

#### Time Series
| Backend | Task |
|---------|------|
| **tsai** | Classification, regression, forecasting |
| **PyTorch Forecasting** | TFT, N-BEATS, etc. |
| **PyOD** | Anomaly detection |
| **tslearn** | Temporal clustering |
| **PyPOTS** | Missing value imputation |
| **STUMPY** | Matrix Profile (motif/pattern discovery) |

#### Tabular
| Backend | Task |
|---------|------|
| **scikit-learn** | RandomForest, SVM, kNN, GradientBoosting, etc. |

**4 execution modes:**

| Mode | Description |
|------|-------------|
| **Local** | Isolated Python env via micromamba, GPU auto-detection (CUDA / MPS) |
| **Download Package** | ZIP with script + data for external execution |
| **Cloud** | Vertex AI, Kaggle, Lightning AI, HuggingFace, Saturn Cloud |
| **Browser Automation** | Free T4 GPU on Google Colab via CDP automation |

6 training presets: `small_objects`, `industrial`, `traffic`, `edge_mobile`, `medical`, `aerial`.

Model export: PyTorch `.pt`, ONNX, TorchScript, TFLite, CoreML, TensorRT.

### P2P Collaboration

Real-time collaborative annotation powered by [Iroh](https://iroh.computer/) (QUIC). No central server.

- Host or join with a session code
- Roles: LeadResearcher (full control) / Annotator / DataCurator (configurable permissions)
- Image locking with 3-min TTL, batch assignment, CRDT sync
- Peer list with online status

### Browser Automation

Train on **Google Colab for free** (T4 GPU) via Chrome DevTools Protocol:
- Auto-detects Chromium browsers, uploads dataset, runs training
- Real-time progress with pause / resume / cancel

Query LLMs without API keys through the user's browser: Kimi, Qwen, DeepSeek, HuggingChat.

### Export & Import

**11 export formats:** YOLO Detection, YOLO Segmentation, COCO JSON, Pascal VOC, CSV (Detection/Classification/Keypoints/Landmarks), Folders by Class, U-Net Masks, TIX (native).

**8 import formats** with automatic detection: YOLO, COCO, Pascal VOC, CSV (4 variants), U-Net Masks, Folders by Class, TIX.

### Keyboard Shortcuts

All shortcuts are **fully customizable** from Settings with per-context conflict detection.

Default shortcuts

#### Image Tools
| Shortcut | Action |
|----------|--------|
| `B` | Bounding Box |
| `O` | OBB |
| `M` | Mask |
| `P` | Polygon |
| `K` | Keypoints |
| `L` | Landmarks |
| `H` | Pan |
| `[` / `]` | Decrease / Increase brush size |
| `E` | Toggle eraser |
| `A` / `D` | Rotate image |
| `Enter` | Confirm |
| `Esc` | Cancel |

#### Navigation
| Shortcut | Action |
|----------|--------|
| `Left` / `Right` | Previous / Next image |
| `Ctrl++` / `Ctrl+-` | Zoom in / out |
| `Ctrl+0` | Zoom to fit |

#### General
| Shortcut | Action |
|----------|--------|
| `Ctrl+S` | Save |
| `Ctrl+Z` / `Ctrl+Y` | Undo / Redo |
| `Del` | Delete selection |

#### Quick Class Selection
| Keys | Classes |
|------|---------|
| `1` - `0` | Classes 1 to 10 |
| `Q` - `P` | Classes 11 to 20 |

#### Video
| Shortcut | Action |
|----------|--------|
| `T` | New track |
| `Left` / `Right` | Previous / Next frame |

#### Time Series
| Shortcut | Action |
|----------|--------|
| `V` | Select |
| `P` | Point |
| `R` | Range |
| `E` | Event |
| `A` | Anomaly |

### Languages

10 languages with lazy loading and English fallback:

`de` Deutsch · `en` English · `es` Espanol · `fr` Francais · `it` Italiano · `ja` Japanese · `ko` Korean · `pt` Portugues · `ru` Russian · `zh` Chinese

---

## Architecture

```
+-----------------------------------------------------+
| Frontend |
| React 19 + TypeScript + Tailwind + shadcn/ui |
| Konva (canvas) . Chart.js (metrics) . i18next |
| Zustand (state) . React Router 7 |
+-----------------------------------------------------+
| Tauri 2 IPC |
| 137+ registered commands |
+-----------------------------------------------------+
| Backend (Rust) |
| +------------+ +-----------+ +-----------------+ |
| | Store | | Commands | | Export/Import | |
| | (JSON+RAM) | | (16 mod) | | (11+8 formats) | |
| +------------+ +-----------+ +-----------------+ |
| +------------+ +-----------+ +-----------------+ |
| | Training | | Browser | | P2P (Iroh) | |
| | (19 backs) | | Automat. | | QUIC mesh | |
| +------------+ +-----------+ +-----------------+ |
+-----------------------------------------------------+
| External Integrations |
| Python (micromamba) . FFmpeg . Chromium CDP |
| Cloud APIs . Iroh P2P network |
+-----------------------------------------------------+
```

### Storage

All data stored as JSON + raw assets on disk. No database.

```
~/.local/share/annotix/config.json -> global configuration
{projects_dir}/{uuid}/project.json -> project (metadata + classes + annotations)
{projects_dir}/{uuid}/images/ -> original images
{projects_dir}/{uuid}/thumbnails/ -> generated thumbnails
{projects_dir}/{uuid}/videos/ -> video files
{projects_dir}/{uuid}/models/ -> trained models
```

In-memory cache with dirty-flag tracking, atomic writes (`.tmp` + `rename`).

---

## Tech Stack

Frontend

| Technology | Version | Purpose |
|------------|---------|---------|
| React | 19 | UI framework |
| TypeScript | 5.7 | Static typing |
| Vite | 6 | Bundler and dev server |
| Tailwind CSS | 3.4 | Utility-first styling |
| shadcn/ui | — | Component library (Radix UI) |
| Zustand | 5 | Global state with persistence |
| React Router | 7 | SPA routing |
| Konva | 10 | 2D annotation canvas |
| Chart.js | 4 | Metrics visualization |
| i18next | 24 | Internationalization |

Backend (Rust)

| Crate | Version | Purpose |
|-------|---------|---------|
| tauri | 2 | Desktop application framework |
| serde / serde_json | 1 | JSON serialization |
| image | 0.25 | Image processing |
| ffmpeg-the-third | 4 | Video frame extraction |
| zip | 2 | Export/import packaging |
| quick-xml | 0.37 | Pascal VOC XML |
| csv | 1.3 | CSV import/export |
| reqwest | 0.12 | HTTP client (cloud providers) |
| headless_chrome | 1.0 | Browser automation (CDP) |
| iroh | 0.96 | P2P networking (QUIC) |
| tokio | 1 | Async runtime |
| blake3 | 1 | Hashing |

Python (via micromamba)

| Package | Purpose |
|---------|---------|
| ultralytics | YOLO, RT-DETR |
| rfdetr | RF-DETR |
| mmdet, mmseg, mmpose, mmrotate | OpenMMLab suite |
| segmentation-models-pytorch | Semantic segmentation |
| timm | Classification (700+ models) |
| detectron2 | Instance segmentation |
| tsai, pytorch-forecasting | Time series deep learning |
| pyod, tslearn, pypots, stumpy | Time series classical ML |
| scikit-learn | Tabular ML |

---

## System Requirements

- **OS**: Windows 10+, macOS 12+, Linux (glibc 2.31+)
- **RAM**: 4 GB minimum, 8 GB recommended
- **Disk**: ~500 MB for the app + space for datasets
- **GPU** (optional): NVIDIA with CUDA or Apple Silicon with MPS for accelerated training
- **FFmpeg**: required for video annotation (bundled in release builds)
- **Chromium browser** (optional): for browser automation (Chrome, Brave, Edge)

---

## Getting Started

### Prerequisites

- [Node.js](https://nodejs.org/) >= 18
- [Rust](https://rustup.rs/) >= 1.89
- [Tauri 2 prerequisites](https://v2.tauri.app/start/prerequisites/) for your platform

### Build & Run

```bash
git clone https://github.com/Debaq/Annotix.git
cd Annotix
npm install
npm run tauri:dev # development (hot-reload)
npm run tauri:build # production build
```

### Scripts

| Script | Description |
|--------|-------------|
| `npm run dev` | Frontend only (Vite dev server) |
| `npm run build` | Build frontend (TypeScript check + Vite) |
| `npm run tauri:dev` | Full dev (frontend + Rust backend) |
| `npm run tauri:build` | Production build with installers |
| `npm run lint` | ESLint with zero warnings policy |

---

## Project Structure

```
annotix/
├── src/ # React frontend
│ ├── App.tsx # Router and providers
│ ├── lib/
│ │ ├── db.ts # Type definitions (mirrors Rust structs)
│ │ ├── tauriDb.ts # Centralized Tauri invoke bridge
│ │ └── i18n.ts # i18next configuration
│ ├── components/ui/ # shadcn/ui components
│ └── features/
│ ├── canvas/ # Annotation canvas (7 tools)
│ ├── video/ # Video annotation
│ ├── timeseries/ # Time series annotation
│ ├── tabular/ # Tabular data editor
│ ├── training/ # ML training panel
│ ├── export/ # 11 export formats
│ ├── import/ # 8 import formats
│ ├── inference/ # Model inference
│ ├── p2p/ # P2P collaboration
│ ├── browser-automation/ # Chrome automation
│ └── settings/ # App settings
├── src-tauri/ # Rust backend
│ └── src/
│ ├── lib.rs # 137+ Tauri command registrations
│ ├── store/ # Storage layer (state, IO, cache)
│ ├── commands/ # 16 command modules
│ ├── export/ # Export format modules
│ ├── import/ # Import + auto-detector
│ ├── training/ # Multi-backend ML pipeline
│ ├── browser_automation/ # Headless Chrome
│ ├── p2p/ # Iroh P2P networking
│ └── inference/ # ONNX inference
└── public/locales/ # 10 language files
```

---

## Citation

If you use Annotix in your research, please cite:

```bibtex
@article{annotix2026,
title = {Annotix: An Open-Source Desktop Platform for Comprehensive Machine Learning Dataset Annotation},
year = {2026},
publisher = {Preprints.org},
url = {https://www.preprints.org/manuscript/202604.0919}
}
```

> Full paper: [https://www.preprints.org/manuscript/202604.0919](https://www.preprints.org/manuscript/202604.0919)

---

## Contributing

Contributions are welcome. Please open an issue first to discuss what you'd like to change.

---

## License

MIT License — [TecMedHub](https://github.com/tecmedhub), Universidad Austral de Chile, Campus Puerto Montt.