Debaq/Annotix

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

Rust

7

270 commits

updated Sep 14, 2026

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

README

Annotix Logo

Annotix

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

Latest Release Downloads Stars License Platform

Tauri 2 React 19 Rust i18n ML Backends SAM

Download  •  Read the Paper  •  System Overview  •  Build from Source  •  Cite


Paper

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.


Why Annotix?

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

AnnotixCloud tools (CVAT, Label Studio)Desktop tools (labelImg, LabelMe)
Runs fully offlineYesNoYes
Images + Video + Audio + Time Series + TabularYesPartialNo
SAM-assisted segmentation (local ONNX)YesPartialNo
Integrated ML training (19 backends)YesNoNo
P2P collaboration (no server)YesServer requiredNo
LAN sharing via browser (no install)YesServer requiredNo
Free GPU training (Colab automation)YesNoNo
Export to 17 formatsYesYesLimited
Cross-platform native appYesBrowserPartial

Status

Last updated: June 2026 — v2.9.10

FeatureStatusNotes
Image annotation (7 tools):white_check_mark: StableBBox, OBB, Mask, Polygon, Keypoints, Landmarks, Pan
SAM assist:white_check_mark: StableLocal ONNX encoder/decoder, AMG candidates, click-refine, app-level model store
Video annotation:white_check_mark: StableTracks, keyframes, interpolation, bake
Audio annotation:white_check_mark: StableWaveform UI, classification, ASR transcription, sound events, TTS recording
Time series annotation:white_check_mark: Stable5 annotation types, Chart.js canvas
Tabular ML:white_check_mark: Stablescikit-learn integration, column selector
ONNX inference:white_check_mark: StableAuto-detects YOLOv5-v12, DETR, SSD, classification; opt-in TensorRT/CUDA/DirectML/CoreML EPs
Export (17 formats):white_check_mark: StableYOLO, COCO, VOC, CSV, U-Net, TIX, rasterized previews, audio formats
Import (8 formats):white_check_mark: StableAuto-detection with confidence scoring; PDF pages as images
Local ML training (19 backends):white_check_mark: StableIsolated Python env, GPU auto-detection, live metrics, PDF report
Cloud training (7 providers):white_check_mark: StableVertex AI, Kaggle, Lightning AI, HuggingFace, Saturn Cloud, Colab Enterprise
Browser automation (Colab free):white_check_mark: StableT4 GPU, real-time progress
Network sharing (serve):white_check_mark: StableHTTP server on LAN with bearer-token auth, browser annotation UI
P2P collaboration:white_check_mark: StableIroh 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: StablePer-class/per-image filters, cross-project comparison
Keyboard shortcuts:white_check_mark: StableFully customizable, conflict detection
i18n (10 languages):white_check_mark: Stable47 namespaces, lazy loading, English fallback
Audio import:construction: In progressExport implemented (HF ASR, LJSpeech, CSV); import not yet available
Audio training backends:construction: Not implementedAudio projects annotate & export only; train externally
SAM model auto-download:construction: In progressManual upload works; HuggingFace presets (MobileSAM / ViT-B / SAM2) pending
LLM chat via browser:construction: BetaKimi, Qwen, DeepSeek, HuggingChat; generic runner works, provider modules partially wired
macOS build:warning: Not testedNo 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:

PlatformDownload
Windows (x64).exe installer  |  .msi
Linux (x64).tar.gz (portable binary + libs + installer script)
macOSBuild 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.


Features at a Glance

Annotation Tools

7 tools on a high-performance Konva canvas:

ToolKeyDescription
BBoxBRectangular bounding box with drag & resize
OBBOOriented bounding box with free rotation
MaskMFreehand painting with configurable brush and eraser
PolygonPPoint-by-point polygon with auto-close
KeypointsKSkeleton presets (COCO, face, hand, MediaPipe)
LandmarksLNamed reference points with labels
PanHCanvas 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.

SAM-Assisted Segmentation

