Skip to content

USCRacing/overlay

Repository files navigation

Telemetry Overlay Application

A PyQt6-based desktop application for parsing MoTeC .ld telemetry files and overlaying real-time telemetry data onto video recordings.

Features

  • Parse MoTeC LD telemetry files with GPS support
  • Visualize telemetry data with configurable overlays:
    • RPM Gauge: Semicircular tachometer with color-coded zones (blue/green/yellow/red)
    • G-G Diagram: Lateral and longitudinal G-force scatter plot with trail history
    • Bar Overlay: Generic telemetry bar for throttle/brake/any scalar channel
    • Text Overlay: Generic telemetry text readout with format options
    • GPS Track: Track map showing current position ± 10 seconds
  • Video player with draggable overlays
  • Dual-handle timeline range selection for export in/out
  • Plot-based sync workflow using fixed-width telemetry selection window
  • Drag-and-drop overlay positioning
  • Offline FFmpeg export with burned-in overlays (MP4/H.264 + AAC)
  • Export progress, cancel, overwrite warning, and done state in export dialog

Installation

uv sync

Usage

uv run main.py

Command line options:

uv run main.py --ld-file path/to/data.ld --video-file path/to/video.mp4
uv run main.py --config path/to/config.json

Quick Workflow

  1. Load telemetry with LD File....
  2. Load video with Video File....
  3. Click Parse to populate channels.
  4. Select channels to display in telemetry plots.
  5. Set video in/out segment using timeline range handles.
  6. Move the plot selection window to align telemetry with video (this sets sync offset).
  7. Click Export and choose output path/quality.

Sync Controls

  • Drag telemetry selection window to change sync offset.
  • Arrow keys on plot window: nudge by 1.0s.
  • Shift + Arrow: nudge by 0.1s.
  • Hold Arrow for ~3s: nudge by 10.0s steps.

Project Structure

├── main.py              # Entry point
├── config.py            # Application configuration constants
├── parsers/
│   ├── ldparser.py      # MoTeC LD file parser
│   └── gps_parser.py    # GPS coordinate utilities
├── models/
│   ├── telemetry_data.py # Parsed telemetry container
│   ├── channel.py        # Single channel data/interpolation
│   └── overlay_instance.py # Overlay config/state model
├── widgets/
│   ├── rpm_gauge.py     # Tachometer widget
│   ├── gg_diagram.py    # G-force diagram
│   ├── bar_overlay.py   # Generic telemetry bar overlay
│   ├── text_overlay.py  # Generic telemetry text overlay
│   ├── gps_track.py     # GPS track map
│   ├── channel_plot.py  # Time-series plot + fixed selection region
│   ├── multi_channel_plot.py # Linked stack of channel plots
│   ├── range_slider.py  # Timeline with range handles + playhead
│   └── overlay_widget.py # Shared overlay behavior
├── views/
│   ├── main_window.py   # Main application window
│   ├── video_player.py  # QMediaPlayer + timeline + overlay scene
│   ├── settings_panel.py # Overlay settings UI
│   └── export_dialog.py # Export options/progress dialog
├── controllers/
│   ├── data_controller.py
│   ├── playback_controller.py
│   └── export_renderer.py # Offline FFmpeg export renderer
└── utils/
    ├── math_utils.py
    └── video_exporter.py

Requirements

  • Python 3.10+
  • PyQt6
  • pyqtgraph
  • numpy
  • FFmpeg (ffmpeg and ffprobe available in PATH)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages