Tator is a local annotation-assistance workbench for object-detection datasets. Its main job is to help you extend an existing trusted dataset with new images or videos while doing less manual drawing, less blind review, and less repeated cleanup.
The product is not a one-click label factory. Tator uses local models to rank new media, draft boxes, suggest classes, inspect suspicious labels, and train reusable helpers. The human still decides what enters the dataset and which annotation changes become trusted labels.

Install the local environment once:
poetry install --only-root
poetry run tator-setup macos
the second piece of the poetry setup contains a harcoded ref to python3.11:
python3.11 -m venv .../xxx/Tator/.venv-macos
if your Poetry setup picked a different version of python then run the venv init with the correct version before the tator-setup step, ie:
python3.1xx -m venv .../xxx/Tator/.venv-macos
Then start the backend from the repository root with this single command:
tools/run_macos_backend.sh
If you are not already in the repo, use:
cd <your Tator checkout> && tools/run_macos_backend.sh
Leave that terminal running. When the backend is up, open:
http://127.0.0.1:8000/
The backend serves the app at / and /tator.html. The old /ybat.html URL
redirects to /tator.html.
If port 8000 is already in use:
PORT=8080 tools/run_macos_backend.sh
The launcher checks the requested bind address before importing the backend. If another process already owns the port, it prints the listener and exits instead of repeatedly loading models and restarting into the same bind failure.
Quick health check from a second terminal:
curl http://127.0.0.1:8000/system/health_summary
For setup details, see Environment Setup and macOS Inference Setup.
Use Tator when a manual annotation loop is too slow, but blind automation is too risky.
The strongest use case is dataset extension:
| You have... | Tator helps you... |
|---|---|
| A trusted accepted dataset | Keep its label map, glossary, storage state, and exports explicit. |
| New images or videos | Score the whole upload batch and keep the media most worth annotating. |
| Lots of boxes to draw | Use detectors, SAM/SAM3, class heads, and Qwen as draft assistants. |
| Existing labels that may be wrong | Find likely-wrong classes, overlap conflicts, outliers, and subclass islands. |
| A project you will repeat | Train reusable helpers and recipes from reviewed labels. |
Everything is organized around reducing human effort while preserving human control.
For a normal project pass, work through the UI in this order:
| Step | Goal | Main UI area |
|---|---|---|
| 1 | Define the trusted dataset, labels, glossary, storage mode, and export state. | Dataset Management |
| 2 | Decide which new media is worth labeling before drawing boxes. | Data Ingestion |
| 3 | Draft, edit, reclassify, delete, and confirm boxes in the live workspace. | Label Images |
| 4 | Audit the expanded dataset for likely mistakes and hidden subclasses. | Data Quality Explorer |
| 5 | Train helpers so the next batch starts with better proposals. | Training and recipe tabs |
| 6 | Select local models, devices, and runtime paths. | Model/runtime settings tabs |
The top navigation has many tabs because Tator covers the whole local annotation assist loop. Think of the tabs as five core tool groups plus runtime controls, not as unrelated features.
Dataset Management is the project control point. Use it before and after the model-assisted work so the dataset's identity and safety state are explicit.
It handles:
Two storage modes matter:
| Mode | Meaning | Best for |
|---|---|---|
| Linked dataset | Tator stores metadata and overlays while source files stay where they are. | Working from an existing local image folder without copying it. |
| Managed dataset | Tator owns a backend copy of images and labels. | Reopening, training on, exporting, or deleting a named backend record. |
Deleting a linked dataset record does not delete the original source images. Deleting a managed dataset acts on the backend-managed record, so important datasets should still be backed up outside Tator.
Data Ingestion answers the first dataset-extension question: which new media is worth adding to the trusted dataset?

The flow is:
Important behavior:
Label Images is the live annotation workspace. This is where boxes are drawn, edited, reclassified, deleted, and saved.

