
Pluggable Python and C++ multi-object tracking modules for axis-aligned and oriented bounding box detections from any model.
Docs • Installation • Modes • API Reference • Trackers • Contributing

BoxMOT gives you one CLI and one Python API for running modern multi-object tracking workflows. It covers direct tracking, cached benchmark evaluation, tuning, research loops, ReID training and evaluation, and ReID export without forcing you to rebuild the detector and tracker stack for each experiment.
track, generate, eval, tune, research, train, eval-reid, and export.--tracker-backend cpp and embeddable in standalone C++ projects via CMake (see Native C++ Integration).BoxMOT supports Python 3.10 through 3.13.
pip install boxmot
boxmot --help
For mode-specific extras such as yolo, evolve, research, onnx, openvino, and tflite, see the installation guide.
| Tracker | Status | MOT17 ablation | SportsMOT val | MMOT test | OBB | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| HOTA | MOTA | IDF1 | HOTA | MOTA | IDF1 | HOTA | MOTA | IDF1 | |||
| occluboost | ✅ | 70.47 (70.48) | 78.32 (78.31) | 84.14 (84.14) | 83.17 | 97.48 | 89.36 | – | – | – | ✅ |
| botsort | ✅ | 69.44 (69.43) | 78.24 (78.26) | 81.94 (82.00) | 76.93 | 98.11 | 78.30 | 51.79 | 46.05 | 60.85 | ✅ |
| boosttrack | ✅ | 69.25 (—) | 75.91 (—) | 83.20 (—) | 76.32 | 97.08 | 77.82 | – | – | – | ❌ |
| strongsort | ✅ | 68.05 (—) | 76.19 (—) | 80.76 (—) | 79.80 | 97.31 | 80.27 | – | – | – | ❌ |
| deepocsort | ✅ | 67.95 (—) | 75.83 (—) | 80.54 (—) | 79.51 | 97.94 | 79.59 | – | – | – | ❌ |
| bytetrack | ✅ | 67.68 (67.75) | 78.04 (78.03) | 79.16 (79.38) | 67.93 | 97.25 | 76.90 | 33.97 | 33.72 | 39.74 | ✅ |
| hybridsort | ✅ | 67.31 (—) | 74.09 (—) | 78.87 (—) | 81.14 | 98.07 | 81.88 | – | – | – | ❌ |
| ocsort | ✅ | 66.44 (66.44) | 74.55 (74.55) | 77.90 (77.90) | 76.34 | 96.60 | 75.64 | 28.57 | 26.19 | 29.95 | ✅ |
| sfsort | ✅ | 62.65 (62.66) | 76.87 (76.74) | 69.18 (69.18) | 75.73 | 98.39 | 72.99 | 44.19 | 44.27 | 46.25 | ✅ |
Py (C++); — unavailable. See Benchmark Workflows.
Related guides:
CLI:
boxmot track --detector yolo26n --reid lmbn_n_duke --tracker occluboost --source 0 --save --show
Python:
import numpy as np
from boxmot.trackers import OccluBoost
tracker = OccluBoost()
# dets: (N, 6) array with [x1, y1, x2, y2, conf, cls] per detection
dets = np.array([[100, 200, 300, 400, 0.9, 0]], dtype=np.float32)
img = np.zeros((480, 640, 3), dtype=np.uint8) # current frame
# tracks: (M, 8) array with [x1, y1, x2, y2, id, conf, cls, det_ind] per track
tracks = tracker.update(dets, img)
print(tracks)
Start with CONTRIBUTING.md and the contributor docs.
box-mot@outlook.com$ claude mcp add boxmot \
-- python -m otcore.mcp_server <graph>