# xin-shu/omnisort architecture

> Architecture diagram of the GitHub repository xin-shu/omnisort, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xin-shu/omnisort
- Repository: https://github.com/xin-shu/omnisort

## Overview

OmniSORT is a research toolkit for online multi-object tracking in omnidirectional footage, with baseline and seam-aware tracker variants plus the OmniSmall benchmark. The principal workflow supplies frame detections to a tracker, which associates them with predicted tracks and returns identities and boxes; saved results can then be evaluated against annotations. The README documents several tracker families and datasets, while sampled source chiefly supports the SORT-family internals. Uninspected variant wiring is therefore represented conservatively.

Main entry points: [`trackers/ocsort/ocsort.py`](https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/ocsort.py) (OCSORT), [`trackers/utils/te_eval.py`](https://github.com/xin-shu/omnisort/blob/main/trackers/utils/te_eval.py) (TrackEval wrapper), [`trackers/omni_ocsort/omni_ocsort.py`](https://github.com/xin-shu/omnisort/blob/main/trackers/omni_ocsort/omni_ocsort.py) (OmniOCSORT), [`trackers/sort/sort.py`](https://github.com/xin-shu/omnisort/blob/main/trackers/sort/sort.py) (SORT)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Tracking workflow"]
  node_detections(("Frame detections"))
  node_sortfilter["SORT Kalman state<br/>[sort.py]"]
  node_ocfilter["OCSORT Kalman filter<br/>[kalmanfilter.py]"]
  node_bytetrackfilter["ByteTrack Kalman filter<br/>[kalman_filter.py]"]
  node_trackresults["Track results"]
end

subgraph group_omni["OmniSORT methods"]
  node_omnisort["OmniSORT<br/>[omni_sort.py]"]
  node_omniocsort["OmniOCSORT<br/>[omni_ocsort.py]"]
  node_assoc["Omni association<br/>[association.py]"]
end

subgraph group_baselines["Tracker baselines"]
  node_sort["SORT<br/>[sort.py]"]
  node_ocsort["OCSORT<br/>[ocsort.py]"]
  node_bytetrack["ByteTrack<br/>[byte_tracker.py]"]
  node_hybridsort["HybridSORT"]
  node_ocassoc["OCSORT association<br/>[association.py]"]
end

subgraph group_dataeval["Data and evaluation"]
  node_dataset[("OmniSmall dataset")]
  node_fetch["Dataset fetcher<br/>[fetch_data.py]"]
  node_evaluation["TrackEval wrapper<br/>[te_eval.py]"]
  node_metrics["Tracking metrics"]
  node_jrdb[("JRDB dataset")]
end

node_hub(("Hugging Face"))

node_detections -->|"updates"| node_sort
node_detections -->|"updates"| node_ocsort
node_detections -->|"updates"| node_bytetrack
node_detections -->|"updates"| node_hybridsort
node_detections -->|"updates"| node_omnisort
node_detections -->|"updates"| node_omniocsort
node_sort -->|"predicts state"| node_sortfilter
node_ocsort -->|"uses filter"| node_ocfilter
node_ocsort -->|"associates"| node_ocassoc
node_omniocsort -->|"associates"| node_assoc
node_omnisort -->|"returns tracks"| node_trackresults
node_omniocsort -->|"returns tracks"| node_trackresults
node_sort -->|"returns tracks"| node_trackresults
node_ocsort -->|"returns tracks"| node_trackresults
node_bytetrack -->|"uses filter"| node_bytetrackfilter
node_bytetrack -->|"returns tracks"| node_trackresults
node_hybridsort -->|"returns tracks"| node_trackresults
node_fetch -->|"downloads from"| node_hub
node_hub -->|"provides data"| node_dataset
node_trackresults -->|"reads results"| node_evaluation
node_dataset -->|"reads annotations"| node_evaluation
node_jrdb -.->|"evaluates against"| node_evaluation
node_evaluation -->|"writes summary"| node_metrics

click node_sort "https://github.com/xin-shu/omnisort/blob/main/trackers/sort/sort.py"
click node_ocsort "https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/ocsort.py"
click node_bytetrack "https://github.com/xin-shu/omnisort/blob/main/trackers/bytetrack/byte_tracker.py"
click node_hybridsort "https://github.com/xin-shu/omnisort/tree/main/trackers/hybridsort"
click node_omnisort "https://github.com/xin-shu/omnisort/blob/main/trackers/omni_sort/omni_sort.py"
click node_omniocsort "https://github.com/xin-shu/omnisort/blob/main/trackers/omni_ocsort/omni_ocsort.py"
click node_assoc "https://github.com/xin-shu/omnisort/blob/main/trackers/omni_ocsort/association.py"
click node_ocassoc "https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/association.py"
click node_sortfilter "https://github.com/xin-shu/omnisort/blob/main/trackers/sort/sort.py"
click node_ocfilter "https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/kalmanfilter.py"
click node_bytetrackfilter "https://github.com/xin-shu/omnisort/blob/main/trackers/bytetrack/kalman_filter.py"
click node_dataset "https://github.com/xin-shu/omnisort/tree/main/dataset"
click node_fetch "https://github.com/xin-shu/omnisort/blob/main/dataset/fetch_data.py"
click node_evaluation "https://github.com/xin-shu/omnisort/blob/main/trackers/utils/te_eval.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_detections,node_sortfilter,node_ocfilter,node_bytetrackfilter,node_trackresults toneBlue
class node_omnisort,node_omniocsort,node_assoc toneAmber
class node_sort,node_ocsort,node_bytetrack,node_hybridsort,node_ocassoc toneMint
class node_dataset,node_fetch,node_evaluation,node_metrics,node_jrdb toneRose
class node_hub toneIndigo
```

## Components

### Tracking workflow

- **Frame detections**
- [SORT Kalman state](https://github.com/xin-shu/omnisort/blob/main/trackers/sort/sort.py): `trackers/sort/sort.py`
- [OCSORT Kalman filter](https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/kalmanfilter.py): `trackers/ocsort/kalmanfilter.py`
- [ByteTrack Kalman filter](https://github.com/xin-shu/omnisort/blob/main/trackers/bytetrack/kalman_filter.py): `trackers/bytetrack/kalman_filter.py`
- **Track results**

### OmniSORT methods

- [OmniSORT](https://github.com/xin-shu/omnisort/blob/main/trackers/omni_sort/omni_sort.py): `trackers/omni_sort/omni_sort.py`
- [OmniOCSORT](https://github.com/xin-shu/omnisort/blob/main/trackers/omni_ocsort/omni_ocsort.py): `trackers/omni_ocsort/omni_ocsort.py`
- [Omni association](https://github.com/xin-shu/omnisort/blob/main/trackers/omni_ocsort/association.py): `trackers/omni_ocsort/association.py`

### Tracker baselines

- [SORT](https://github.com/xin-shu/omnisort/blob/main/trackers/sort/sort.py): `trackers/sort/sort.py`
- [OCSORT](https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/ocsort.py): `trackers/ocsort/ocsort.py`
- [ByteTrack](https://github.com/xin-shu/omnisort/blob/main/trackers/bytetrack/byte_tracker.py): `trackers/bytetrack/byte_tracker.py`
- [HybridSORT](https://github.com/xin-shu/omnisort/tree/main/trackers/hybridsort): `trackers/hybridsort`
- [OCSORT association](https://github.com/xin-shu/omnisort/blob/main/trackers/ocsort/association.py): `trackers/ocsort/association.py`

### Data and evaluation

- [OmniSmall dataset](https://github.com/xin-shu/omnisort/tree/main/dataset): `dataset`
- [Dataset fetcher](https://github.com/xin-shu/omnisort/blob/main/dataset/fetch_data.py): `dataset/fetch_data.py`
- [TrackEval wrapper](https://github.com/xin-shu/omnisort/blob/main/trackers/utils/te_eval.py): `trackers/utils/te_eval.py`
- **Tracking metrics**
- **JRDB dataset**

### Other components

- **Hugging Face**

## Connections

- Frame detections → SORT: updates
- Frame detections → OCSORT: updates
- Frame detections → ByteTrack: updates
- Frame detections → HybridSORT: updates
- Frame detections → OmniSORT: updates
- Frame detections → OmniOCSORT: updates
- SORT → SORT Kalman state: predicts state
- OCSORT → OCSORT Kalman filter: uses filter
- OCSORT → OCSORT association: associates
- OmniOCSORT → Omni association: associates
- OmniSORT → Track results: returns tracks
- OmniOCSORT → Track results: returns tracks
- SORT → Track results: returns tracks
- OCSORT → Track results: returns tracks
- ByteTrack → ByteTrack Kalman filter: uses filter
- ByteTrack → Track results: returns tracks
- HybridSORT → Track results: returns tracks
- Dataset fetcher → Hugging Face: downloads from
- Hugging Face → OmniSmall dataset: provides data
- Track results → TrackEval wrapper: reads results
- OmniSmall dataset → TrackEval wrapper: reads annotations
- JRDB dataset → TrackEval wrapper: evaluates against
- TrackEval wrapper → Tracking metrics: writes summary