Segment Anything runs locally via ONNX — no cloud, no API key.

  • AMG mode: a 16×16 point grid (32×32 in HQ mode) feeds the decoder in batch; click a candidate mask + press a class key to convert it into the active tool's format (BBox / OBB / Mask / Polygon)
  • Refine mode: click-by-click positive/negative prompts on a cached image embedding
  • Each candidate keeps all 3 multimask outputs as uint8 logits at 256px, so the granularity slider switches between them without re-running the decoder
  • Frontend sliders (granularity, score, NMS, overlap) re-filter candidates without re-running AMG
  • Encoder/decoder models are stored app-level ({data_dir}/sam_models/), shared across projects
  • Candidates are ephemeral — never written to project.json
AMG defaultValueRole
points_per_side16prompt grid (32 in HQ mode)
pred_iou_thresh0.70drops low-confidence decoder masks
stability_score_thresh0.85stability under logit-threshold shift
box_nms_thresh0.70non-max suppression over boxes
min_mask_region_area100 pxsmallest mask kept
overlap_with_existing_thresh0.50max overlap with existing annotations

Project Types

23 project types across four families, each with its own editor and export path:

  • Images (9) — detection, oriented detection, semantic segmentation, instance segmentation, polygon, keypoints, landmarks, single- and multi-label classification
  • Time Series (9) — classification, forecasting, anomaly detection, segmentation, pattern recognition, event detection, regression, clustering, imputation
  • Audio (4) — classification, speech recognition, sound event detection, TTS recording
  • Tabular (1) — built-in editor with column selection and scikit-learn training

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.

Integrated ML Training (19 Backends)

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.

Full backend list

Object Detection

BackendModels
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.)

Semantic Segmentation

BackendModels
SMPU-Net, DeepLabV3+, FPN, PSPNet, etc.
HuggingFace SegmentationSegFormer, Mask2Former, etc.
MMSegmentationFull OpenMMLab catalog

Instance Segmentation

BackendModels
Detectron2 (Meta)Mask R-CNN, Cascade R-CNN, etc.

Keypoints & Pose

BackendModels
MMPoseHRNet, ViTPose, RTMPose, etc.

Oriented Object Detection (OBB)

BackendModels
MMRotateOriented R-CNN, RoI Transformer, etc.

Image Classification

BackendModels
timm700+ models (ResNet, EfficientNet, ViT, ConvNeXt, etc.)
HuggingFace ClassificationViT, BEiT, DeiT, Swin, etc.

Time Series

BackendTask
tsaiClassification, regression, forecasting
PyTorch ForecastingTFT, N-BEATS, etc.
PyODAnomaly detection
tslearnTemporal clustering
PyPOTSMissing value imputation
STUMPYMatrix Profile (motif/pattern discovery)

Tabular

BackendTask
scikit-learnRandomForest, SVM, kNN, GradientBoosting, etc.

4 execution modes:

ModeDescription
LocalIsolated Python env via micromamba, GPU auto-detection (CUDA / MPS)
Download PackageZIP with script + data for external execution
CloudVertex AI, Kaggle, Lightning AI, HuggingFace, Saturn Cloud
Browser AutomationFree 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.

Inference

Run trained or third-party ONNX models over a whole project:

  • Auto-detection of architecture and metadata (classes, input size, 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 classification
  • Batch inference with cancel, per-prediction accept/reject, conversion to annotations
  • Model archives can be dropped in directly (ZIP extraction + drag & drop import)
  • Execution providers are opt-in (TensorRT, CUDA, DirectML, CoreML); CPU path uses SIMD preprocessing and a parallel pipeline

P2P Collaboration

Real-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.

  • Host or join with a session code; the host secret is encrypted at rest
  • Roles: LeadResearcher (full control) / Annotator / DataCurator, with per-session rule overrides (upload, export, edit classes, delete) and live role changes
  • Live sync of images, annotations and classes with author attribution; blob transfer with retries and resumable downloads
  • Image presence locks (3-min TTL, auto-renewed) so you can see who is on which image
  • Work distribution: auto-assign batches across peers, adjust assignments, per-peer progress stats
  • Data approval queue: submissions from collaborators can require host approval
  • Pause / resume a session; peer list with heartbeat-based online status

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.

Network Sharing (Serve)

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).

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

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.

