dd-pitssetup
Read-only demo. A real dd-pits fed by a simulated meeting. Look around: nothing here can be changed. Get dd-pits to run it at your venue.

What this is

dd-pits runs on the timing laptop, reads FPVTrackside, and does the rest itself: the dashboard pilots watch, the OBS overlay, the race calls, live commentary, and the lap times in pilots' goggles.

None of it needs the internet or an account. Everything below is configured on this machine and stored in one file beside the agent.

Getting started — 5 minutes

1. Turn on FPVTrackside's web server: it is off by default, and it is how dd-pits reads the timing. In FPVTrackside open Menu → Application Settings, and under Web tick Auto start HTTP Server. Restart FPVTrackside and open your event. http://localhost:8080 should now show FPVTrackside's page. Run dd-pits on the same laptop.

2. Check the dashboard. Open the dashboard. If you can see your event and pilots, dd-pits is talking to FPVTrackside and the hard part is done. Pilots can open the same address on their phones over the venue wifi.

3. Decide who speaks the lap times — Race calls. Leave it on FPVTrackside and it announces laps exactly as it always has; you need nothing else. Choose dd-pits for one voice across calls and commentary, and mute FPVTrackside's own audio so you do not hear both.

4. Add your pilots' goggles (optional) — Goggle pilots. One bind phrase per pilot is all it takes. See "Goggles" below.

5. Turn on commentary (optional) — Commentary. See "Commentary" below; it needs two things, not one.

6. Faster lap calls (optional): in FPVTrackside's Menu → Application Settings, under Gate / LED POST notifications, set Notifier enabled / mode to LegacyMode (or ExtensionMode if you have it) and NotificationURL to http://127.0.0.1:9899/fpvtrackside/events, then restart FPVTrackside. Each lap then reaches dd-pits the moment it happens instead of on the next poll.

Settings take effect when you restart dd-pits, except pilots and OSD screens, which apply on the next heat.

Race day

All of these work with no internet. Give pilots and spectators the first one.

DashboardCurrent heat, standings, best-consecutive, time trials
Race historyEvery heat with lap times
Live viewFull-screen current race, for a TV at the pits
OBS overlayAdd as a Browser Source in OBS
/booth.wavCommentary audio — add as a Media Source in OBS
Manual calls"Hurry up" and other operator calls
Goggle controlChange a pilot's video channel
JSON APIFor building your own displays

Goggles — lap times, DVR names, clock

What you need: an ELRS backpack this laptop can reach, and each pilot's bind phrase.

The backpack — Backpack. Choose one:

The pilots — Goggle pilots. For each pilot, enter their callsign exactly as it appears in FPVTrackside and the bind phrase they typed into their goggles. That is all — the goggle ID is worked out from the phrase, the same way the ExpressLRS firmware does it.

Once a pilot is added they get their lap times on screen, their DVR files named after the heat, and their goggle clock set correctly. The OSD screen page controls what they see, and you can give one pilot their own screen if they want it different.

If a pilot sees nothing: check the callsign matches FPVTrackside exactly, check the backpack says "connected" on the Backpack page, and check they have not been switched off on the pilots page.

Commentary — it needs TWO things

Something to write the words, and a voice to say them. Setting only one is the most common mistake; the booth simply will not start.

The writer — either a model on this machine (no internet, needs Apple Silicon and a few GB of memory) or a Google Gemini key (works on any hardware, needs a connection).

The voice — either the local voice (no internet, wants the graphics chip) or Qwen3-TTS (any hardware, needs a connection, a dropout means silence rather than a bad call).

Both are on the Commentary page. Mix and match freely — a common setup is a local writer with a Qwen voice, which keeps the words private and the graphics chip free for the race calls.

Sound

Commentary and race calls share one audio bus, so a lap time always interrupts colour rather than queueing behind it.

Two ways to hear it: through this laptop's speakers (tick it on the Commentary page), or into OBS by adding http://127.0.0.1:9899/booth.wav as a Media Source — untick "Local File" and paste that address.

Bluetooth headphones add about half a second of delay of their own, whatever is configured here. For a stream or a PA, use a wired output.

If you have no voice at all

Set Race calls to FPVTrackside. It announces laps exactly as it always has, and dd-pits stays out of the audio — you still get the dashboard, the overlays, the goggle OSD and the API. This is also what happens automatically when nothing is configured, so you can never end up with silence by accident.

Your stream — Watch links and chapters

If you streamed the day to YouTube, the Video page turns that stream into a ▶ Watch link on every heat, and a chapter list to paste into the video’s description.

You only have to place one heat. Find any heat in the video, note the time on the scrubber, and enter it. Every other heat is worked out from there, because the timing data already knows when each one started — so you never scrub through the whole video hunting for them.

  1. Paste the stream’s YouTube address.
  2. Pick a heat you can find in the video and type its time (1:12:30).
  3. Press Anchor. Every heat now has a link.

Copy the chapter list into the description and YouTube shows clickable chapters. The 00:00:00 Stream Start line at the top is required — without a chapter at zero YouTube ignores the whole list, which is the usual reason a pasted list appears to do nothing.

A heat that ran before the stream started gets no link, rather than a link to the wrong moment.

Commentary over the video

Once a heat has finished you can have the booth write and voice a call for it after the fact, and the Watch player will play that over the muted video. This is for a day you streamed with nobody on the microphone.

It needs commentary set up (see above) — the same writer and voice the live booth uses. Scrubbing the video scrubs the commentary with it, so it stays lined up.

Broadcasts usually open with a bit of pre-race footage, so there is a delay setting that holds the commentary back that many seconds into the video. Eight is a reasonable starting point; press a heat’s ▶ to hear it against the real footage and adjust.

A heat with no recorded lap times is refused. There is nothing to describe, and a commentator handed nothing does not say so — it makes a race up, which sounds exactly as convincing as a real one.

☕ Support dd-pits

dd-pits is free and open source, built by a race director for race directors. If it saves your club time on race day, you can say thanks and help keep it going at buymeacoffee.com/bobnine.

Who can change these settings

Only this laptop. The dashboard is deliberately open to the whole venue network so pilots can watch it — which is exactly why changing someone's goggle channel from a phone in the pits is refused.

To configure from a phone anyway, start with -setup-pin 1234 and open http://127.0.0.1:9899/setup?pin=1234.

Your settings file

One JSON file beside the agent. Back it up with your race-day files — it is plain text, and copying it to another laptop moves the whole setup with it.

Everything here can also be set with command-line flags, and a flag always wins over these pages. Run dd-pits -h to see them.