Gamified dart practice on your own autodarts rig โ auto-scoring, many game modes,
central leaderboards + Elo, stats & heatmaps, and at the same time training a fully open dart detection engine.
๐ฎ all game modes & rules โ X01, Cricket, Clock, World, Bermuda, and every drill at a glance.
Runs on (the installer auto-detects yours โ nothing to pick):
autodarts service while it runs.
It's a separate practice mode, not a replacement for autodarts โ stop the trainer and autodarts comes back.You're lending your board to a research project, not signing up for surveillance. Straight
answer on what leaves your Pi. Uploading is on by default (your rig enrolls itself on first start);
opting out is one line โ comment out DT_CENTRAL_URL in /etc/dart-trainer/config.env and
your rig runs fully local. Full detail, including the data-protection notice and your rights:
๐ statistics & your data.
| what | why it exists |
|---|---|
| Throws โ the 3 camera frames, the model's guess, your correction | this is the training data. It's the whole point. |
| Calibration โ the solved geometry + its fit quality | so a throw can be re-warped with the calibration that was live when it was captured |
| Health (every 10 min) โ version, model, calibration quality, camera angles, fps, free disk, errors | so "is your rig OK?" is answerable without anyone logging into your Pi |
| Decision log โ the detection loop's own record (dart held / ignored / takeout / errors) | the only thing that can explain "detection is broken" on a rig nobody can SSH into |
| Feedback โ only when you press the button | your text, your rig's state, and a picture of the screen only if you tick the box |
One line (adds the dart-room APT repo and installs the trainer):
curl -sSL https://dart-room.com/trainer/install.sh | sudo bash
Prefer to do it by hand? Add the repo, then install:
# codename (bookworm/trixie/noble) + arch (arm64/amd64) are auto-detected
curl -fsSL https://dart-room.com/apt/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/dart-room.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/dart-room.gpg] https://dart-room.com/apt $(. /etc/os-release; echo $VERSION_CODENAME) main" \
| sudo tee /etc/apt/sources.list.d/dart-room.list
sudo apt update && sudo apt install dart-trainer
dart-trainer-offline is a single package with
everything inside (web stack, scoring model) โ copy the .deb over and
sudo apt install ./dart-trainer-offline_*.deb. Raspberry Pi (arm64) only. Direct download
(fill in the version from what's new and your codename):
https://dart-room.com/apt/pool/main/d/dart-trainer-offline/dart-trainer-offline_<version>-1+<codename>_arm64.deb
โ or, on any machine that has the repo configured, apt-get download dart-trainer-offline.sudo nano /etc/dart-trainer/config.env # then: sudo systemctl restart dart-trainer
Every setting, with its default and a comment, is in
/usr/lib/dart-trainer/config.env.template (refreshed on every upgrade; your file is never touched).
Rigs installed before 0.7.29 still read the old /opt/dart-trainer/env first โ the new file wins key by key.
| setting | what it is |
|---|---|
DT_DEVICES | your 3 cameras, e.g. 0:/dev/video0,1:/dev/video2,2:/dev/video4 (check with v4l2-ctl --list-devices) |
DT_PLAYER | your default name (you can change it on the tablet) |
DT_RIG_ID | auto by default (a unique id derived from the machine) โ leave it, or set a friendly name e.g. toms-rig. Keeps every rig cleanly separate in the data. |
DT_PORT | web port (default 8788) |
DT_CENTRAL_URL | the central dataset (https://dart-room.com/dataset). Comment it out to run fully local. |
DT_CENTRAL_TOKEN | normally empty โ the rig enrolls itself. Only for a hand-provisioned token, and only here: never on the command line / in DT_EXTRA, where every process can read it. |
DT_HUB_URL | https://dart-room.com โ online play (needs the dart-room-bridge add-on, see step 7). DT_DART_ROOM=0 switches it off. |
DT_EXTRA | auto-scoring: --model-weights /opt/dart-trainer/data/tipnet.onnx. The model itself is fetched over the air on first run and kept current; clear this line for manual-tap mode (no model). |
Central needs no token from you โ the rig enrolls itself on first start (new rigs stay
quarantined from training until trusted). To run fully local instead, comment out DT_CENTRAL_URL โ
see statistics & your data.
chmod 600 for the same reason.dart-trainer # starts it (pauses autodarts to use the cameras)
On your tablet/phone on the same network, open http://<your-pi-ip>:8788.
Steps 4โ5 below are one-time buttons inside that web UI.
X01 (301/501/โฆ) ยท 501 Head-to-Head (Elo) ยท Cricket ยท Count-Up ยท Around the Clock ยท Around the World (doubles) ยท Bob's 27 ยท Shanghai ยท High Score 3 ยท Treble 20 ยท Treble 20 ยท until ยท Group Builder ยท JDC Challenge ยท Checkout 121 ยท Finishing 50 ยท Checkout Routes ยท Bermuda Triangle (Halve-It). Rules for each: game modes.
Online 501 against a friend's board, with the match page, recap and board photos on
dart-room.com, is a separate add-on: dart-room-bridge.
Without it the board plays offline exactly as before (the tablet says offline only).
sudo apt update && sudo apt install dart-room-bridge # needs dart-trainer โฅ 0.9.84
sudo systemctl restart dart-trainer
XXXX-XXXX).Pairing is one-time per board. The website cannot reach your Pi directly (HTTPS โ LAN),
which is why the two codes travel through you. No terminal needed (since 0.9.91); if the section is
missing from Settings, the dart-room-bridge add-on is not installed or not running.
If a code is refused the section tells you why: That code isnโt right (check it on the site),
Code expired โ generate a new one, or This board is already linked to another account.
sudo apt update && sudo apt install --only-upgrade dart-trainer
(add dart-room-bridge if you play online).sudo systemctl enable --now dart-trainer-autoupdate.timer.
It follows whichever channel your sources line has.The APT repo has two components. Fresh installs get main only (stable). That's what you want for everyday play.
| channel | who it's for | when it updates |
|---|---|---|
main | everyone by default โ friends, production play | only after a version has soaked and is promoted |
beta | opt-in โ people who want the newest detection fixes early | every CI build lands here first (before main) |
Opting into beta is one word on the sources line. You can leave anytime by dropping
beta again and reinstalling the main package.
# 1) Edit the sources line โ add the word "beta" after "main"
# (codename is usually "trixie" or "bookworm" โ leave yours as-is)
sudo nano /etc/apt/sources.list.d/dart-room.list
# before: โฆ https://dart-room.com/apt trixie main
# after: โฆ https://dart-room.com/apt trixie main beta
# 2) Upgrade to whatever is currently in beta
sudo apt update
sudo apt install -y --only-upgrade dart-trainer
# 3) Check the version (should match the beta package you wanted)
dpkg -l dart-trainer | tail -1
# or: curl -s http://127.0.0.1:8788/status | head
main โ beta is never forced.sudo systemctl stop autodarts (the trainer does this, but a stuck process can hold the cameras).journalctl -u dart-trainer -f (or run dart-trainer in a terminal).dart-room-bridge
add-on is not installed (or was removed by an upgrade) โ see step 7.game modes ยท statistics ยท where your data lives ยท dart-room.com ยท made for the crew ๐ฏ