Tator can help with:
The rule is intentionally simple: models propose, the user reviews, and only reviewed labels become trusted labels.
Shift+Y exports the active YOLO labels and text captions. For backend-managed,
linked, and transient datasets, Tator captures an immutable annotation revision
in a background job and hands the completed labels-only archive to the browser
download manager. Repeating an unchanged export reuses its ready snapshot, while
retention limits remove older snapshots automatically. The archive includes all
stored caption alternatives, but not Data Quality Explorer vignettes, model
traces, images, or analysis artifacts.
Data Quality Explorer audits labels that already exist. It embeds object crops, projects them into 2D plots, and finds objects that are outliers, overlap suspiciously, or appear to belong to a hidden subclass.
Its built-in recipes are fixed and comparable: Thorough combines DINOv3 tight/context features, SAM3 mask features, bounded SALAD token aggregation, and the additional quality-ranking passes; Precise keeps the compact fused descriptor without the heaviest ranking branches; Fast uses a single DINOv3 view for quick map iteration. Custom exposes the same dimensions, weights, crop, pooling, and projection controls explicitly. PCA and UMAP only arrange the graph; review evidence remains in the full embedding space.
Optional 2-stage refinement keeps the pooled Stage-1 discovery result and raw candidate queue intact, then spatially qualifies only rough candidates with patch-level class and overlap evidence. It may change the default vignette queue, but it never changes annotations and remains advisory to the local VLM and human reviewer.

Use it to:
For Qwen review, the local VLM's final judgment is the core product behavior. Deterministic checks such as overlap, edge clipping, scale, embedding distance, and cue verification are guardrails and audit evidence. They may block automatic mutation, but they do not replace visual reasoning.
Class Split remains in some internal route names for compatibility; the
current UI name is Data Quality Explorer.
Training is optional during early manual review. It becomes useful once a project has enough reviewed labels to teach repeatable helpers.

Common helper paths:
| UI area | What it helps with |
|---|---|
| Train Class Predictor | Faster class suggestions from project-specific class heads. |
| Train YOLO / Train RF-DETR | Detector proposals and future prelabeling. |
| Train SAM3 | Promptable segmentation helpers and SAM3 datasets. |
| Train Qwen 3 | Local VLM model management and adapter-training paths. |
| Detection Recipes / SAM3 Recipe Mining | Repeatable prelabeling recipes. |
| SAM3 Vocabulary Explorer | Prompt vocabulary and class-language inspection. |
Train the helper that removes the next real bottleneck. You do not need to use every training tab on every project.
Tator supports multiple local runtimes because macOS inference, Linux training, and CUDA training have different dependency constraints.
Recommended setup commands:
# Apple Silicon inference and local MLX paths
poetry run tator-setup macos
# General Linux backend and training stack
poetry run tator-setup linux
# Pinned Falcon CUDA 11.8 stack
poetry run tator-setup falcon-cu118
Useful setup options:
poetry run tator-setup macos --dry-run
poetry run tator-setup linux --dev
poetry run tator-setup falcon-cu118 --venv-dir .venv-falcon
poetry run tator-setup macos --recreate
Optional macOS overrides can go in .env.macos:
QWEN_DEVICE=auto
QWEN_INFERENCE_PLATFORM=auto
# Optional override; by default Apple Silicon general Qwen inference uses AEON Qwen3.6 27B FP4.
QWEN_MLX_MODEL_NAME=AEON-7/Qwen3.6-27B-AEON-Ultimate-Uncensored-Multimodal-MLX-FP4
# auto lazy-loads large MLX VLMs such as AEON; set false to force eager load.
QWEN_MLX_LAZY_LOAD=auto
# Captioning may run many model calls; implicit caption runs keep the compact MLX default.
QWEN_MLX_CAPTION_MODEL_NAME=mlx-community/Qwen3-VL-4B-Instruct-4bit
# AEON and other larger MLX models remain selectable in the UI for explicit captioning runs.
# Optional CUDA/Transformers override; default is the matching AEON NVFP4 sibling.
QWEN_MODEL_NAME=AEON-7/Qwen3.6-27B-AEON-Ultimate-Uncensored-Multimodal-NVFP4-MTP-XS
# Training remains separate; default stays on a trainable Qwen3-VL checkpoint.
QWEN_TRAINING_DEFAULT_MODEL=Qwen/Qwen3-VL-4B-Instruct
TATOR_QWEN_PROGRESS_STALE_SECONDS=1800
DINOV3_BACKEND=auto
See macOS Inference Setup for MLX-DINOv3,
MLX-SAM, Qwen MLX-VLM, and Apple Silicon fallback behavior.
TATOR_QWEN_PROGRESS_STALE_SECONDS controls how long an active Qwen/prepass
progress record may sit without a heartbeat before the backend releases the UI
state and reports it as stale. The default is 30 minutes.
Tator is designed around local, human-controlled dataset work:
Use these docs when the README is not enough:
This repo is local tooling. Check the license and acceptable-use terms for every model, dataset, and generated artifact you use.
Notable external dependencies and model families include:
License compliance for trained models and exported datasets remains the user's responsibility.
31 commits
Python
74.5%
JavaScript
21.1%
HTML
2.7%
CSS
1.2%
Tator is a local annotation-assistance workbench for object-detection datasets. Its main job is to help you extend an existing trusted dataset with new images or videos while doing less manual drawing, less blind review, and less repeated cleanup.
The product is not a one-click label factory. Tator uses local models to rank new media, draft boxes, suggest classes, inspect suspicious labels, and train reusable helpers. The human still decides what enters the dataset and which annotation changes become trusted labels.

Install the local environment once:
poetry install --only-root
poetry run tator-setup macos
the second piece of the poetry setup contains a harcoded ref to python3.11:
python3.11 -m venv .../xxx/Tator/.venv-macos
if your Poetry setup picked a different version of python then run the venv init with the correct version before the tator-setup step, ie:
python3.1xx -m venv .../xxx/Tator/.venv-macos
Then start the backend from the repository root with this single command:
tools/run_macos_backend.sh
If you are not already in the repo, use:
cd <your Tator checkout> && tools/run_macos_backend.sh
Leave that terminal running. When the backend is up, open:
http://127.0.0.1:8000/
The backend serves the app at / and /tator.html. The old /ybat.html URL
redirects to /tator.html.
If port 8000 is already in use:
PORT=8080 tools/run_macos_backend.sh
The launcher checks the requested bind address before importing the backend. If another process already owns the port, it prints the listener and exits instead of repeatedly loading models and restarting into the same bind failure.
Quick health check from a second terminal:
curl http://127.0.0.1:8000/system/health_summary
For setup details, see Environment Setup and macOS Inference Setup.
Use Tator when a manual annotation loop is too slow, but blind automation is too risky.
The strongest use case is dataset extension:
| You have... | Tator helps you... |
|---|---|
| A trusted accepted dataset | Keep its label map, glossary, storage state, and exports explicit. |
| New images or videos | Score the whole upload batch and keep the media most worth annotating. |
| Lots of boxes to draw | Use detectors, SAM/SAM3, class heads, and Qwen as draft assistants. |
| Existing labels that may be wrong | Find likely-wrong classes, overlap conflicts, outliers, and subclass islands. |
| A project you will repeat | Train reusable helpers and recipes from reviewed labels. |
Everything is organized around reducing human effort while preserving human control.
For a normal project pass, work through the UI in this order:
| Step | Goal | Main UI area |
|---|---|---|
| 1 | Define the trusted dataset, labels, glossary, storage mode, and export state. | Dataset Management |
| 2 | Decide which new media is worth labeling before drawing boxes. | Data Ingestion |
| 3 | Draft, edit, reclassify, delete, and confirm boxes in the live workspace. | Label Images |
| 4 | Audit the expanded dataset for likely mistakes and hidden subclasses. | Data Quality Explorer |
| 5 | Train helpers so the next batch starts with better proposals. | Training and recipe tabs |
| 6 | Select local models, devices, and runtime paths. | Model/runtime settings tabs |
The top navigation has many tabs because Tator covers the whole local annotation assist loop. Think of the tabs as five core tool groups plus runtime controls, not as unrelated features.
Dataset Management is the project control point. Use it before and after the model-assisted work so the dataset's identity and safety state are explicit.
It handles:
Two storage modes matter:
| Mode | Meaning | Best for |
|---|---|---|
| Linked dataset | Tator stores metadata and overlays while source files stay where they are. | Working from an existing local image folder without copying it. |
| Managed dataset | Tator owns a backend copy of images and labels. | Reopening, training on, exporting, or deleting a named backend record. |
Deleting a linked dataset record does not delete the original source images. Deleting a managed dataset acts on the backend-managed record, so important datasets should still be backed up outside Tator.
Data Ingestion answers the first dataset-extension question: which new media is worth adding to the trusted dataset?

The flow is:
Important behavior:
Label Images is the live annotation workspace. This is where boxes are drawn, edited, reclassified, deleted, and saved.

Tator can help with:
The rule is intentionally simple: models propose, the user reviews, and only reviewed labels become trusted labels.
Shift+Y exports the active YOLO labels and text captions. For backend-managed,
linked, and transient datasets, Tator captures an immutable annotation revision
in a background job and hands the completed labels-only archive to the browser
download manager. Repeating an unchanged export reuses its ready snapshot, while
retention limits remove older snapshots automatically. The archive includes all
stored caption alternatives, but not Data Quality Explorer vignettes, model
traces, images, or analysis artifacts.
Data Quality Explorer audits labels that already exist. It embeds object crops, projects them into 2D plots, and finds objects that are outliers, overlap suspiciously, or appear to belong to a hidden subclass.
Its built-in recipes are fixed and comparable: Thorough combines DINOv3 tight/context features, SAM3 mask features, bounded SALAD token aggregation, and the additional quality-ranking passes; Precise keeps the compact fused descriptor without the heaviest ranking branches; Fast uses a single DINOv3 view for quick map iteration. Custom exposes the same dimensions, weights, crop, pooling, and projection controls explicitly. PCA and UMAP only arrange the graph; review evidence remains in the full embedding space.
Optional 2-stage refinement keeps the pooled Stage-1 discovery result and raw candidate queue intact, then spatially qualifies only rough candidates with patch-level class and overlap evidence. It may change the default vignette queue, but it never changes annotations and remains advisory to the local VLM and human reviewer.

Use it to:
For Qwen review, the local VLM's final judgment is the core product behavior. Deterministic checks such as overlap, edge clipping, scale, embedding distance, and cue verification are guardrails and audit evidence. They may block automatic mutation, but they do not replace visual reasoning.
Class Split remains in some internal route names for compatibility; the
current UI name is Data Quality Explorer.
Training is optional during early manual review. It becomes useful once a project has enough reviewed labels to teach repeatable helpers.

Common helper paths:
| UI area | What it helps with |
|---|---|
| Train Class Predictor | Faster class suggestions from project-specific class heads. |
| Train YOLO / Train RF-DETR | Detector proposals and future prelabeling. |
| Train SAM3 | Promptable segmentation helpers and SAM3 datasets. |
| Train Qwen 3 | Local VLM model management and adapter-training paths. |
| Detection Recipes / SAM3 Recipe Mining | Repeatable prelabeling recipes. |
| SAM3 Vocabulary Explorer | Prompt vocabulary and class-language inspection. |
Train the helper that removes the next real bottleneck. You do not need to use every training tab on every project.
Tator supports multiple local runtimes because macOS inference, Linux training, and CUDA training have different dependency constraints.
Recommended setup commands:
# Apple Silicon inference and local MLX paths
poetry run tator-setup macos
# General Linux backend and training stack
poetry run tator-setup linux
# Pinned Falcon CUDA 11.8 stack
poetry run tator-setup falcon-cu118
Useful setup options:
poetry run tator-setup macos --dry-run
poetry run tator-setup linux --dev
poetry run tator-setup falcon-cu118 --venv-dir .venv-falcon
poetry run tator-setup macos --recreate
Optional macOS overrides can go in .env.macos:
QWEN_DEVICE=auto
QWEN_INFERENCE_PLATFORM=auto
# Optional override; by default Apple Silicon general Qwen inference uses AEON Qwen3.6 27B FP4.
QWEN_MLX_MODEL_NAME=AEON-7/Qwen3.6-27B-AEON-Ultimate-Uncensored-Multimodal-MLX-FP4
# auto lazy-loads large MLX VLMs such as AEON; set false to force eager load.
QWEN_MLX_LAZY_LOAD=auto
# Captioning may run many model calls; implicit caption runs keep the compact MLX default.
QWEN_MLX_CAPTION_MODEL_NAME=mlx-community/Qwen3-VL-4B-Instruct-4bit
# AEON and other larger MLX models remain selectable in the UI for explicit captioning runs.
# Optional CUDA/Transformers override; default is the matching AEON NVFP4 sibling.
QWEN_MODEL_NAME=AEON-7/Qwen3.6-27B-AEON-Ultimate-Uncensored-Multimodal-NVFP4-MTP-XS
# Training remains separate; default stays on a trainable Qwen3-VL checkpoint.
QWEN_TRAINING_DEFAULT_MODEL=Qwen/Qwen3-VL-4B-Instruct
TATOR_QWEN_PROGRESS_STALE_SECONDS=1800
DINOV3_BACKEND=auto
See macOS Inference Setup for MLX-DINOv3,
MLX-SAM, Qwen MLX-VLM, and Apple Silicon fallback behavior.
TATOR_QWEN_PROGRESS_STALE_SECONDS controls how long an active Qwen/prepass
progress record may sit without a heartbeat before the backend releases the UI
state and reports it as stale. The default is 30 minutes.
Tator is designed around local, human-controlled dataset work:
Use these docs when the README is not enough:
This repo is local tooling. Check the license and acceptable-use terms for every model, dataset, and generated artifact you use.
Notable external dependencies and model families include:
License compliance for trained models and exported datasets remains the user's responsibility.
31 commits
Python
74.5%
JavaScript
21.1%
HTML
2.7%
CSS
1.2%