Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

horos — annotate, train, evaluate, deploy

horos (ὅρος — boundary, definition) is the path that takes a detection model into production: one tool that carries a dataset from raw images through annotation, training, and evaluation to a deployable artifact — with a web UI, a Python API, and a CLI that share one capability set.

Quickstart · Web UI · Models · Platforms · Installation · Roadmap

Quickstart

Install (details & Jetson notes below):

pip install horos
horos doctor        # verifies the environment; --fix installs what's missing

Run the whole pipeline from the terminal:

horos init my-project                   # new project directory
horos import my-project path/to/data    # COCO / YOLO / VOC / Darknet / VIA, dir or zip
horos ui my-project                     # web UI: dataset, annotate, train, evaluate

Or from Python — every UI action has a scriptable twin:

import horos.api as api

project = api.open_project("my-project")
record = api.start_training(project, api.TrainRunConfig(model="rfdetr-small"))
# ... poll api.training_status(project, record.run_id) ...
report = api.get_eval_report(project, record.run_id, "test")
annotate → train → evaluate → deploy

Web UI

horos ui <project> serves four pages on localhost.

Dataset

Import by dropping a zip (COCO / YOLO / VOC / Darknet / VIA — format is auto-detected), get a validation report with actionable errors, per-class statistics, and train/valid/test re-splitting.

Dataset page

Annotate

A keyboard-first canvas for boxes and polygons. OWLv2 turns text prompts into zero-shot pre-labels, so annotators start from correcting instead of from a blank image — with an accept / fix / reject review flow, and safe concurrent annotation for teams.

Annotate page

Train

One click to start: hyperparameters are derived from your dataset's statistics with the reasoning shown, and every value can be overridden. Live loss/mAP curves, a run queue with in-place editing, resume with full optimizer state, OOM auto-backoff, a selectable best-checkpoint criterion, and a post-run verdict with concrete suggestions.

Training page

Evaluate

Drop photos, GIFs, or videos onto a trained model and browse per-frame predictions in a gallery viewer (confidence slider, frame-by-frame navigation). COCO metrics with per-class AP and PR curves, persisted per run.

Evaluate page

Models

All registered weights are Apache-2.0. Nothing is bundled — weights download on first use and cache locally.

Detection (trainable)

Model Params Input Notes
RF-DETR Nano 30.5 M 384 px fastest — Jetson-friendly real-time
RF-DETR Small 32.1 M 512 px fast — good default for Jetson
RF-DETR Medium 33.7 M 576 px balanced accuracy/latency
RF-DETR Large 129 M 704 px highest accuracy — desktop GPU recommended

Annotation assistants (not for deployment)

Model Params Role
OWLv2 Base / Large 155 M / 437 M open-vocabulary zero-shot pre-labeling from text prompts
SAM ViT-B 94 M turns autolabel boxes into polygon masks

RF-DETR XL/2XL are deliberately unregistered: their weights are not Apache-2.0 (PML 1.0). Loading them requires an explicit acknowledge_non_apache=True.

Platform support

Capability Ubuntu (CUDA) Windows macOS Jetson
Dataset management & annotation ✅ ✅ ✅ ✅
Auto-labeling (OWLv2) ✅ ✅ ✅ (MPS/CPU, slower) ✅
Training ✅ ✅ small-dataset validation only discouraged, not blocked
Inference & evaluation ✅ ✅ ✅ ✅
TensorRT export (planned) ✅ ✅ ❌ refused explicitly ✅

Unsupported combinations raise a clear error at the API layer and show up as disabled buttons with an explanation in the UI — never a silent CPU fallback. Device priority: CUDA → MPS → CPU, recorded in each run's metadata.

Installation

The install scripts detect your platform (OS, NVIDIA GPU, Jetson) and install the matching torch build plus horos into ./.venv:

./install.sh        # Ubuntu / macOS / Jetson
install.bat         # Windows
What the scripts decide for you
Platform torch source
Linux + NVIDIA GPU PyPI (Linux wheels bundle CUDA)
Linux without GPU PyTorch CPU index (saves ~2 GB)
macOS PyPI universal build (MPS)
Windows + NVIDIA GPU PyTorch index matching your CUDA (cu118/cu124/cu126) — the PyPI Windows wheel is CPU-only
Windows without GPU PyPI (CPU)
Jetson never installed by the script — see below

