A racing drone flying through glowing neon race gates at night

Free & open source · for FPVTrackside

Race day,
run from one laptop.

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.

0internet needed
1laptop runs it all
100mslap freshness while racing
$0MIT licensed, forever

Meet dd-pits

Everything after the timer.

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.

The dd-pits live dashboard showing the current heat, positions, holeshots, lap times and totals

How it works

One source of truth.
Every screen, speaker and goggle.

How dd-pits connects FPVTrackside feeds timing data to dd-pits on the same laptop. dd-pits serves phones and TVs over the venue wifi, sends overlays and audio to OBS, plays calls through the speakers, and reaches pilots' goggles through an ELRS netpack or USB backpack. FPVTrackside timing & laps dd-pits same laptop · offline Phones & TVs OBS stream Speakers Goggles · ELRS

How to use dd-pits

From download
to race day in minutes.

Seven steps, all in the browser. Do the first two and you already have a live dashboard; the rest are optional.

  1. 1

    Download and run

    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
    localhost:8088/setup
    The dd-pits setup guide in a browser
  2. 2

    Open your event

    Open your event in FPVTrackside and the dashboard lights up. Share the laptop's address with pilots over the venue wifi.

    http://<laptop>:8088
    <laptop>:8088
    The live dashboard on a pilot's phone
  3. 3

    Put it on screens

    Open the TV view on a screen at the pits, and add the overlay to OBS as a Browser Source.

    /live · /overlay
    <laptop>:8088/live
    The full-screen live race view
  4. 4

    Choose who speaks

    Pick whether dd-pits or FPVTrackside makes the race calls. dd-pits sets FPVTrackside's speech to match.

    /setup/calls
    localhost:8088/setup/calls
    The race calls settings page
  5. 5

    Wire up the goggles

    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
    localhost:8088/setup/pilots
    The goggle pilots settings page
  6. 6

    Turn on commentary

    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
    localhost:8088/setup/booth
    The commentary settings page
  7. 7

    After the race

    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
    localhost:8088/setup/video
    dd-pits race views ready for the stream

Dashboard & displays

Every pilot.
Every phone.

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.

A pilot holding a phone showing a glowing live leaderboard at the race field
The dd-pits dashboard on a phone

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.

A dd-pits pilot analytics page

Race history

Every heat with its lap times, at /dronedash/races.

TV view

The current race full-screen at /live, for a screen at the pits.

OBS overlay

Add /overlay as a Browser Source and the race is on stream.

Practice rounds

Shown on the board, but they don't count towards standings.

Lite mode

Add ?lite=1 to any page for an old TV or tablet that struggles.

Always live

Every page updates the moment FPVTrackside does — nobody presses refresh.

On stream

Broadcast graphics.
Zero effort.

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.

The dd-pits OBS overlay showing the lineup for the next heat over a stream frame
On the grid The next heat's lineup, in channel colours.
The dd-pits OBS overlay mid-race with live positions, laps and race clock
Racing Live positions, laps and the race clock.
The dd-pits OBS overlay on the final lap
Final lap Totals as each pilot crosses the line.

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

One voice.
Right on the lap.

Laps, holeshots, results and "next up" — spoken by dd-pits instead of FPVTrackside's own speech, in your club's own wording.

A race director with a tablet at the start line as four drones wait on launch pads

Your club's 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.

One switch decides who speaks

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.

Fast calls

dd-pits listens for FPVTrackside's live events as well as polling it. Voice packs of pre-generated clips make common calls play instantly.

Race director controls

Hurry Up, Announce Race and the other calls FPVTrackside binds to keyboard shortcuts — trigger them from the laptop or any phone at the field.

Pronunciations

Tell the voice how to say a tricky callsign without changing how it's spelled anywhere else.

Clean hand-offs

When the operator moves to the next race, anything still waiting to be said about the last one is dropped.

A broadcast microphone in a commentary booth overlooking a floodlit drone track

Commentary booth

An AI commentator
that never misses a lap.

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.

The writer

  • Local model · Apple Silicon (MLX)
  • Google Gemini
  • Qwen

The voice

  • Local cloned voice · Qwen3-TTS on MLX
  • Qwen3-TTS over the network

Mix and match. /setup/models checks the machine and installs the local models for you.

Your own commentator

Clone a voice from a recording you upload, or record one straight in the browser. Qwen can also design a voice from a description.

Style

Personality, humour, energy, language and accent. Solo or a two-person duo — and you choose which phases and moments it talks about.

Hear it anywhere

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.

Cost tracking

The /booth page shows the session's AI spend and the recent on-air lines.

Model host mode

A Windows race PC can borrow a Mac's GPU over the LAN with -model-host and -model-url.

Offline when you want it

Run the writer and the voice locally on a Mac and the whole booth works with no network at all.

Goggles · ELRS backpack

Lap times,
right in their eyes.

Each pilot needs only a bind phrase — dd-pits derives the goggle ID from it, exactly like the ExpressLRS firmware does.

  • Lap times and race info on the goggle OSD
  • DVR recordings named after the heat
  • Goggle clock set correctly
  • OSD layout at /setup/osd, with custom screens per pilot
  • Change a pilot's video channel from the desk
  • Send a message to some or all pilots
  • Netpack on wifi, USB backpack, or netpack with USB fallback
FPV goggles glowing with an on-screen display beside a small ELRS backpack module

Works with ELRS Netpack

One Ethernet cable.
Every goggle on the field.

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.

An ESP32 Ethernet board running ELRS Netpack firmware in a black case with a cable plugged in
BoardsWaveshare ESP32-S3-ETH · Olimex ESP32-POE-ISO
Power over EthernetOn a PoE board, one cable powers and connects it
Timer backpack over TCPdd-pits connects to elrs-netpack.local:8080
Delivery confirmationKnow which goggles got the message
Over-the-air updatesDrop new firmware on http://elrs-netpack.local/
Goggle test consoleOSD message, channel change, clock and DVR name — built in
elrs-netpack.local
The ELRS Netpack firmware console showing version, build date and a firmware drop zone
Firmware console — over-the-air updates
elrs-netpack.local/test
The ELRS Netpack goggle test console with OSD, channel change, clock and DVR controls
Goggle test console

ELRS Netpack was originally created by i-am-grub, and forked and extended by bob9. Not affiliated with the ExpressLRS project.

After the race

Your stream,
chaptered in seconds.

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.

A livestream production setup at the trackside with a monitor showing a race broadcast

Running it

No internet.
No account. No drama.

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.

A laptop on a picnic table in a remote field at twilight

Browser setup

Everything is configured at /setup, with a guided first run and help at /setup/help.

Debug page

The log in the browser at /setup/debug, with API keys removed, plus a downloadable report to send when something goes wrong.

JSON API

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

Probably what you already have.

A laptopOne app for macOS, Windows and Linux, beside FPVTrackside.
Local AIApple Silicon for on-device voice and commentary.
Cloud AIOr a Gemini or Qwen API key on any hardware.
ELRS backpackOptional — a netpack or USB backpack for goggle OSD.
FPV pilots in goggles sitting together at dusk under string lights

Free. Open source. Built between race days.

Built by a race director,
for race directors.

dd-pits is free for every club. If it makes your race days run smoother, a coffee keeps new features coming.

Buy me a coffee

Questions.

Does it replace FPVTrackside?

No. 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.

Does it need the internet?

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.

How do pilots see the dashboard?

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.

What does it cost?

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.

Do I need an ELRS backpack?

Only for goggle features. A netpack on the network is fastest and confirms delivery; a USB backpack plugged into the laptop works too.

What if no voice is set up?

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.

Your next race day
starts here.