Pilot pages
Per-pilot analytics with stat cards that jump to the heat that set them, a lap chart, and lap and race tables. Rendered on the laptop, so it works offline.
Free & open source · for FPVTrackside
A live dashboard on every phone. Race calls in one voice. AI commentary for your stream. Lap times in pilots' goggles. All from the timing laptop — no internet, no account.
Meet dd-pits
dd-pits sits beside FPVTrackside on the timing laptop and turns its timing data into everything a race director wants on the day. Configure it all in a browser. Store it in one file.
How it works
How to use dd-pits
Seven steps, all in the browser. Do the first two and you already have a live dashboard; the rest are optional.
Grab dd-pits from Releases and run it on the laptop next to FPVTrackside. The setup guide opens in your browser on first run.
./dd-pits
Open your event in FPVTrackside and the dashboard lights up. Share the laptop's address with pilots over the venue wifi.
http://<laptop>:8088
Open the TV view on a screen at the pits, and add the overlay to OBS as a Browser Source.
/live · /overlay
Pick whether dd-pits or FPVTrackside makes the race calls. dd-pits sets FPVTrackside's speech to match.
/setup/calls
Add each pilot's bind phrase, connect an ELRS netpack or USB backpack, then lay out the goggle screen.
/setup/pilots · /setup/backpack · /setup/osd
Pick a writer and a voice. Hear it on the laptop's speakers, or add the audio to OBS as a Media Source.
/setup/booth · /booth.wav
Paste the stream's YouTube link and place one heat. Every heat gets a Watch link, and you get chapters to paste into the description.
/setup/video
Dashboard & displays
Anyone on the venue wifi opens the dashboard and watches the current heat, who's next, standings, best consecutive laps and time trials — updating live, no refreshing.
Per-pilot analytics with stat cards that jump to the heat that set them, a lap chart, and lap and race tables. Rendered on the laptop, so it works offline.
Every heat with its lap times, at /dronedash/races.
The current race full-screen at /live, for a screen at the pits.
Add /overlay as a Browser Source and the race is on stream.
Shown on the board, but they don't count towards standings.
Add ?lite=1 to any page for an old TV or tablet that struggles.
Every page updates the moment FPVTrackside does — nobody presses refresh.
On stream
Add /overlay to OBS as a Browser Source. It follows every heat on its own: the lineup on the grid, live positions and lap counts with a running clock, all the way to the flag. It stays invisible between meetings, so nothing odd goes out on air.
In OBS: Sources → + → Browser → URL http://<laptop>:8088/overlay, width 1920, height 1080. The background is transparent, so it sits over any scene.
Race calls
Laps, holeshots, results and "next up" — spoken by dd-pits instead of FPVTrackside's own speech, in your club's own wording.
Calls are read from FPVTrackside's own Sounds.xml, so the phrasing and on/off switches you set there carry over. dd-pits finds FPVTrackside's files itself, and an audit flags settings that disagree.
dd-pits sets FPVTrackside's speech volume to match, so you never hear both — or neither. No voice set up? FPVTrackside keeps speaking and dd-pits stays out of the audio.
dd-pits listens for FPVTrackside's live events as well as polling it. Voice packs of pre-generated clips make common calls play instantly.
Hurry Up, Announce Race and the other calls FPVTrackside binds to keyboard shortcuts — trigger them from the laptop or any phone at the field.
Tell the voice how to say a tricky callsign without changing how it's spelled anywhere else.
When the operator moves to the next race, anything still waiting to be said about the last one is dropped.
Commentary booth
Play-by-play and colour written from the live timing data. Commentary and race calls share one audio bus, so a lap call always cuts in instead of waiting behind colour.
Mix and match. /setup/models checks the machine and installs the local models for you.
Clone a voice from a recording you upload, or record one straight in the browser. Qwen can also design a voice from a description.
Personality, humour, energy, language and accent. Solo or a two-person duo — and you choose which phases and moments it talks about.
Play it through the laptop's speakers, or add /booth.wav to OBS. Connect the OBS websocket and dd-pits delays the video automatically to stay in sync.
The /booth page shows the session's AI spend and the recent on-air lines.
A Windows race PC can borrow a Mac's GPU over the LAN with -model-host and -model-url.
Run the writer and the voice locally on a Mac and the whole booth works with no network at all.
Goggles · ELRS backpack
Each pilot needs only a bind phrase — dd-pits derives the goggle ID from it, exactly like the ExpressLRS firmware does.
/setup/osd, with custom screens per pilot
Works with ELRS Netpack
ELRS Netpack is firmware for Ethernet ESP32 boards that acts as the ELRS timer backpack over the network. dd-pits talks to it over TCP — and it tells you whether each message actually reached the goggles.
elrs-netpack.local:8080http://elrs-netpack.local/
ELRS Netpack was originally created by i-am-grub, and forked and extended by bob9. Not affiliated with the ExpressLRS project.
After the race
Paste a YouTube stream address and place one heat on the timeline. Every heat gets a ▶ Watch link, and dd-pits builds a chapter list to paste into the video description.
Streamed with nobody on the mic? Generate commentary for finished heats, and the Watch player plays it over the muted video — in sync as you scrub.
Running it
Everything runs on the venue laptop. Settings live in one JSON file beside the app — copy it to another laptop and the whole setup moves with it.
Everything is configured at /setup, with a guided first run and help at /setup/help.
The log in the browser at /setup/debug, with API keys removed, plus a downloadable report to send when something goes wrong.
Meeting, race, round, leaderboard, pilot and channel data at /docs — with an OpenAPI spec and a live event stream for your own displays.
What you need
Free. Open source. Built between race days.
dd-pits is free for every club. If it makes your race days run smoother, a coffee keeps new features coming.
Buy me a coffeeNo. FPVTrackside keeps doing the timing. dd-pits reads it on the same laptop and does everything else: the dashboard, overlays, race calls, commentary and goggles.
No. The dashboard, overlays, race calls, goggle OSD and API all run on the laptop. Only the cloud AI options (Gemini or Qwen) and YouTube Watch links use a connection — and the commentary booth can run fully locally on Apple Silicon.
They open the laptop's address on their phones over the venue wifi. Settings pages only accept changes from the laptop itself, so a phone in the pits can't change anyone's goggle channel.
Nothing. dd-pits is MIT licensed. If you use cloud AI for commentary, you pay your provider for what you use — and the /booth page shows the running spend.
Only for goggle features. A netpack on the network is fastest and confirms delivery; a USB backpack plugged into the laptop works too.
FPVTrackside keeps announcing exactly as it always has, and dd-pits stays out of the audio. You can never end up with silence by accident.