Open-source desktop platform for ML dataset annotation, training, and collaboration — Images, Video, Time Series, Tabular
See the code
Open-source desktop platform for ML dataset annotation, training, and collaboration
Images · Video · Audio · Time Series · Tabular Data
Download • Read the Paper • System Overview • Build from Source • Cite
Annotix: An Open-Source Desktop Platform for Comprehensive Machine Learning Dataset Annotation
Published on Preprints.org (April 2026)
Universidad Austral de Chile, Campus Puerto Montt — TecMedHub
If you use Annotix in your research, please cite the paper.
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 + Audio + Time Series + Tabular | Yes | Partial | No |
| SAM-assisted segmentation (local ONNX) | Yes | Partial | No |
| Integrated ML training (19 backends) | Yes | No | No |
| P2P collaboration (no server) | Yes | Server required | No |
| LAN sharing via browser (no install) | Yes | Server required | No |
| Free GPU training (Colab automation) | Yes | No | No |
| Export to 17 formats | Yes | Yes | Limited |
| Cross-platform native app | Yes | Browser | Partial |
Last updated: June 2026 — v2.9.10
| Feature | Status | Notes |
|---|---|---|
| Image annotation (7 tools) | :white_check_mark: Stable | BBox, OBB, Mask, Polygon, Keypoints, Landmarks, Pan |
| SAM assist | :white_check_mark: Stable | Local ONNX encoder/decoder, AMG candidates, click-refine, app-level model store |
| Video annotation | :white_check_mark: Stable | Tracks, keyframes, interpolation, bake |
| Audio annotation | :white_check_mark: Stable | Waveform UI, classification, ASR transcription, sound events, TTS recording |
| 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; opt-in TensorRT/CUDA/DirectML/CoreML EPs |
| Export (17 formats) | :white_check_mark: Stable | YOLO, COCO, VOC, CSV, U-Net, TIX, rasterized previews, audio formats |
| Import (8 formats) | :white_check_mark: Stable | Auto-detection with confidence scoring; PDF pages as images |
| Local ML training (19 backends) | :white_check_mark: Stable | Isolated Python env, GPU auto-detection, live metrics, PDF report |
| 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 |
| Network sharing (serve) | :white_check_mark: Stable | HTTP server on LAN with bearer-token auth, browser annotation UI |
| P2P collaboration | :white_check_mark: Stable | Iroh QUIC + N0 discovery, live image/mark sync, work distribution, data approval, roles; syncs images/annotations/classes (not video, audio or time series) |
| Annotation inspector & filters | :white_check_mark: Stable | Per-class/per-image filters, cross-project comparison |
| Keyboard shortcuts | :white_check_mark: Stable | Fully customizable, conflict detection |
| i18n (10 languages) | :white_check_mark: Stable | 47 namespaces, lazy loading, English fallback |
| Audio import | :construction: In progress | Export implemented (HF ASR, LJSpeech, CSV); import not yet available |
| Audio training backends | :construction: Not implemented | Audio projects annotate & export only; train externally |
| SAM model auto-download | :construction: In progress | Manual upload works; HuggingFace presets (MobileSAM / ViT-B / SAM2) pending |
| LLM chat via browser | :construction: Beta | Kimi, Qwen, DeepSeek, HuggingChat; generic runner works, provider modules partially wired |
| 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
Pre-built binaries for the latest release:
| Platform | Download |
|---|---|
| Windows (x64) | .exe installer | .msi |
| Linux (x64) | .tar.gz (portable binary + libs + installer script) |
| macOS | Build from source (see Getting Started) |
Linux packaging is a self-contained tarball (annotix-v<version>-linux-x86_64.tar.gz) with the
binary, libpdfium.so and a run.sh launcher — no .deb/.rpm/AppImage. It needs
libwebkit2gtk-4.1-0, libgtk-3-0 and librsvg2-2 on the system, and can register itself as a
desktop entry. Windows installers bundle FFmpeg DLLs and pdfium.
All releases: github.com/Debaq/Annotix/releases
The app checks GitHub for new releases and shows an in-app update banner with a dynamic changelog.
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, per-annotation visibility, draggable
floating panels persisted per project, quick class selection (1-0, Q-P for up to 20 classes),
and undo/redo with 100-step history.
Segment Anything runs locally via ONNX — no cloud, no API key.
{data_dir}/sam_models/), shared across projectsproject.json| AMG default | Value | Role |
|---|---|---|
points_per_side | 16 | prompt grid (32 in HQ mode) |
pred_iou_thresh | 0.70 | drops low-confidence decoder masks |
stability_score_thresh | 0.85 | stability under logit-threshold shift |
box_nms_thresh | 0.70 | non-max suppression over boxes |
min_mask_region_area | 100 px | smallest mask kept |
overlap_with_existing_thresh | 0.50 | max overlap with existing annotations |
23 project types across four families, each with its own editor and export path:
Video is a capture path rather than a project type: FFmpeg extracts frames at a configurable rate into the project's images, annotated as tracks with keyframes and linear interpolation, then baked to per-frame annotations.
Images can also be ingested from PDF documents (pages rasterized natively with pdfium) and stored as WebP per project.
Train models directly from the app with real-time metrics charts, a training monitor with suggestions ("coach"), free-text observations, and an exportable PDF training report.
| Backend | Models |
|---|---|
| YOLO (Ultralytics) | YOLO26, YOLOv8–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.) |
| Backend | Models |
|---|---|
| SMP | U-Net, DeepLabV3+, FPN, PSPNet, etc. |
| HuggingFace Segmentation | SegFormer, Mask2Former, etc. |
| MMSegmentation | Full OpenMMLab catalog |
| Backend | Models |
|---|---|
| Detectron2 (Meta) | Mask R-CNN, Cascade R-CNN, etc. |
| Backend | Models |
|---|---|
| MMPose | HRNet, ViTPose, RTMPose, etc. |
| Backend | Models |
|---|---|
| MMRotate | Oriented R-CNN, RoI Transformer, etc. |
| Backend | Models |
|---|---|
| timm | 700+ models (ResNet, EfficientNet, ViT, ConvNeXt, etc.) |
| HuggingFace Classification | ViT, BEiT, DeiT, Swin, etc. |
| 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) |
| 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.
Run trained or third-party ONNX models over a whole project:
nc/names) across five
output families: YOLOv8+, YOLOv5–v7 (objectness), YOLOv10/YOLO26 (end-to-end, no NMS),
multi-output (SSD, EfficientDet, Faster R-CNN, DETR) and classificationReal-time collaborative annotation powered by Iroh (QUIC). No central server, no port forwarding: N0 discovery (pkarr + DNS + relays) keeps peers reachable across networks and re-syncs automatically when a peer comes back online.
Conflict resolution is per-key last-write-wins (iroh-docs). Video, audio and time-series assets are not part of the synced document — share those via TIX export.
Publish a project over the LAN as an HTTP server with a bearer-token protected web UI — collaborators annotate from a browser with no install. It picks a free port, enumerates local addresses and self-checks reachability before announcing the URL. Optional auto-save.
REST endpoints: /api/projects, /api/projects/{id}, /api/projects/{id}/images, and per-image
…/{image_id}, …/file, …/thumbnail, …/annotations (GET and POST).
Train on Google Colab for free (T4 GPU) via Chrome DevTools Protocol:
Query LLMs without API keys through the user's browser: Kimi, Qwen, DeepSeek, HuggingChat.
17 export formats: YOLO Detection, YOLO Segmentation, COCO JSON, Pascal VOC, CSV (Detection / Classification / Keypoints / Landmarks), Folders by Class, U-Net Masks, TIX (native), rasterized preview (with and without labels), HuggingFace ASR, LJSpeech, CSV Audio Classification, CSV Sound Events.
8 import formats with automatic detection: YOLO (detection & segmentation), COCO, Pascal VOC,
CSV (4 variants), U-Net Masks, Folders by Class, TIX. Multiple .tix files can be merged,
homogenizing class sets.
Annotation inspector reachable from the project gallery, with debug/observation filters over marks, classes and gallery, per-class counters, and multi-project comparison.
All shortcuts are fully customizable from Settings with per-context conflict detection.
| Shortcut | Action |
|---|---|
B | Bounding Box |
O | OBB |
M | Mask |
P | Polygon |
K | Keypoints |
L | Landmarks |
V | Select |
H | Pan |
[ / ] | Decrease / Increase brush size |
E | Toggle eraser |
A / D | Rotate image |
Enter | Confirm drawing |
Esc | Cancel drawing |
SAM assist is toggled from the canvas toolbar; while active, Tab cycles candidates,
Esc exits refine mode and the class keys accept the hovered mask.
| Shortcut | Action |
|---|---|
PageUp / PageDown | Previous / Next sample |
Ctrl++ / Ctrl+- | Zoom in / out |
Ctrl+0 | Zoom to fit |
| Shortcut | Action |
|---|---|
Ctrl+S | Save |
Ctrl+Z / Ctrl+Y | Undo / Redo |
Del / Backspace | Delete selection |
Esc | Deselect |
| Keys | Classes |
|---|---|
1 - 0 | Classes 1 to 10 |
Q - P | Classes 11 to 20 |
| Shortcut | Action |
|---|---|
T | New track |
| Shortcut | Action |
|---|---|
V | Select |
P | Point |
R | Range |
E | Event |
A | Anomaly |
| Shortcut | Action |
|---|---|
F2 | Play / Pause |
F3 / F4 | Replay / Rewind |
Left / Right | Scrub |
Enter | Split |
Tab | Save & next |
| Shortcut | Action |
|---|---|
Space | Record |
Enter | Accept take |
R | Repeat |
S | Skip sentence |
10 languages across 47 namespaces, 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
+-----------------------------------------------------+
| Frontend |
| React 19 + TypeScript + Tailwind + shadcn/ui |
| Konva (canvas) . Chart.js (metrics) . i18next |
| Zustand (state) . React Router 7 |
+-----------------------------------------------------+
| Tauri 2 IPC |
| 194 registered commands |
+-----------------------------------------------------+
| Backend (Rust) |
| +------------+ +-----------+ +-----------------+ |
| | Store | | Commands | | Export/Import | |
| | (JSON+RAM) | | (24 mod) | | (17+8 formats) | |
| +------------+ +-----------+ +-----------------+ |
| +------------+ +-----------+ +-----------------+ |
| | Training | | Browser | | P2P (Iroh) | |
| | (19 backs) | | Automat. | | QUIC mesh | |
| +------------+ +-----------+ +-----------------+ |
| +------------+ +-----------+ +-----------------+ |
| | Inference | | SAM | | Serve (axum) | |
| | (ONNX/ort) | | enc/dec | | LAN web UI | |
| +------------+ +-----------+ +-----------------+ |
+-----------------------------------------------------+
| External Integrations |
| Python (micromamba) . FFmpeg . pdfium . Chromium |
| Cloud APIs . Iroh P2P network |
+-----------------------------------------------------+
All data stored as JSON + raw assets on disk. No database.
~/.local/share/annotix/config.json -> global configuration (projects_dir)
~/.local/share/annotix/sam_models/ -> SAM encoder/decoder ONNX (app-level)
~/.local/share/annotix/p2p/iroh/ -> P2P blobs + replicated docs
{projects_dir}/{uuid}/project.json -> the whole project
{projects_dir}/{uuid}/images/ -> original images
{projects_dir}/{uuid}/thumbnails/ -> generated thumbnails
{projects_dir}/{uuid}/videos/ -> video files
{projects_dir}/{uuid}/audio/ -> audio files
{projects_dir}/{uuid}/models/ -> registered inference models
{projects_dir}/{uuid}/training/ -> per-job datasets and results
project.json is a single document holding metadata, classes, images with their annotations,
time series, videos with their tracks, audio, tabular data, training jobs with per-epoch metric
history, inference models, TTS sentences and the collaboration config. An in-memory cache with
dirty-flag tracking sits in front of it; writes go to a .tmp file and are then renamed.
IDs are UUID v4 end to end. Class IDs are reindexed to their position on save, and the remap propagates to image annotations, video tracks, audio and time series.
| 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 |
| jsPDF / html2canvas | 4 / 1.4 | Training report PDF |
| TanStack Virtual | 3 | Virtualized gallery |
| i18next | 24 | Internationalization |
| Crate | Version | Purpose |
|---|---|---|
| tauri | 2 | Desktop application framework |
| serde / serde_json | 1 | JSON serialization |
| image / imageproc | 0.25 | Image processing |
| fast_image_resize | 5 | SIMD resizing |
| rayon | 1.10 | Data parallelism |
| geo | 0.29 | Polygon simplification |
| webp | 0.3 | WebP encoding |
| ort | 2.0-rc | ONNX Runtime (inference + SAM) |
| ffmpeg-the-third | 4.1 | Video frame extraction |
| pdfium-render | 0.8 | PDF page rasterization |
| 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) |
| jsonwebtoken | 9 | GCP service-account auth |
| axum | 0.8 | LAN serve HTTP server |
| chacha20poly1305 / subtle | 0.10 / 2 | Session secret encryption |
| headless_chrome | 1.0 | Browser automation (CDP) |
| iroh + blobs/gossip/docs | 0.96–0.98 | P2P networking (QUIC) |
| tokio | 1 | Async runtime |
| blake3 | 1 | Hashing |
| 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 |
pnpm-lock.yaml)git clone https://github.com/Debaq/Annotix.git
cd Annotix
pnpm install
pnpm tauri:dev # development (hot-reload)
pnpm tauri:build # production build
| Script | Description |
|---|---|
pnpm dev | Frontend only (Vite dev server) |
pnpm build | Build frontend (TypeScript check + Vite) |
pnpm tauri:dev | Full dev (frontend + Rust backend) |
pnpm tauri:build | Production build with installers |
pnpm lint | ESLint (flat config) |
CI runs cargo fmt/clippy, cargo nextest and the frontend build on every push.
annotix/
├── src/ # React frontend (~46k LOC)
│ ├── 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)
│ ├── sam/ # SAM assist (overlay, panel, store)
│ ├── gallery/ # Virtualized gallery + filters
│ ├── video/ # Video annotation
│ ├── audio/ # Audio annotation + TTS recording
│ ├── timeseries/ # Time series annotation
│ ├── tabular/ # Tabular data editor
│ ├── classification/ # Classification workflow
│ ├── training/ # ML training panel + monitor + PDF report
│ ├── export/ # 17 export formats
│ ├── import/ # 8 import formats
│ ├── inference/ # Model inference
│ ├── p2p/ # P2P collaboration
│ ├── serve/ # LAN sharing dialog
│ ├── browser-automation/ # Chrome automation
│ ├── setup/ # First-run setup
│ └── settings/ # App settings
├── src-tauri/ # Rust backend (~41k LOC)
│ └── src/
│ ├── lib.rs # 194 Tauri command registrations
│ ├── store/ # Storage layer (state, IO, cache)
│ ├── commands/ # 24 command modules
│ ├── export/ # Export format modules
│ ├── import/ # Import + auto-detector + merge
│ ├── training/ # Multi-backend ML pipeline + cloud providers
│ ├── browser_automation/ # Headless Chrome (Colab, LLM chat)
│ ├── p2p/ # Iroh P2P networking
│ ├── serve/ # axum LAN server + web UI
│ └── inference/ # ONNX inference + SAM (encoder/decoder/AMG)
├── docs/ # Roadmaps and backend references
├── wiki/ # User documentation
└── public/locales/ # 10 languages x 47 namespaces
If you use Annotix in your research, please cite:
@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
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
MIT License — TecMedHub, Universidad Austral de Chile, Campus Puerto Montt.
259 commits
11 commits
Rust
51.6%
TypeScript
44.8%
HTML
1.5%
Open-source desktop platform for ML dataset annotation, training, and collaboration — Images, Video, Time Series, Tabular
See the code
Open-source desktop platform for ML dataset annotation, training, and collaboration
Images · Video · Audio · Time Series · Tabular Data
Download • Read the Paper • System Overview • Build from Source • Cite
Annotix: An Open-Source Desktop Platform for Comprehensive Machine Learning Dataset Annotation
Published on Preprints.org (April 2026)
Universidad Austral de Chile, Campus Puerto Montt — TecMedHub
If you use Annotix in your research, please cite the paper.
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 + Audio + Time Series + Tabular | Yes | Partial | No |
| SAM-assisted segmentation (local ONNX) | Yes | Partial | No |
| Integrated ML training (19 backends) | Yes | No | No |
| P2P collaboration (no server) | Yes | Server required | No |
| LAN sharing via browser (no install) | Yes | Server required | No |
| Free GPU training (Colab automation) | Yes | No | No |
| Export to 17 formats | Yes | Yes | Limited |
| Cross-platform native app | Yes | Browser | Partial |
Last updated: June 2026 — v2.9.10
| Feature | Status | Notes |
|---|---|---|
| Image annotation (7 tools) | :white_check_mark: Stable | BBox, OBB, Mask, Polygon, Keypoints, Landmarks, Pan |
| SAM assist | :white_check_mark: Stable | Local ONNX encoder/decoder, AMG candidates, click-refine, app-level model store |
| Video annotation | :white_check_mark: Stable | Tracks, keyframes, interpolation, bake |
| Audio annotation | :white_check_mark: Stable | Waveform UI, classification, ASR transcription, sound events, TTS recording |
| 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; opt-in TensorRT/CUDA/DirectML/CoreML EPs |
| Export (17 formats) | :white_check_mark: Stable | YOLO, COCO, VOC, CSV, U-Net, TIX, rasterized previews, audio formats |
| Import (8 formats) | :white_check_mark: Stable | Auto-detection with confidence scoring; PDF pages as images |
| Local ML training (19 backends) | :white_check_mark: Stable | Isolated Python env, GPU auto-detection, live metrics, PDF report |
| 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 |
| Network sharing (serve) | :white_check_mark: Stable | HTTP server on LAN with bearer-token auth, browser annotation UI |
| P2P collaboration | :white_check_mark: Stable | Iroh QUIC + N0 discovery, live image/mark sync, work distribution, data approval, roles; syncs images/annotations/classes (not video, audio or time series) |
| Annotation inspector & filters | :white_check_mark: Stable | Per-class/per-image filters, cross-project comparison |
| Keyboard shortcuts | :white_check_mark: Stable | Fully customizable, conflict detection |
| i18n (10 languages) | :white_check_mark: Stable | 47 namespaces, lazy loading, English fallback |
| Audio import | :construction: In progress | Export implemented (HF ASR, LJSpeech, CSV); import not yet available |
| Audio training backends | :construction: Not implemented | Audio projects annotate & export only; train externally |
| SAM model auto-download | :construction: In progress | Manual upload works; HuggingFace presets (MobileSAM / ViT-B / SAM2) pending |
| LLM chat via browser | :construction: Beta | Kimi, Qwen, DeepSeek, HuggingChat; generic runner works, provider modules partially wired |
| 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
Pre-built binaries for the latest release:
| Platform | Download |
|---|---|
| Windows (x64) | .exe installer | .msi |
| Linux (x64) | .tar.gz (portable binary + libs + installer script) |
| macOS | Build from source (see Getting Started) |
Linux packaging is a self-contained tarball (annotix-v<version>-linux-x86_64.tar.gz) with the
binary, libpdfium.so and a run.sh launcher — no .deb/.rpm/AppImage. It needs
libwebkit2gtk-4.1-0, libgtk-3-0 and librsvg2-2 on the system, and can register itself as a
desktop entry. Windows installers bundle FFmpeg DLLs and pdfium.
All releases: github.com/Debaq/Annotix/releases
The app checks GitHub for new releases and shows an in-app update banner with a dynamic changelog.
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, per-annotation visibility, draggable
floating panels persisted per project, quick class selection (1-0, Q-P for up to 20 classes),
and undo/redo with 100-step history.
Segment Anything runs locally via ONNX — no cloud, no API key.
{data_dir}/sam_models/), shared across projectsproject.json| AMG default | Value | Role |
|---|---|---|
points_per_side | 16 | prompt grid (32 in HQ mode) |
pred_iou_thresh | 0.70 | drops low-confidence decoder masks |
stability_score_thresh | 0.85 | stability under logit-threshold shift |
box_nms_thresh | 0.70 | non-max suppression over boxes |
min_mask_region_area | 100 px | smallest mask kept |
overlap_with_existing_thresh | 0.50 | max overlap with existing annotations |
23 project types across four families, each with its own editor and export path:
Video is a capture path rather than a project type: FFmpeg extracts frames at a configurable rate into the project's images, annotated as tracks with keyframes and linear interpolation, then baked to per-frame annotations.
Images can also be ingested from PDF documents (pages rasterized natively with pdfium) and stored as WebP per project.
Train models directly from the app with real-time metrics charts, a training monitor with suggestions ("coach"), free-text observations, and an exportable PDF training report.
| Backend | Models |
|---|---|
| YOLO (Ultralytics) | YOLO26, YOLOv8–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.) |
| Backend | Models |
|---|---|
| SMP | U-Net, DeepLabV3+, FPN, PSPNet, etc. |
| HuggingFace Segmentation | SegFormer, Mask2Former, etc. |
| MMSegmentation | Full OpenMMLab catalog |
| Backend | Models |
|---|---|
| Detectron2 (Meta) | Mask R-CNN, Cascade R-CNN, etc. |
| Backend | Models |
|---|---|
| MMPose | HRNet, ViTPose, RTMPose, etc. |
| Backend | Models |
|---|---|
| MMRotate | Oriented R-CNN, RoI Transformer, etc. |
| Backend | Models |
|---|---|
| timm | 700+ models (ResNet, EfficientNet, ViT, ConvNeXt, etc.) |
| HuggingFace Classification | ViT, BEiT, DeiT, Swin, etc. |
| 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) |
| 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.
Run trained or third-party ONNX models over a whole project:
nc/names) across five
output families: YOLOv8+, YOLOv5–v7 (objectness), YOLOv10/YOLO26 (end-to-end, no NMS),
multi-output (SSD, EfficientDet, Faster R-CNN, DETR) and classificationReal-time collaborative annotation powered by Iroh (QUIC). No central server, no port forwarding: N0 discovery (pkarr + DNS + relays) keeps peers reachable across networks and re-syncs automatically when a peer comes back online.
Conflict resolution is per-key last-write-wins (iroh-docs). Video, audio and time-series assets are not part of the synced document — share those via TIX export.
Publish a project over the LAN as an HTTP server with a bearer-token protected web UI — collaborators annotate from a browser with no install. It picks a free port, enumerates local addresses and self-checks reachability before announcing the URL. Optional auto-save.
REST endpoints: /api/projects, /api/projects/{id}, /api/projects/{id}/images, and per-image
…/{image_id}, …/file, …/thumbnail, …/annotations (GET and POST).
Train on Google Colab for free (T4 GPU) via Chrome DevTools Protocol:
Query LLMs without API keys through the user's browser: Kimi, Qwen, DeepSeek, HuggingChat.
17 export formats: YOLO Detection, YOLO Segmentation, COCO JSON, Pascal VOC, CSV (Detection / Classification / Keypoints / Landmarks), Folders by Class, U-Net Masks, TIX (native), rasterized preview (with and without labels), HuggingFace ASR, LJSpeech, CSV Audio Classification, CSV Sound Events.
8 import formats with automatic detection: YOLO (detection & segmentation), COCO, Pascal VOC,
CSV (4 variants), U-Net Masks, Folders by Class, TIX. Multiple .tix files can be merged,
homogenizing class sets.
Annotation inspector reachable from the project gallery, with debug/observation filters over marks, classes and gallery, per-class counters, and multi-project comparison.
All shortcuts are fully customizable from Settings with per-context conflict detection.
| Shortcut | Action |
|---|---|
B | Bounding Box |
O | OBB |
M | Mask |
P | Polygon |
K | Keypoints |
L | Landmarks |
V | Select |
H | Pan |
[ / ] | Decrease / Increase brush size |
E | Toggle eraser |
A / D | Rotate image |
Enter | Confirm drawing |
Esc | Cancel drawing |
SAM assist is toggled from the canvas toolbar; while active, Tab cycles candidates,
Esc exits refine mode and the class keys accept the hovered mask.
| Shortcut | Action |
|---|---|
PageUp / PageDown | Previous / Next sample |
Ctrl++ / Ctrl+- | Zoom in / out |
Ctrl+0 | Zoom to fit |
| Shortcut | Action |
|---|---|
Ctrl+S | Save |
Ctrl+Z / Ctrl+Y | Undo / Redo |
Del / Backspace | Delete selection |
Esc | Deselect |
| Keys | Classes |
|---|---|
1 - 0 | Classes 1 to 10 |
Q - P | Classes 11 to 20 |
| Shortcut | Action |
|---|---|
T | New track |
| Shortcut | Action |
|---|---|
V | Select |
P | Point |
R | Range |
E | Event |
A | Anomaly |
| Shortcut | Action |
|---|---|
F2 | Play / Pause |
F3 / F4 | Replay / Rewind |
Left / Right | Scrub |
Enter | Split |
Tab | Save & next |
| Shortcut | Action |
|---|---|
Space | Record |
Enter | Accept take |
R | Repeat |
S | Skip sentence |
10 languages across 47 namespaces, 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
+-----------------------------------------------------+
| Frontend |
| React 19 + TypeScript + Tailwind + shadcn/ui |
| Konva (canvas) . Chart.js (metrics) . i18next |
| Zustand (state) . React Router 7 |
+-----------------------------------------------------+
| Tauri 2 IPC |
| 194 registered commands |
+-----------------------------------------------------+
| Backend (Rust) |
| +------------+ +-----------+ +-----------------+ |
| | Store | | Commands | | Export/Import | |
| | (JSON+RAM) | | (24 mod) | | (17+8 formats) | |
| +------------+ +-----------+ +-----------------+ |
| +------------+ +-----------+ +-----------------+ |
| | Training | | Browser | | P2P (Iroh) | |
| | (19 backs) | | Automat. | | QUIC mesh | |
| +------------+ +-----------+ +-----------------+ |
| +------------+ +-----------+ +-----------------+ |
| | Inference | | SAM | | Serve (axum) | |
| | (ONNX/ort) | | enc/dec | | LAN web UI | |
| +------------+ +-----------+ +-----------------+ |
+-----------------------------------------------------+
| External Integrations |
| Python (micromamba) . FFmpeg . pdfium . Chromium |
| Cloud APIs . Iroh P2P network |
+-----------------------------------------------------+
All data stored as JSON + raw assets on disk. No database.
~/.local/share/annotix/config.json -> global configuration (projects_dir)
~/.local/share/annotix/sam_models/ -> SAM encoder/decoder ONNX (app-level)
~/.local/share/annotix/p2p/iroh/ -> P2P blobs + replicated docs
{projects_dir}/{uuid}/project.json -> the whole project
{projects_dir}/{uuid}/images/ -> original images
{projects_dir}/{uuid}/thumbnails/ -> generated thumbnails
{projects_dir}/{uuid}/videos/ -> video files
{projects_dir}/{uuid}/audio/ -> audio files
{projects_dir}/{uuid}/models/ -> registered inference models
{projects_dir}/{uuid}/training/ -> per-job datasets and results
project.json is a single document holding metadata, classes, images with their annotations,
time series, videos with their tracks, audio, tabular data, training jobs with per-epoch metric
history, inference models, TTS sentences and the collaboration config. An in-memory cache with
dirty-flag tracking sits in front of it; writes go to a .tmp file and are then renamed.
IDs are UUID v4 end to end. Class IDs are reindexed to their position on save, and the remap propagates to image annotations, video tracks, audio and time series.
| 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 |
| jsPDF / html2canvas | 4 / 1.4 | Training report PDF |
| TanStack Virtual | 3 | Virtualized gallery |
| i18next | 24 | Internationalization |
| Crate | Version | Purpose |
|---|---|---|
| tauri | 2 | Desktop application framework |
| serde / serde_json | 1 | JSON serialization |
| image / imageproc | 0.25 | Image processing |
| fast_image_resize | 5 | SIMD resizing |
| rayon | 1.10 | Data parallelism |
| geo | 0.29 | Polygon simplification |
| webp | 0.3 | WebP encoding |
| ort | 2.0-rc | ONNX Runtime (inference + SAM) |
| ffmpeg-the-third | 4.1 | Video frame extraction |
| pdfium-render | 0.8 | PDF page rasterization |
| 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) |
| jsonwebtoken | 9 | GCP service-account auth |
| axum | 0.8 | LAN serve HTTP server |
| chacha20poly1305 / subtle | 0.10 / 2 | Session secret encryption |
| headless_chrome | 1.0 | Browser automation (CDP) |
| iroh + blobs/gossip/docs | 0.96–0.98 | P2P networking (QUIC) |
| tokio | 1 | Async runtime |
| blake3 | 1 | Hashing |
| 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 |
pnpm-lock.yaml)git clone https://github.com/Debaq/Annotix.git
cd Annotix
pnpm install
pnpm tauri:dev # development (hot-reload)
pnpm tauri:build # production build
| Script | Description |
|---|---|
pnpm dev | Frontend only (Vite dev server) |
pnpm build | Build frontend (TypeScript check + Vite) |
pnpm tauri:dev | Full dev (frontend + Rust backend) |
pnpm tauri:build | Production build with installers |
pnpm lint | ESLint (flat config) |
CI runs cargo fmt/clippy, cargo nextest and the frontend build on every push.
annotix/
├── src/ # React frontend (~46k LOC)
│ ├── 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)
│ ├── sam/ # SAM assist (overlay, panel, store)
│ ├── gallery/ # Virtualized gallery + filters
│ ├── video/ # Video annotation
│ ├── audio/ # Audio annotation + TTS recording
│ ├── timeseries/ # Time series annotation
│ ├── tabular/ # Tabular data editor
│ ├── classification/ # Classification workflow
│ ├── training/ # ML training panel + monitor + PDF report
│ ├── export/ # 17 export formats
│ ├── import/ # 8 import formats
│ ├── inference/ # Model inference
│ ├── p2p/ # P2P collaboration
│ ├── serve/ # LAN sharing dialog
│ ├── browser-automation/ # Chrome automation
│ ├── setup/ # First-run setup
│ └── settings/ # App settings
├── src-tauri/ # Rust backend (~41k LOC)
│ └── src/
│ ├── lib.rs # 194 Tauri command registrations
│ ├── store/ # Storage layer (state, IO, cache)
│ ├── commands/ # 24 command modules
│ ├── export/ # Export format modules
│ ├── import/ # Import + auto-detector + merge
│ ├── training/ # Multi-backend ML pipeline + cloud providers
│ ├── browser_automation/ # Headless Chrome (Colab, LLM chat)
│ ├── p2p/ # Iroh P2P networking
│ ├── serve/ # axum LAN server + web UI
│ └── inference/ # ONNX inference + SAM (encoder/decoder/AMG)
├── docs/ # Roadmaps and backend references
├── wiki/ # User documentation
└── public/locales/ # 10 languages x 47 namespaces
If you use Annotix in your research, please cite:
@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
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
MIT License — TecMedHub, Universidad Austral de Chile, Campus Puerto Montt.
259 commits
11 commits
Rust
51.6%
TypeScript
44.8%
HTML
1.5%