dd-pits is free for every club. If it makes your race day run smoother, buy bob9 a coffee

Race directors

Run the day.

Everything that runs the day from the desk: calls in one voice, an AI commentator, stream graphics, brackets and marshalling, all working from the same timing.

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.

On stream · 22 overlays

Broadcast graphics.
One click into OBS.

Every overlay follows the meeting on its own and sits transparently over any scene. Open the gallery in dd-pits, customise any of them (titles, colours, which heat, how many pilots), watch the preview update, and press Add to OBS. It lands in the scene you're on. Or copy the URL into a Browser source.

Live timing

The dd-pits Scorebug overlay over a stream frame
Scorebug TV-style badge with the time of day; the heat strip slides in when a heat is cued, stays up while it races, and shows the result.
The dd-pits Top bar overlay over a stream frame
Top bar Racing now / on deck / just raced, the race timer, the meeting and your club across the top.
The dd-pits Corner overlay over a stream frame
Corner Logo, time of day and the heat, glowing red while it races.
The dd-pits Race grid overlay over a stream frame
Race grid Transparent tiles over your FPV feeds, each with the pilot, position and last four laps.
The dd-pits Pilot cam tag overlay over a stream frame
Pilot cam tag A lower third for one pilot's feed: position, channel, lap, last, best and total.
The dd-pits Racing now strip overlay over a stream frame
Racing now strip The pilots in the air, ringed in their channel colours.
The dd-pits Lap chart overlay over a stream frame
Lap chart Every lap of the heat, the fastest highlighted.
The dd-pits Fastest lap overlay over a stream frame
Fastest lap The quickest lap of the heat and who set it.
The dd-pits Race panel overlay over a stream frame
Race panel Positions, laps, totals and the clock in a compact panel.
The dd-pits Lower third overlay over a stream frame
Lower third The lineup across the bottom, F1 style.

Between heats

The dd-pits Up next strip overlay over a stream frame
Up next strip The next heat's pilots and channels, bottom left.
The dd-pits Lineup overlay over a stream frame
Lineup A full-screen walk-on with each pilot's rank and best times.
The dd-pits Lineup — racing overlay over a stream frame
Lineup — racing The same scene once the heat runs: positions, totals and laps.
The dd-pits Up Now overlay over a stream frame
Up Now Pilot cards walk on with rank, best lap and best consecutive, then step off. Loops.
The dd-pits Up Now banner overlay over a stream frame
Up Now banner The Up Now cards as a lower-third banner.

Standings

The dd-pits Spotlight overlay over a stream frame
Spotlight One pilot's profile or two head to head — push it to stream from the gallery.
The dd-pits Leaderboard overlay over a stream frame
Leaderboard The meeting standings with ▲▼ movement since the last heat.
The dd-pits Laps rail overlay over a stream frame
Laps rail One time per pilot, 🔥 for whoever just improved.
The dd-pits Standings overlay over a stream frame
Standings The leader as the hero, the rest of the field below. Live, then final.
The dd-pits Podium overlay over a stream frame
Podium The top four on podium steps, the winner crowned.
The dd-pits Results card overlay over a stream frame
Results card A results scene from the URL alone — type the finishing order.
The dd-pits Notice overlay over a stream frame
Notice Your own message: a weather hold, a sponsor, the next round.

Manually in OBS: Sources → + → Browser → paste the overlay URL, width 1920, height 1080.

A glowing tournament bracket over a night-time drone race, converging on a trophy

New Brackets

Finals that
run themselves.

Seed the pilots, pick a format, and dd-pits draws the whole bracket. Every race lands on your timer — RotorHazard or FPVTrackside — the moment its line-up is known, and every result moves the bracket on by itself. You just fly.

A double-elimination bracket in dd-pits: winners and losers rounds with results, races ready to send, and the chase-the-ace final waiting
The same bracket on a pilot's phone
1

Seed from qualifying

Pilots come in ranked by best consecutive laps. Drag to adjust, add late entries, choose the format.

2

Races go to your timer

Each race becomes a RotorHazard heat or an FPVTrackside race, with the pilots seated, as soon as its line-up is known.

3

Results move it on

Finish a race and the bracket advances: winners up, losers down, finalists seated, the champion crowned.

Every format a race director asks for.

Double elimination

Winners and losers brackets; out after two losses. Grand final with reset, or a chase-the-ace series.

  • Winners Round 2 — Race 1
  • Losers Round 3
  • Chase the Ace — Race 2

MultiGP top 4

The qualifier sheet, race for race. Ends in a final that ranks the top four who go through.

  • 16 pilots, 4-up, top 2 advance
  • Snake or standard seed sheet

Bracket progression

A qualifier per bracket. The lowest bracket flies first and its top finishers move up into the next.

  • Bracket C → B → A
  • Chase the ace in A

Ladder

The lowest seeds race first; the top finishers climb into each next race against higher seeds.

  • Top seed waits for the final

Points brackets

Brackets by seed, several rounds each, ranked on a points table you set. Drop-worst optional.

  • 25 · 18 · 15 · 12 …
  • High or low points win

Same draw everywhere

The engine is the same one behind the Stages in bob9's FPVTrackside and the AUFPV platform, so a bracket comes out identical in all three.

RotorHazard 4.0 or later

Install the plugin

  1. Upload the zip at Settings → Plugins (4.3+), or copy dd_pits into src/server/plugins.
  2. Restart RotorHazard. dd-pits appears in its menu.
  3. Open dd-pits → Brackets → Create bracket.
Download the RotorHazard plugin

Back FPVTrackside

Run it beside the timer

  1. Download dd-pits for your laptop and run it next to the FPVTrackside alpha (brackets need its REST API).
  2. Open Brackets → Create bracket at localhost:8088.
  3. Every race goes on FPVTrackside round by round, with pilots and channels set. dd-pits starts them and reads the results back.
  4. Need to change something by hand? Race director → Meeting editor edits rounds, races, line-ups and pilots in FPVTrackside.
Download dd-pits

Marshalling · RotorHazard timers

Every lap.
Exactly right.

dd-pits reads each pilot's signal from your RotorHazard timer, finds the enter and exit lines for you, and points at the laps that look wrong, with the fix one tap away. Corrections go back through RotorHazard's own marshal save, so results, brackets and FPVTrackside all follow.

A pilot's signal trace in dd-pits' Marshal page: the enter and exit lines, counted passes, a missed weak pass marked at 0:13.3 with an Add lap here button, and auto-detect's suggested lines with medium confidence

Lines found for you

Auto-detect measures the background and the passes and picks the enter and exit lines that give steady, believable laps, then tells you how sure it is and why.

Problems pointed out

Double counts, stray signals, missed passes (with the weak peak where it probably was), passes only just over the line, and too few laps for the race.

Bleed spotted

Every pilot on one time axis. A weak bump that lines up with another pilot's strong pass is called out as their signal bleeding across, not a lap.

Drag, tap, done

Drag the lines and the laps recalculate as you go, by RotorHazard's own rule. Tap a pass to drop it, tap the trace to add one. From the laptop or a phone at the field.

Saved the RotorHazard way

Corrections save through RotorHazard's own marshal save, and Use these lines from now on sets the node for the races to come.

FPVTrackside too

When FPVTrackside times with a RotorHazard, dd-pits finds the timer in FPVTrackside's settings and marshals from its signal. Corrections land back in FPVTrackside.

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

See it all working together.

Watch it in action Setup guide Download dd-pits

Your download has started

Join the dd-pits Discord

Get help setting up, hear about new releases first, and swap race-day tips with other race directors and pilots.

Join the Discord