Inspector & Filters

Annotation inspector reachable from the project gallery, with debug/observation filters over marks, classes and gallery, per-class counters, and multi-project comparison.

Keyboard Shortcuts

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

Default shortcuts

Image Tools

ShortcutAction
BBounding Box
OOBB
MMask
PPolygon
KKeypoints
LLandmarks
VSelect
HPan
[ / ]Decrease / Increase brush size
EToggle eraser
A / DRotate image
EnterConfirm drawing
EscCancel 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.

ShortcutAction
PageUp / PageDownPrevious / Next sample
Ctrl++ / Ctrl+-Zoom in / out
Ctrl+0Zoom to fit

General

ShortcutAction
Ctrl+SSave
Ctrl+Z / Ctrl+YUndo / Redo
Del / BackspaceDelete selection
EscDeselect

Quick Class Selection

KeysClasses
1 - 0Classes 1 to 10
Q - PClasses 11 to 20

Video

ShortcutAction
TNew track

Time Series

ShortcutAction
VSelect
PPoint
RRange
EEvent
AAnomaly

Audio

ShortcutAction
F2Play / Pause
F3 / F4Replay / Rewind
Left / RightScrub
EnterSplit
TabSave & next

TTS Recording

ShortcutAction
SpaceRecord
EnterAccept take
RRepeat
SSkip sentence

Languages

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


Architecture

+-----------------------------------------------------+
|                    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                      |
+-----------------------------------------------------+

Storage

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.


Tech Stack

Frontend
TechnologyVersionPurpose
React19UI framework
TypeScript5.7Static typing
Vite6Bundler and dev server
Tailwind CSS3.4Utility-first styling
shadcn/uiComponent library (Radix UI)
Zustand5Global state with persistence
React Router7SPA routing
Konva102D annotation canvas
Chart.js4Metrics visualization
jsPDF / html2canvas4 / 1.4Training report PDF
TanStack Virtual3Virtualized gallery
i18next24Internationalization
Backend (Rust)
CrateVersionPurpose
tauri2Desktop application framework
serde / serde_json1JSON serialization
image / imageproc0.25Image processing
fast_image_resize5SIMD resizing
rayon1.10Data parallelism
geo0.29Polygon simplification
webp0.3WebP encoding
ort2.0-rcONNX Runtime (inference + SAM)
ffmpeg-the-third4.1Video frame extraction
pdfium-render0.8PDF page rasterization
zip2Export/import packaging
quick-xml0.37Pascal VOC XML
csv1.3CSV import/export
reqwest0.12HTTP client (cloud providers)
jsonwebtoken9GCP service-account auth
axum0.8LAN serve HTTP server
chacha20poly1305 / subtle0.10 / 2Session secret encryption
headless_chrome1.0Browser automation (CDP)
iroh + blobs/gossip/docs0.96–0.98P2P networking (QUIC)
tokio1Async runtime
blake31Hashing
Python (via micromamba)
PackagePurpose
ultralyticsYOLO, RT-DETR
rfdetrRF-DETR
mmdet, mmseg, mmpose, mmrotateOpenMMLab suite
segmentation-models-pytorchSemantic segmentation
timmClassification (700+ models)
detectron2Instance segmentation
tsai, pytorch-forecastingTime series deep learning
pyod, tslearn, pypots, stumpyTime series classical ML
scikit-learnTabular 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

Build & Run

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

Scripts

ScriptDescription
pnpm devFrontend only (Vite dev server)
pnpm buildBuild frontend (TypeScript check + Vite)
pnpm tauri:devFull dev (frontend + Rust backend)
pnpm tauri:buildProduction build with installers
pnpm lintESLint (flat config)

CI runs cargo fmt/clippy, cargo nextest and the frontend build on every push.


Project Structure

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

Citation

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


Contributing

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


License

MIT License — TecMedHub, Universidad Austral de Chile, Campus Puerto Montt.

Contributors

Debaq

259 commits

Felipebp012

11 commits

Debaq/Annotix

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

Rust