Use a dedicated environment. horos pins rfdetr exactly (upstream has had silent annotation-corruption bugs; reproducibility wins) and requires transformers >= 5.1 — installing into a shared ML environment will upgrade transformers, supervision, huggingface-hub and friends, which can break other projects living in that environment.

Jetson (read this — it matters)

On Jetson, torch must come from NVIDIA's JetPack-matched wheel. The PyPI torch has no CUDA support on Jetson, and a plain pip install horos may silently replace your CUDA-enabled torch with a CPU-only build — everything still runs, just an order of magnitude slower.

./install.sh handles this automatically on Jetson: it creates the venv with --system-site-packages, verifies the existing torch has CUDA (warning loudly if not), and installs horos with --no-deps so pip can never swap torch out. horos also warns at backend load time when it detects a Jetson platform where torch.cuda.is_available() is False.

Jetson install by hand
pip install horos --no-deps
pip install pydantic flask pyyaml pillow imageio imageio-ffmpeg "transformers>=5.1,<6"
# torch/torchvision: use the NVIDIA wheel matching your JetPack version — FIRST,
# because the training stack below declares torch as a dependency
pip install "rfdetr==1.9.4" --no-deps
pip install supervision pycocotools scipy peft \
    "pytorch_lightning>=2.6,!=2.6.2,!=2.6.3,<3" \
    "torchmetrics[detection]>=1.2" "faster-coco-eval>=1.7.2"

Roadmap

  • Project & dataset core — formats, validation, stats, splits
  • Manual annotation — bbox + polygon, multi-annotator
  • Auto-labeling — OWLv2 open-vocabulary, review workflow
  • Training — derived hyperparameters, queue, resume, live monitoring
  • Evaluation — media gallery, COCO metrics, per-class analysis
  • Error analysis — confusion pairs, worst-case mining
  • Experiment management — run comparison, dataset fingerprints
  • Export & deploy — ONNX / TensorRT / TFLite, model cards, parity checks

Development

python -m venv .venv && . .venv/bin/activate
pip install -e . --no-deps
pip install pydantic flask pyyaml pillow imageio pytest ruff
pytest tests/test_invariants.py && pytest

tests/test_invariants.py runs first for a reason: it statically enforces the architecture — model dependencies live only in horos/backends/, import horos never drags in torch, and the UI talks to the core exclusively through the web API. Models are adapters; the workflow is the product.

License

Distributed under the Apache License 2.0. Model weights are downloaded at runtime and cached locally — horos never bundles or redistributes them, and each model's license is recorded in the registry, shown in the UI, and stamped into every training run.

Acknowledgments

RF-DETR by Roboflow · OWLv2 by Google Research · Segment Anything by Meta AI

Metadata

Release files for horos 0.1.1.dev1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for horos 0.1.1.dev1
File Size Uploaded
horos-0.1.1.dev1.tar.gz 153.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for horos 0.1.1.dev1
File Interpreter ABI Platform
horos-0.1.1.dev1-py3-none-any.whl Python 3 none any Details

Total release size: 331.5 kB

Release files / horos-0.1.1.dev1.tar.gz

Download URL horos-0.1.1.dev1.tar.gz
Size 153.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a04538a3a223f789a7baa45e1e31bd472da0c4744077f75e4b873089c95599ca
BLAKE2b-256 checksum
How to use checksums
e268994f3ed3a1da53643d062789f05a12fd3d0df4bcd58f0d4d276b086a84ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.6

Release files / horos-0.1.1.dev1-py3-none-any.whl

Download URL horos-0.1.1.dev1-py3-none-any.whl
Size 178.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
66ea253d5c806965d7790c3b2ada2e4a5613bd489772c6e8e1a7175114760cca
BLAKE2b-256 checksum
How to use checksums
54d9dfaca17754cadf72e6f07b429a8feda2b17f7e0b0539462c30e32ec84dd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.6
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page