Omatrack is a Qt 6 workstation for drivers and engineers who need one analysis workflow across heterogeneous logger formats. It normalizes every source into the same 50 Hz lap model, so traces, delta, cursor readouts, corner analysis, and synchronized onboard video use one analytical truth.
Omatrack is under active development. Linux is the primary desktop target; Linux, macOS, and Windows are built and tested in CI.
Shared cursor readouts, proportional lap strips, range selection, delta, and manual damper alignment all use the same normalized lap model.
Corner metrics and trace excerpts keep the primary and reference laps aligned through braking, turn-in, apex, and throttle pickup.
- Open Pi/Cosworth
.pds, MoTeC.ld, Racelogic.vbo, and AiMaimdtelemetry embedded in.mp4. - Resolve
.ldxfiles to their companion.ld; play ordinary MP4, MOV, MKV, AVI, M4V, and WebM video without treating it as telemetry. - Group a library as Track → Date → Session → Laps, with lazy parsing and fastest-lap selection.
- Compare primary and reference laps through a cached track-station map that remains useful when GPS is sparse or absent.
- Overlay standard and raw channels, share a cursor, pan, zoom, select ranges, pin lanes, and manually align specialist signals.
- Derive distance-aligned cumulative delta and corner metrics from the normalized lap arrays.
- Consume Track Atlas corner ranges through an independent offline cache, spatially map them from the layout centerline when lap GPS is usable, and retain user-owned YAML overrides.
- Synchronize embedded onboard video through libmpv's OpenGL Render API.
- Follow the active Omarchy palette on Linux, with a Qt system-palette fallback elsewhere.
- Inspect parsing, channel mapping, lap detection, and unification through
omatrack-cli.
flowchart TD
F["PDS / LD / VBO / MP4"] --> R["motorsport-telemetry-rs"]
R --> B["Panic-safe bulk C ABI"]
B --> C["Qt-free C++ normalization core"]
C --> CLI["omatrack-cli"]
C --> S["TelemetryStore"]
A["Track Atlas JSONL"] --> S
S --> T["C++ trace renderer"]
S --> V["libmpv video renderer"]
S --> Q["Qt Quick Material UI"]
Vendor decoding stays in Rust. Cross-format racing analysis stays in the Qt-free C++ core. Session state and caching live in TelemetryStore; QML owns layout rather than telemetry loops. See AGENTS.md for the full architecture and engineering contracts.
- CMake 3.21+
- Ninja
- C++17 compiler
- Qt 6.5+ with Core, Gui, Quick, Quick Controls 2, QML, and Network
- libmpv development files
- libyaml development files
- Rust/Cargo 1.84+
pkg-config
sudo pacman -S --needed base-devel cmake ninja pkgconf \
qt6-base qt6-declarative mpv libyaml rustInstall Qt 6.5 or newer from your distribution or the Qt installer, then install the native dependencies. On Ubuntu:
sudo apt install build-essential cmake ninja-build pkg-config libmpv-dev libyaml-devUse the MSYS2 UCRT64 shell:
pacman -S --needed git \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-libyaml \
mingw-w64-ucrt-x86_64-mpv \
mingw-w64-ucrt-x86_64-ninja \
mingw-w64-ucrt-x86_64-pkgconf \
mingw-w64-ucrt-x86_64-qt6-base \
mingw-w64-ucrt-x86_64-qt6-declarative \
mingw-w64-ucrt-x86_64-rustInstall the native dependencies with Homebrew, then install Qt 6.5 or newer from Qt or Homebrew:
brew install cmake ninja pkg-config mpv libyaml rustgit clone https://github.com/tobi/omatrack.git
cd omatrack
cmake --preset release
cmake --build --preset release
./build/omatrack /path/to/telemetry-directoryOn macOS, run ./build/Omatrack.app/Contents/MacOS/Omatrack. On Windows, run
./build/omatrack.exe from the UCRT64 shell.
Open a single supported file with the file picker or pass its containing directory. Configuration is stored in $XDG_CONFIG_HOME/omatrack/omatrack.yml on Linux, falling back to ~/.config/omatrack/omatrack.yml.
An existing pre-rename racecraft.yml, legacy QSettings preferences, and Track Atlas cache are imported once; legacy files remain untouched as a backup.
./build/omatrack-cli parse /path/to/copied-session.pds
./build/omatrack-cli unify /path/to/copied-session.pds \
--output /tmp/session.unified.csvunify refuses to overwrite an existing file. Its CSV includes GPS latitude and longitude when available; treat exported files as sensitive location data. Omatrack never rewrites source telemetry or video.
cmake --install build --prefix "$HOME/.local"The install target provides omatrack, omatrack-cli, platform deployment
metadata, and license notices. Tagged releases publish a Linux AppImage, a
macOS disk image, and a Windows zip from GitHub Actions. The macOS build is
ad-hoc signed but not Apple-notarized.
Telemetry and video stay local. Omatrack does not upload session data. Track Atlas connectivity is independent of telemetry parsing: when its metadata or selected-layout geometry cache is missing or older than 24 hours, Omatrack requests the public data from raw.githubusercontent.com; manual refresh performs the same metadata request. Fresh caches are used without a startup request. Offline starts retain cached corner geometry; without it, GPS laps do not silently substitute distance-based corner locations.
libmpv can open URLs through its API, but Omatrack's normal file selectors and session library provide local paths.
ctest --preset release
cmake --build --preset release --target lintThe test suite covers the Rust integration bridge, C++ normalization and comparison behavior, formatting, Rust lints, and QML invariants. Parser-crate tests live upstream in motorsport-telemetry-rs. CI runs the release build and tests on Linux, macOS, and Windows.
Update all upstream parser crates to the same commit and regenerate the lockfile with:
./scripts/update-motorsport-telemetry.sh \
--smoke-file /path/to/copied-session.mp4The optional smoke file is parsed only after the Rust, build, lint, and unit checks pass. Supply a branch, tag, or full commit as the final argument to pin something other than upstream HEAD.
- Session parsing is lazy, but opening a source currently decodes and retains whole channel arrays; this is not a streaming reader.
- Track Atlas corner ranges and GPS-based centerline station mapping are wired through the app. First-class corner complexes and full geometry rendering remain planned work.
- Embedded AiM telemetry time is translated to MP4 presentation time through the upstream edit-list offset exposed by Omatrack's C bridge.
- Separate-file persisted video associations and multi-video alignment are not implemented.
- The GUI is file-based post-session analysis today.
Issues and focused pull requests are welcome. Read CONTRIBUTING.md before changing parser, normalization, or rendering behavior.
Omatrack is released under the MIT License. See THIRD_PARTY_NOTICES.md for bundled font/parser licenses, system dependency terms, and Track Atlas data attribution.