7

270 commits

updated Sep 14, 2026

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

README

Annotix Logo

Annotix

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

Latest Release Downloads Stars License Platform

Tauri 2 React 19 Rust i18n ML Backends SAM

Download  •  Read the Paper  •  System Overview  •  Build from Source  •  Cite


Paper

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.


Why Annotix?

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

AnnotixCloud tools (CVAT, Label Studio)Desktop tools (labelImg, LabelMe)
Runs fully offlineYesNoYes
Images + Video + Audio + Time Series + TabularYesPartialNo
SAM-assisted segmentation (local ONNX)YesPartialNo
Integrated ML training (19 backends)YesNoNo
P2P collaboration (no server)YesServer requiredNo
LAN sharing via browser (no install)YesServer requiredNo
Free GPU training (Colab automation)YesNoNo
Export to 17 formatsYesYesLimited
Cross-platform native appYesBrowserPartial

Status

Last updated: June 2026 — v2.9.10

FeatureStatusNotes
Image annotation (7 tools):white_check_mark: StableBBox, OBB, Mask, Polygon, Keypoints, Landmarks, Pan
SAM assist:white_check_mark: StableLocal ONNX encoder/decoder, AMG candidates, click-refine, app-level model store
Video annotation:white_check_mark: StableTracks, keyframes, interpolation, bake
Audio annotation:white_check_mark: StableWaveform UI, classification, ASR transcription, sound events, TTS recording
Time series annotation:white_check_mark: Stable5 annotation types, Chart.js canvas
Tabular ML:white_check_mark: Stablescikit-learn integration, column selector
ONNX inference:white_check_mark: StableAuto-detects YOLOv5-v12, DETR, SSD, classification; opt-in TensorRT/CUDA/DirectML/CoreML EPs
Export (17 formats):white_check_mark: StableYOLO, COCO, VOC, CSV, U-Net, TIX, rasterized previews, audio formats
Import (8 formats):white_check_mark: StableAuto-detection with confidence scoring; PDF pages as images
Local ML training (19 backends):white_check_mark: StableIsolated Python env, GPU auto-detection, live metrics, PDF report
Cloud training (7 providers):white_check_mark: StableVertex AI, Kaggle, Lightning AI, HuggingFace, Saturn Cloud, Colab Enterprise
Browser automation (Colab free):white_check_mark: StableT4 GPU, real-time progress
Network sharing (serve):white_check_mark: StableHTTP server on LAN with bearer-token auth, browser annotation UI
P2P collaboration:white_check_mark: StableIroh 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: StablePer-class/per-image filters, cross-project comparison
Keyboard shortcuts:white_check_mark: StableFully customizable, conflict detection
i18n (10 languages):white_check_mark: Stable47 namespaces, lazy loading, English fallback
Audio import:construction: In progressExport implemented (HF ASR, LJSpeech, CSV); import not yet available
Audio training backends:construction: Not implementedAudio projects annotate & export only; train externally
SAM model auto-download:construction: In progressManual upload works; HuggingFace presets (MobileSAM / ViT-B / SAM2) pending
LLM chat via browser:construction: BetaKimi, Qwen, DeepSeek, HuggingChat; generic runner works, provider modules partially wired
macOS build:warning: Not testedNo 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:

PlatformDownload
Windows (x64).exe installer  |  .msi
Linux (x64).tar.gz (portable binary + libs + installer script)
macOSBuild 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.


Features at a Glance

Annotation Tools

7 tools on a high-performance Konva canvas:

ToolKeyDescription
BBoxBRectangular bounding box with drag & resize
OBBOOriented bounding box with free rotation
MaskMFreehand painting with configurable brush and eraser
PolygonPPoint-by-point polygon with auto-close
KeypointsKSkeleton presets (COCO, face, hand, MediaPipe)
LandmarksLNamed reference points with labels
PanHCanvas 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.

SAM-Assisted Segmentation

Segment Anything runs locally via ONNX — no cloud, no API key.

  • AMG mode: a 16×16 point grid (32×32 in HQ mode) feeds the decoder in batch; click a candidate mask + press a class key to convert it into the active tool's format (BBox / OBB / Mask / Polygon)
  • Refine mode: click-by-click positive/negative prompts on a cached image embedding
  • Each candidate keeps all 3 multimask outputs as uint8 logits at 256px, so the granularity slider switches between them without re-running the decoder
  • Frontend sliders (granularity, score, NMS, overlap) re-filter candidates without re-running AMG
  • Encoder/decoder models are stored app-level ({data_dir}/sam_models/), shared across projects
  • Candidates are ephemeral — never written to project.json
AMG defaultValueRole
points_per_side16prompt grid (32 in HQ mode)
pred_iou_thresh0.70drops low-confidence decoder masks
stability_score_thresh0.85stability under logit-threshold shift
box_nms_thresh0.70non-max suppression over boxes
min_mask_region_area100 pxsmallest mask kept
overlap_with_existing_thresh0.50max overlap with existing annotations

Project Types

23 project types across four families, each with its own editor and export path:

  • Images (9) — detection, oriented detection, semantic segmentation, instance segmentation, polygon, keypoints, landmarks, single- and multi-label classification
  • Time Series (9) — classification, forecasting, anomaly detection, segmentation, pattern recognition, event detection, regression, clustering, imputation
  • Audio (4) — classification, speech recognition, sound event detection, TTS recording
  • Tabular (1) — built-in editor with column selection and scikit-learn training

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.

Integrated ML Training (19 Backends)

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.

Full backend list

Object Detection

BackendModels
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.)

Semantic Segmentation

BackendModels
SMPU-Net, DeepLabV3+, FPN, PSPNet, etc.
HuggingFace SegmentationSegFormer, Mask2Former, etc.
MMSegmentationFull OpenMMLab catalog

Instance Segmentation

BackendModels
Detectron2 (Meta)Mask R-CNN, Cascade R-CNN, etc.

Keypoints & Pose

BackendModels
MMPoseHRNet, ViTPose, RTMPose, etc.

Oriented Object Detection (OBB)

BackendModels
MMRotateOriented R-CNN, RoI Transformer, etc.

Image Classification

BackendModels
timm700+ models (ResNet, EfficientNet, ViT, ConvNeXt, etc.)
HuggingFace ClassificationViT, BEiT, DeiT, Swin, etc.

Time Series

BackendTask
tsaiClassification, regression, forecasting
PyTorch ForecastingTFT, N-BEATS, etc.
PyODAnomaly detection
tslearnTemporal clustering
PyPOTSMissing value imputation
STUMPYMatrix Profile (motif/pattern discovery)

Tabular

BackendTask
scikit-learnRandomForest, SVM, kNN, GradientBoosting, etc.

4 execution modes:

ModeDescription
LocalIsolated Python env via micromamba, GPU auto-detection (CUDA / MPS)
Download PackageZIP with script + data for external execution
CloudVertex AI, Kaggle, Lightning AI, HuggingFace, Saturn Cloud
Browser AutomationFree 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.

Inference

Run trained or third-party ONNX models over a whole project:

  • Auto-detection of architecture and metadata (classes, input size, 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 classification
  • Batch inference with cancel, per-prediction accept/reject, conversion to annotations
  • Model archives can be dropped in directly (ZIP extraction + drag & drop import)
  • Execution providers are opt-in (TensorRT, CUDA, DirectML, CoreML); CPU path uses SIMD preprocessing and a parallel pipeline

P2P Collaboration

Real-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.

  • Host or join with a session code; the host secret is encrypted at rest
  • Roles: LeadResearcher (full control) / Annotator / DataCurator, with per-session rule overrides (upload, export, edit classes, delete) and live role changes
  • Live sync of images, annotations and classes with author attribution; blob transfer with retries and resumable downloads
  • Image presence locks (3-min TTL, auto-renewed) so you can see who is on which image
  • Work distribution: auto-assign batches across peers, adjust assignments, per-peer progress stats
  • Data approval queue: submissions from collaborators can require host approval
  • Pause / resume a session; peer list with heartbeat-based online status

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.

Network Sharing (Serve)

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).

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

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.

Inspector & Filters

Annotation inspector reachable from the project gallery, with debug/observation filters over marks, classes and gallery, per-class counters, and multi-project comparison.

Keyboard Shortcuts

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

Default shortcuts

Image Tools

ShortcutAction
BBounding Box
OOBB
MMask
PPolygon
KKeypoints
LLandmarks
VSelect
HPan
[ / ]Decrease / Increase brush size
EToggle eraser
A / DRotate image
EnterConfirm drawing
EscCancel 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.

ShortcutAction
PageUp / PageDownPrevious / Next sample
Ctrl++ / Ctrl+-Zoom in / out
Ctrl+0Zoom to fit

General

ShortcutAction
Ctrl+SSave
Ctrl+Z / Ctrl+YUndo / Redo
Del / BackspaceDelete selection
EscDeselect

Quick Class Selection

KeysClasses
1 - 0Classes 1 to 10
Q - PClasses 11 to 20

Video

ShortcutAction
TNew track

Time Series

ShortcutAction
VSelect
PPoint
RRange
EEvent
AAnomaly

Audio

ShortcutAction
F2Play / Pause
F3 / F4Replay / Rewind
Left / RightScrub
EnterSplit
TabSave & next

TTS Recording

ShortcutAction
SpaceRecord
EnterAccept take
RRepeat
SSkip sentence

Languages

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


Architecture

+-----------------------------------------------------+
|                    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                      |
+-----------------------------------------------------+

Storage

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.


Tech Stack

Frontend
TechnologyVersionPurpose
React19UI framework
TypeScript5.7Static typing
Vite6Bundler and dev server
Tailwind CSS3.4Utility-first styling
shadcn/uiComponent library (Radix UI)
Zustand5Global state with persistence
React Router7SPA routing
Konva102D annotation canvas
Chart.js4Metrics visualization
jsPDF / html2canvas4 / 1.4Training report PDF
TanStack Virtual3Virtualized gallery
i18next24Internationalization
Backend (Rust)
CrateVersionPurpose
tauri2Desktop application framework
serde / serde_json1JSON serialization
image / imageproc0.25Image processing
fast_image_resize5SIMD resizing
rayon1.10Data parallelism
geo0.29Polygon simplification
webp0.3WebP encoding
ort2.0-rcONNX Runtime (inference + SAM)
ffmpeg-the-third4.1Video frame extraction
pdfium-render0.8PDF page rasterization
zip2Export/import packaging
quick-xml0.37Pascal VOC XML
csv1.3CSV import/export
reqwest0.12HTTP client (cloud providers)
jsonwebtoken9GCP service-account auth
axum0.8LAN serve HTTP server
chacha20poly1305 / subtle0.10 / 2Session secret encryption
headless_chrome1.0Browser automation (CDP)
iroh + blobs/gossip/docs0.96–0.98P2P networking (QUIC)
tokio1Async runtime
blake31Hashing
Python (via micromamba)
PackagePurpose
ultralyticsYOLO, RT-DETR
rfdetrRF-DETR
mmdet, mmseg, mmpose, mmrotateOpenMMLab suite
segmentation-models-pytorchSemantic segmentation
timmClassification (700+ models)
detectron2Instance segmentation
tsai, pytorch-forecastingTime series deep learning
pyod, tslearn, pypots, stumpyTime series classical ML
scikit-learnTabular 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

Build & Run

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

Scripts

ScriptDescription
pnpm devFrontend only (Vite dev server)
pnpm buildBuild frontend (TypeScript check + Vite)
pnpm tauri:devFull dev (frontend + Rust backend)
pnpm tauri:buildProduction build with installers
pnpm lintESLint (flat config)

CI runs cargo fmt/clippy, cargo nextest and the frontend build on every push.


Project Structure

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

Citation

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


Contributing

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


License

MIT License — TecMedHub, Universidad Austral de Chile, Campus Puerto Montt.

Contributors

Debaq

259 commits

Felipebp012

11 commits

Languages

Rust

51.6%

TypeScript

44.8%

HTML

1.5%