Quickstart¶
The whole pipeline on synthetic data, with the real commands: install, build a demo store, backtest, forecast, run a live private book and price a sportsbook's lines. About 5 minutes once Postgres is up.
Every command below is a normal racinglines command with --demo added. --demo switches the data source to a
demo store (a separate database and data folder filled from a data pack) and changes nothing else.
The default pack, kart, is a synthetic Formula 1 world with a Mario Kart grid: every pace, result and price is
invented; play money, nothing is traded anywhere.
What you need
Python 3.11 or newer and a PostgreSQL 16+ server. No API key, no account and no network access are needed for the demo. The hosted way in needs only Python and a racinglines.bet account with MCP access (in testing).
Installing from PyPI?
pip install "racinglines[db]" is the shortest way in: the
package README walks through the same demo from the installed package, with
the database in one docker run. The package is F1, the downhill sim, the kart demo and the web app;
[db] runs every command, pip install "racinglines[mcp]" adds the MCP server and the hosted way in (--remote,
racinglines remote, data pull), and pip install "racinglines[web]" adds the web app. The NASCAR, MotoGP, road cycling and weather commands on this page are not in it.
Prefer to watch first? The same commands, recorded, play in the browser at racinglines.bet/docs/quickstart/term, no sign-in needed.
Which way in?¶
Everything runs on your machine. The demo store is built on first use (about a minute) and every command works on it.
Setup (5 min)¶
Step 1: Install¶
# LOCAL (Mac), or any machine with Python 3.11+ and Docker
python3 -m venv ~/rl && source ~/rl/bin/activate
pip install "racinglines[db]" # or, in a clone of racinglines-public: pip install -e ".[web]"
Step 2: Start Postgres¶
# LOCAL (Mac): PostgreSQL 17 on localhost:5433, data in the Docker volume racinglines-pgdata
docker run -d --name racinglines-db -p 5433:5432 -e POSTGRES_USER=racinglines -e POSTGRES_PASSWORD=racinglines \
-e POSTGRES_DB=racinglines -v racinglines-pgdata:/var/lib/postgresql/data postgres:17
In a clone of the full development repository, docker compose up -d starts the same server
(docker-compose.yml).
Without Docker, any Postgres 16+ works: point DATABASE_URL at it (Database). The demo
database is created next to the configured one (racinglines_demo_kart on the same server), so the user in the
URL needs the right to create databases (the container's user has it).
Step 3: Check the install¶
racinglines check runs the pipelines on synthetic data, probes every data source and checks the database
(about 10 seconds). --offline skips the endpoint probes; --no-db skips the database.
code (synthetic data)
โ f1 code load + measurements 0.3s 6 events, 7,485 laps, 360 practice rows
โ f1 code as-of leakage guard 0.0s sessions only usable after they end
โ f1 code training history 0.6s 120 training rows
โ f1 code race pricing 1.2s favourite Driver 01 36%
โ f1 code backtest 0.6s 6 race x mode rows, mean win Brier 0.032
โ f1 code season forecast 0.3s leader Driver 01 71%
โ markets code maker replay 0.0s 172 fills, P&L +72.56
โ markets code weekend taker 0.0s 46 trades, P&L +300.15
โ markets code season strategy 0.2s 39 trades, P&L -93.55
โ mtb_dh code parse results tables 0.1s 1920 rows, 60 riders, rounds ['final', 'practice', 'qual1']
โ mtb_dh code season model 0.2s sigma 0.0096, 60 riders
โ mtb_dh code season forecast 0.2s leader 69%
โ mtb_dh code backtest 0.2s 1 held-out round(s) scored
database
โ database Postgres 0.2s localhost:5433/racinglines, schema up to date
14/14 checks passed
Step 4: Choose where the data comes from¶
The first command that needs a database, when none is configured (no DATABASE_URL, no db or source in
~/.config/racinglines/cli.toml), asks once and saves the answer as source in that file. Answer 1:
racinglines needs a database, and none is configured (no DATABASE_URL, no `db` or `source` in ~/.config/racinglines/cli.toml).
1) local: the Postgres of docker-compose.yml on localhost:5433; start it with one command, `docker compose up -d`
(then every command works; add --demo for the synthetic demo store, docs/quickstart.md)
2) remote: sign in to racinglines.bet (the browser opens on first use) and run `racinglines book map|price|settle`
on the hosted server, like `racinglines remote ...` and `--remote` on a Lab-job command (in testing);
other commands still need a local database
Choose 1 or 2 [1]:
With no terminal to ask on (a script, CI), it prints the same two options and exits with code 2: set
DATABASE_URL, or run racinglines book config source local (or remote). The same command changes the answer
later. One resolver makes this choice and the --demo one (racinglines/cli/source.py).
Now run the quickstart.
#aintcare mode
racinglines.bet remote access is in testing (#aintcare mode). A review of venue and data-feed terms is pending, so data served here is for testing only. Every command that connects to the hosted server prints this warning on stderr.
Sign up on racinglines.bet first
Every --remote command needs a racinglines.bet token, which comes from your sign-in on the site:
sign up before Step 2. The hosted demo store (--demo --remote) may let you
try a few calls without a token first, then asks you to sign up. The local tab needs no account.
From PyPI, these commands need the MCP extra: pip install "racinglines[mcp]".
Nothing to install but the CLI itself, no Postgres: --remote sends the commands the hosted server runs to
racinglines.bet, and --demo --remote sends them to the pack's hosted demo store (racinglines mcp --http
--demo on the VM, over its own database built from the pack: synthetic data only, never production's). The
outputs below are not shown because these commands need the hosted server, which the docs build cannot reach.
Setup (2 min)¶
Step 1: Install the CLI¶
# LOCAL (Mac), or any machine with Python 3.11+: no Postgres needed
git clone https://github.com/racinglines/racinglines.git && cd racinglines # the development repository
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt && pip install -e .
Step 2: Sign in¶
The first --remote command opens the browser to sign in with your racinglines.bet account (one with MCP
access: Pro or admin, MCP: Hosted) and waits for Allow. The login is kept in
~/.config/racinglines/mcp-login.json and refreshed on its own; racinglines book logout forgets it. On a
machine with no browser, an rl_ token from Settings > Connect Claude (MCP) in RACINGLINES_MCP_TOKEN skips
the sign-in.
# LOCAL (Mac): the pack's book, priced on the hosted demo store (the browser opens once)
racinglines book price --demo --remote
Step 3: Run the model as a hosted job¶
On the hosted store the model commands run as the server's Lab jobs (run_job, followed with get_job), the
log printed as it arrives, and the run is saved there. They take the job's options only (--races, --sims,
--track, --half-life, --scenario; --half-life-days, --junior-weight for mtb_dh).
# LOCAL (Mac)
racinglines model backtest kart --demo --remote --races 10 # the backtest as a hosted job
racinglines model forecast kart --demo --remote # a forecast scenario on the hosted demo store
db stats, live run and live report need a local store. The pack names its server ([remote] mcp_url in
pack.toml; RACINGLINES_DEMO_MCP_URL overrides it); it answers once the owner has built it on the VM
(scripts/vm/demo_store.sh, Demo data packs). With source = "remote" saved
in ~/.config/racinglines/cli.toml, --demo alone goes to the hosted store too.
Step 4: Pull real data into your own database (optional)¶
The same sign-in reaches more of the hosted server (MCP: More commands on the hosted
server): --remote on any command that has a Lab job,
racinglines remote tools | call | job, and racinglines data pull SPORT, which copies one sport's shared data
(race data, model runs, exchange prices, trades and books; never accounts or positions) into a local database:
Run the quickstart (the kart pack)¶
The steps come from the pack's manifest (racinglines/demo/packs/kart/pack.toml, [[quickstart]], rendered by
python3 scripts/build_quickstart.py), and every Output tab is what the command printed on the pack, captured
by scripts/docs/capture_examples.py (never typed by hand). The browser replay
records the same list. Run them in order.
Step 1: ๐ฆ Install racinglines¶
In a virtualenv with Python 3.11+: the package with its database extra (from a clone of racinglines-public, pip install -e ".[web]").
Step 2: ๐ Build and look at the demo store¶
The first --demo command builds the store (a few minutes, with a progress bar): the database, the synthetic files, the real ingest and the exchange links. Later commands reuse it.
demo: building the kart pack's store (no database): database racinglines_demo_kart, folder
/home/user/racinglines-public/data/demo/kart. Synthetic data, made once (a few minutes).
๐ง demo store 0/7 creating the database
๐ง demo store 1/7 schema and reference data (alembic upgrade head, seed)
๐ง demo store 2/7 the pack's data files
๐ง demo store generating: 2024 R01 Mario Kart Stadium
๐ง demo store generating: 2025 R01 Mario Kart Stadium
๐ง demo store generating: 2026 R01 Mario Kart Stadium
๐ง demo store generating: files written
๐ง demo store generating: exchange odds 2026-09
๐ง demo store generating: exchange odds 2026-10
๐ง demo store generating: exchange odds 2026-11
๐ง demo store 3/7 racinglines data ingest f1 --years 2024-2026
๐ง demo store 4/7 racinglines model forecast f1 --save --sims 2000
๐ง demo store 5/7 racinglines data pm-links-import f1
๐ง demo store 6/7 racinglines data pm-links-import f1 --exchange kalshi
๐ง demo store 7/7 ready
demo: the kart store is ready (f1 data; `racinglines db stats --demo kart`) Let's-a go! ๐
โญโ ๐ฆ database racinglines_demo_kart โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐
calendar ๐ results ๐ฎ model โ
โ sports 8 athletes 20 model runs 1 โ
โ leagues 8 athlete identifiers 20 race predictions 60 โ
โ competitions 8 results 3,300 standings predictions 20 โ
โ categories 11 splits 0 โ
โ venues 27 source files 33 โ
โ events 36 โ
โ races 36 โ
โ rounds 165 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
coverage
competition year category events rounds results
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
f1_wdc 2024 DRV 12 60 1,200
f1_wdc 2025 DRV 12 60 1,200
f1_wdc 2026 DRV 9 45 900
Step 3: ๐ Backtest the model¶
Every past race priced as of before the weekend, before qualifying and before the race, with track features on and off, scored against the results and against uniform and grid baselines.
progress 0/1 building history (track features on)
๐ backtest, track features on
progress 10/33 2024 R10 rainbow-road
progress 20/33 2025 R08 mount-wario
progress 30/33 2026 R06 thwomp-ruins
progress 33/33 2026 R09 bowser-s-castle
๐ Track features ON: mean over 32 races
โญโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโฎ
โ market โ stage โ model Brier โ uniform โ grid โ skill vs uniform โ log loss โ
โโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค
โ win โ pre weekend โ 0.0431 โ 0.0475 โ โ โ โ +9% โ 0.1518 โ
โ โ pre quali โ 0.0405 โ 0.0475 โ โ โ โโ +15% โ 0.1388 โ
โ โ pre race โ 0.0381 โ 0.0475 โ 0.0410 โ โโ +20% โ 0.1266 โ
โโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค
โ podium โ pre weekend โ 0.0988 โ 0.1275 โ โ โ โโโ +23% โ 0.3155 โ
โ โ pre quali โ 0.0913 โ 0.1275 โ โ โ โโโ +28% โ 0.3058 โ
โ โ pre race โ 0.0772 โ 0.1275 โ 0.0824 โ โโโโ +39% โ 0.2699 โ
โโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค
โ top10 โ pre weekend โ 0.1662 โ 0.2500 โ โ โ โโโโ +34% โ 0.5105 โ
โ โ pre quali โ 0.1543 โ 0.2500 โ โ โ โโโโ +38% โ 0.4897 โ
โ โ pre race โ 0.1295 โ 0.2500 โ 0.1345 โ โโโโโ +48% โ 0.4353 โ
โฐโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโฏ
๐ favourite won 34% of 32 races ยท rank correlation 0.83 ยท mean winner probability 22.7%
best call 2024 R04 Royal Raceway: Donkey Kong won at 48.6%
upset 2024 R08 Mount Wario: Donkey Kong won at 1.7% (favourite Peach)
progress 0/1 building history (track features off)
๐ backtest, track features off
progress 10/33 2024 R10 rainbow-road
progress 20/33 2025 R08 mount-wario
progress 30/33 2026 R06 thwomp-ruins
progress 33/33 2026 R09 bowser-s-castle
๐ Track features OFF: mean over 32 races
โญโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโฎ
โ market โ stage โ model Brier โ uniform โ grid โ skill vs uniform โ log loss โ
โโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค
โ win โ pre weekend โ 0.0437 โ 0.0475 โ โ โ โ +8% โ 0.1629 โ
โ โ pre quali โ 0.0407 โ 0.0475 โ โ โ โโ +14% โ 0.1391 โ
โ โ pre race โ 0.0377 โ 0.0475 โ 0.0410 โ โโ +21% โ 0.1240 โ
โโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค
โ podium โ pre weekend โ 0.1033 โ 0.1275 โ โ โ โโ +19% โ 0.3356 โ
โ โ pre quali โ 0.0915 โ 0.1275 โ โ โ โโโ +28% โ 0.3104 โ
โ โ pre race โ 0.0768 โ 0.1275 โ 0.0824 โ โโโโ +40% โ 0.2650 โ
โโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโค
โ top10 โ pre weekend โ 0.1879 โ 0.2500 โ โ โ โโโ +25% โ 0.5659 โ
โ โ pre quali โ 0.1573 โ 0.2500 โ โ โ โโโโ +37% โ 0.4944 โ
โ โ pre race โ 0.1296 โ 0.2500 โ 0.1345 โ โโโโโ +48% โ 0.4326 โ
โฐโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโฏ
๐ favourite won 38% of 32 races ยท rank correlation 0.83 ยท mean winner probability 23.1%
best call 2024 R04 Royal Raceway: Donkey Kong won at 52.3%
upset 2024 R08 Mount Wario: Donkey Kong won at 1.6% (favourite Peach)
Per-race rows -> /home/user/racinglines-public/data/demo/kart/runs/f1/backtests/backtest_20261014_0506.csv
Step 4: ๐ฎ Forecast the rest of the season¶
The next races (Rainbow Road is a sprint weekend) and both championships; --save stores the run the book and the web app read.
๐ฎ forecast 2026 ยท cutoff 2026-10-14 05:06 UTC ยท latest results 2026-10-04 14:00
๐ R10 Rainbow Road Grand Prix (18 Oct)
โญโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโฎ
โ driver โ team โ win โ โ podium โ โ top 10 โ DNF โ exp pts โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโผโโโโโโโโโโค
โ Mario โ mushroom โ 26.4% โ โโโโ โ 58.7% โ โโโโโโโโโ โ 95.0% โ 3.2% โ 15.1 โ
โ Luigi โ mushroom โ 18.8% โ โโโ โ 49.7% โ โโโโโโโ โ 93.8% โ 3.1% โ 13.4 โ
โ Bowser โ koopa โ 14.4% โ โโ โ 40.2% โ โโโโโโ โ 82.2% โ 13.9% โ 11.2 โ
โ Peach โ royal โ 9.9% โ โโ โ 33.1% โ โโโโโ โ 86.7% โ 5.5% โ 10.2 โ
โ Daisy โ royal โ 8.3% โ โโ โ 29.6% โ โโโโโ โ 84.4% โ 5.9% โ 9.5 โ
โ Donkey Kong โ kong โ 8.0% โ โ โ 27.4% โ โโโโ โ 85.8% โ 3.5% โ 9.3 โ
โ Bowser Jr. โ koopa โ 6.7% โ โ โ 23.6% โ โโโโ โ 75.2% โ 13.7% โ 8.1 โ
โ Diddy Kong โ kong โ 2.8% โ โ โ 12.3% โ โโ โ 72.9% โ 3.3% โ 5.8 โ
โ Yoshi โ yoshi โ 1.6% โ โ โ 7.7% โ โ โ 60.1% โ 7.3% โ 4.2 โ
โ Rosalina โ comet โ 1.2% โ โ โ 5.9% โ โ โ 55.5% โ 5.6% โ 3.6 โ
โฐโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโดโโโโโโโโโโฏ
๐ R11 Wario Stadium Grand Prix (01 Nov)
โญโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโฎ
โ driver โ team โ win โ โ podium โ โ top 10 โ DNF โ exp pts โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโผโโโโโโโโโโค
โ Mario โ mushroom โ 24.4% โ โโโโ โ 59.3% โ โโโโโโโโโ โ 95.4% โ 3.0% โ 15.0 โ
โ Luigi โ mushroom โ 20.7% โ โโโ โ 52.9% โ โโโโโโโโ โ 94.8% โ 3.0% โ 14.0 โ
โ Peach โ royal โ 15.6% โ โโโ โ 44.2% โ โโโโโโโ โ 90.8% โ 5.9% โ 12.4 โ
โ Bowser โ koopa โ 12.9% โ โโ โ 37.3% โ โโโโโโ โ 82.2% โ 14.0% โ 10.8 โ
โ Daisy โ royal โ 12.1% โ โโ โ 36.9% โ โโโโโโ โ 89.1% โ 5.7% โ 11.2 โ
โ Bowser Jr. โ koopa โ 4.6% โ โ โ 19.1% โ โโโ โ 75.1% โ 13.7% โ 7.3 โ
โ Donkey Kong โ kong โ 4.2% โ โ โ 18.4% โ โโโ โ 82.0% โ 3.1% โ 7.6 โ
โ Yoshi โ yoshi โ 2.1% โ โ โ 11.0% โ โโ โ 69.3% โ 7.4% โ 5.4 โ
โ Diddy Kong โ kong โ 1.0% โ โ โ 6.1% โ โ โ 61.1% โ 3.6% โ 4.0 โ
โ Birdo โ yoshi โ 0.9% โ โ โ 5.3% โ โ โ 56.3% โ 7.3% โ 3.6 โ
โฐโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโดโโโโโโโโโโฏ
๐ 2026 drivers' championship
โญโโโโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฌโโโโโโโโโฎ
โ driver โ points โ expected โ champion โ โ top 3 โ
โโโโโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโค
โ Luigi โ 191 โ 234 โ 99.8% โ โโโโโโโโโโโโโโ โ 100.0% โ
โ Mario โ 134 โ 182 โ 0.2% โ โ 99.1% โ
โ Peach โ 106 โ 141 โ 0.0% โ โ 60.5% โ
โ Bowser โ 99 โ 135 โ 0.0% โ โ 39.9% โ
โ Daisy โ 62 โ 95 โ 0.0% โ โ 0.2% โ
โ Donkey Kong โ 57 โ 85 โ 0.0% โ โ 0.2% โ
โ Bowser Jr. โ 60 โ 85 โ 0.0% โ โ 0.1% โ
โ Koopa Troopa โ 55 โ 58 โ 0.0% โ โ 0.0% โ
โ Birdo โ 36 โ 48 โ 0.0% โ โ 0.0% โ
โ Diddy Kong โ 28 โ 46 โ 0.0% โ โ 0.0% โ
โฐโโโโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโฏ
constructors
team points expected champion
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Mushroom Racing 325 416 100.0% โโโโโโโโโโโโโโ
Royal Racing 168 236 0.0%
Koopa Kart Works 159 220 0.0%
Kong Jungle Racing 85 132 0.0%
Yoshi Island GP 62 91 0.0%
finishing model coef {'g': 0.527, 'g_ease': -0.149, 'rp_rel': 0.041, 'rp_ease': 0.051, 'qp_rel':
0.08, 'street_g': 0.0} sigma 0.155; season drift (as-of) {'team_sd': 0.002652025069557153,
'driver_sd': 0.0005339299639313828}
Saved forecast run 2.
Step 5: ๐ Run a live private book¶
Bowser's Castle (round 9) replayed on a simulated clock: the maker's book opens before practice, reprices after each session from the model's stage runs, 100 simulated takers trade against it, the book closes at lights out and settles from the results.
pre-weekend: priced (run #3)
2026-10-02T10:30:00+00:00 2026-09 pre-weekend: 80 markets, 54 quoted, 0 crowd fills, maker P&L +24.73
โญโ ๐ฆ Bowser's Castle Grand Prix 2026 (synthetic) ยท pre-weekend (1 of 7 ยท 2026-10-02T10:30 UTC) โโฎ
โ โ
โ driver fair move bid ask Polymarket Kalshi inventory โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Mario 27.6% โโโโ 24.0% 31.0% 32.5% 36.0% -81 โ
โ Luigi 21.4% โโโ 18.0% 25.0% 11.1% 8.0% โ โ
โ Daisy 20.5% โโโ 17.0% 24.0% 6.1% 5.7% โ โ
โ Peach 18.2% โโโ 15.0% 22.0% 10.4% 11.2% โ โ
โ Bowser 3.6% โ 1.0% 8.0% 10.2% 10.5% -357 โ
โ Bowser Jr. 2.1% โ โ 6.0% 1.8% 2.1% โ โ
โ Yoshi 1.6% โ โ 5.0% 1.6% 1.9% โ โ
โ Koopa Troopa 1.2% โ โ 5.0% 7.2% 11.2% โ โ
โ โ
โ ๐ฅ crowd: 0 fills this update ยท 0 in all ยท $0 traded ยท 0 of 100 takers still betting โ
โ ๐ฐ maker P&L +24.73 (crowd +0.00, picks +24.73) โ
โ next: after FP1 at 2026-10-02T13:00 UTC โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
after FP1: priced (run #4)
2026-10-02T13:00:00+00:00 2026-09 after FP1: 80 markets, 44 quoted, 4 crowd fills, maker P&L -75.09
โญโ ๐ Bowser's Castle Grand Prix 2026 (synthetic) ยท after FP1 (2 of 7 ยท 2026-10-02T13:00 UTC) โโโโโโฎ
โ โ
โ driver fair move bid ask Polymarket Kalshi inventory โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Mario 29.1% โโโโ โฒ 1.5 26.0% 32.0% 32.5% 36.0% -66 โ
โ Bowser 20.1% โโโ โฒ 16.4 17.0% 23.0% 10.2% 10.5% -357 โ
โ Luigi 19.3% โโโ โผ 2.1 16.0% 22.0% 11.1% 8.0% โ โ
โ Peach 16.0% โโ โผ 2.2 13.0% 19.0% 10.4% 11.2% โ โ
โ Daisy 11.1% โโ โผ 9.5 8.0% 14.0% 6.1% 5.7% โ โ
โ Koopa Troopa 1.9% โ โฒ 0.6 โ 5.0% 7.2% 11.2% โ โ
โ Yoshi 0.7% โผ 0.9 โ 4.0% 1.6% 1.9% โ โ
โ King Boo 0.5% โผ 0.6 โ 4.0% 2.3% 1.8% โ โ
โ โ
โ ๐ฅ crowd: 4 fills this update ยท 4 in all ยท $294 traded ยท 4 of 100 takers still betting โ
โ ๐ฐ maker P&L -75.09 (crowd -51.91, picks -23.17) โ
โ ๐ fp1: P1 Mario ยท P2 Bowser ยท P3 Luigi โ
โ next: after FP2 at 2026-10-02T16:30 UTC โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โฆ 79 lines cut (showing the first 39 and last 28 of 146) โฆ
2026-10-04T17:00:00+00:00 2026-09 results: 80 markets, 0 quoted, 0 crowd fills, maker P&L -222.25
โญโ ๐ Bowser's Castle Grand Prix 2026 (synthetic) ยท results (7 of 7 ยท 2026-10-04T17:00 UTC) โโโโโโโฎ
โ โ
โ driver fair move bid ask Polymarket Kalshi inventory โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Luigi โ
31.4% โโโโ โฒ 4.5 โ โ 11.1% 8.0% -13 โ
โ Daisy โ 20.5% โโโ โฒ 8.5 โ โ 6.1% 5.7% -66 โ
โ Mario โ 20.4% โโโ โผ 2.2 โ โ 32.5% 36.0% -66 โ
โ Bowser โ 20.0% โโโ โฒ 5.3 โ โ 10.2% 10.5% -1,058 โ
โ Peach โ 6.5% โ โผ 12.8 โ โ 10.4% 11.2% -132 โ
โ King Boo โ 0.5% โผ 0.3 โ โ 2.3% 1.8% -2,338 โ
โ Koopa Troopa โ 0.4% โผ 1.4 โ โ 7.2% 11.2% โ โ
โ Donkey Kong โ 0.2% = โ โ 0.8% โ โ โ
โ โ
โ ๐ฅ crowd: 0 fills this update ยท 176 in all ยท $6,048 traded ยท 52 of 100 takers still betting โ
โ ๐ฐ maker P&L -222.25 (crowd -72.25, picks -150.00) โ
โ ๐ race: P1 Luigi ยท P2 Daisy ยท P3 Donkey Kong โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
simulated 2026-09 to 2026-10-04 17:00:00: 7 updates
โญโ ๐ Bowser's Castle Grand Prix 2026 (synthetic) โโโโโโโโโโโโโโโโโโโโโโฎ
โ opened 2026-10-02T10:30 UTC โ
โ settled 2026-10-04T17:00 UTC โ
โ ๐ฐ maker P&L -222.25 โ
โ from the crowd -72.25 โ
โ from the picks -150.00 โ
โ ๐ฅ fills 176 ($6,048 traded) โ
โ bettors 83: 31 up, 52 down, best +1,297.32, worst -184.03 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Rich output, or plain
db stats, model backtest, model forecast, live run, live report and book map|price|settle print Rich
output (colour, tables, probability bars), also when piped. --plain on any command gives the plain text;
NO_COLOR=1 keeps the layout and drops the colour codes, which is how these outputs were captured
(CLI: Output).
Measured on a cloud container (one CPU, 2026-10-14, the capture's own timings): the store build 56 s, the backtest 45 s, the forecast 10 s, the live run 36 s, the book 2 s.
After the live run¶
The rehearsal left a settled event in the store. live status lists it, and live report writes the event report
(Markdown, charts and, with --pdf, a PDF, which needs weasyprint or a headless Chrome) under
data/demo/kart/runs/live/demo-2026-09/report/.
The report, with its own summary of the event and the files it wrote:
โญโ ๐ Bowser's Castle Grand Prix 2026 (synthetic) โโโโโโโโโโโโโโโโโโโโโโฎ
โ opened 2026-10-02T10:30 UTC โ
โ settled 2026-10-04T17:00 UTC โ
โ ๐ฐ maker P&L -222.25 โ
โ from the crowd -72.25 โ
โ from the picks -150.00 โ
โ ๐ฅ fills 176 ($6,048 traded) โ
โ bettors 83: 31 up, 52 down, best +1,297.32, worst -184.03 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
๐ report files
what file
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
md runs/live/demo-2026-09/report/report.md
html runs/live/demo-2026-09/report/report.html
pnl.svg runs/live/demo-2026-09/report/pnl.svg
scorecard.svg runs/live/demo-2026-09/report/scorecard.svg
Price a sportsbook's lines¶
The pack carries a generic sportsbook's lines on rounds 10 and 11 (racinglines/demo/packs/kart/book.toml), one
per F1 pricing feature. book map resolves every leg to a race, athletes and a market kind by exact keys; book
price adds the model's fair, the linked exchange price, the book's implied probability and the EV against each;
book settle adds each leg's result and payout once the race is in. --json on any of them prints the same result
as JSON (Sportsbook slips).
demo: the demo store's synthetic data (made-up names, results and prices); nothing is traded
book map
id selection kind status race reason
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
win Super Mario race_win mapped 34
win-no Luigi not to win race_win mapped 34
podium Peach race_podium mapped 34
top5 Daisy race_top5 mapped 34
top10 Bowser race_top10 mapped 34
p2 Luigi race_p2 mapped 34
pole Mario race_pole mapped 34
fl Luigi race_fastest_lap mapped 34
h2h Daisy v Peach race_h2h mapped 34
mover Yoshi race_biggest_mover mapped 34
spr-win Mario race_sprint_win mapped 34
spr-pole Luigi race_sprint_pole mapped 34
red No race_red_flag mapped 34
sgp-joint Mario win + Luigi combo mapped 34
podium
โ 14.1 race_win Mario (f1 mapped 34
2026-10)
โ 14.2 race_podium Luigi mapped 34
(f1 2026-10)
sgp-product Peach podium + combo mapped 34
Daisy top 10
โ 15.1 race_podium Peach mapped 34
(f1 2026-10)
โ 15.2 race_top10 Daisy mapped 34
(f1 2026-10)
parlay Mario wins Rainbow combo mapped 34, 35
Road and Wario
Stadium
โ 16.1 race_win Mario (f1 mapped 34
2026-10)
โ 16.2 race_win Mario (f1 mapped 35
2026-11)
typo Maryo race_win unmapped 34 leg 17: driver
'Maryo' is not an
exact name in race
34's field
โ 17 race_win (f1 unmapped 34 driver 'Maryo' is
2026-10) not an exact name
in race 34's field
book_demo ยท event 2026-10 ยท f1 ยท captured 2026-10-15T09:00Z ยท odds decimal ยท USD
โญโโโโโโโโโโโโโโโโโโ unmapped lines โโโโโโโโโโโโโโโโโโโโฎ
โ typo โ
โ exact keys only: fix the book file or its [aliases] โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Every leg mapped by its exact keys. Now the prices:
demo: the demo store's synthetic data (made-up names, results and prices); nothing is traded
book price
model
id selection odds book model market EV model EV market method
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
win Super 3.20 31.2% 26.4% 65.4% -15.6% +109.3% single
Mario
win-no Luigi not 1.30 76.9% 81.2% 87.2% +5.6% +13.4% single
to win
podium Peach 2.40 41.7% 33.1% 11.6% -20.5% -72.2% single
top5 Daisy 1.90 52.6% 50.2% โ -4.6% โ single
top10 Bowser 1.25 80.0% 82.2% โ +2.7% โ single
p2 Luigi 4.50 22.2% โ 32.8% โ +47.6% single
pole Mario 2.75 36.4% 35.0% 66.3% -3.9% +82.3% single
fl Luigi 5.00 20.0% โ โ โ โ single
h2h Daisy v 2.10 47.6% 47.0% 41.5% -1.4% -12.8% single
Peach
mover Yoshi 6.00 16.7% 8.6% โ -48.5% โ single
spr-win Mario 2.90 34.5% 24.8% โ -28.0% โ single
spr-pole Luigi 4.00 25.0% 16.1% โ -35.6% โ single
red No 1.45 69.0% โ โ โ โ single
sgp-joint Mario win 4.20 23.8% 13.1% 40.0% -44.9% +68.1% product
+ Luigi
podium
โ 14.1 race_win โ 26.4% 65.4%
Mario (f1 polymarket
2026-10)
โ 14.2 race_podiโฆ โ 49.7% 61.2%
Luigi (f1 polymarket
2026-10)
sgp-product Peach 2.50 40.0% 28.0% โ -30.1% โ product
podium +
Daisy top
10
โ 15.1 race_podiโฆ โ 33.1% 11.6%
Peach (f1 polymarket
2026-10)
โ 15.2 race_top10 โ 84.4% โ
Daisy (f1
2026-10)
parlay Mario wins 9.60 10.4% 6.4% 35.9% -38.2% +244.7% single x
Rainbow single
Road and
Wario
Stadium
โ 16.1 race_win 3.2 31.2% 26.4% 65.4%
Mario (f1 polymarket
2026-10)
โ 16.2 race_win 3.0 33.3% 24.4% 54.9%
Mario (f1 polymarket
2026-11)
typo Maryo โ โ โ โ โ โ
book_demo ยท event 2026-10 ยท f1 ยท captured 2026-10-15T09:00Z ยท odds decimal ยท USD
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ flags โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ sgp-joint: race 34: 2 legs on one race, correlated: EV approximate โ
โ sgp-joint: market: product of leg prices on one race, correlated: EV approximate โ
โ sgp-product: race 34: 2 legs on one race, correlated: EV approximate โ
โ parlay: legs on 2 races: independent across races (product) โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโโโโโโโโโโโโโโโโโโ unmapped lines โโโโโโโโโโโโโโโโโโโโฎ
โ typo โ
โ exact keys only: fix the book file or its [aliases] โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ assumptions โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โข EV is per unit staked: probability x decimal payout - 1; decimal payout = 1 / the book's โ
โ implied probability. โ
โ โข Legs on different races are independent: the slip probability is the product of their โ
โ probabilities. โ
โ โข Legs on the same race are priced jointly from simulations when they are available (passed in, โ
โ or a stored combo run with exactly these legs); otherwise the product of the marginals, flagged โ
โ 'correlated: EV approximate'. โ
โ โข The market's slip probability is the product of its legs' prices: no exchange lists the slip โ
โ itself. โ
โ โข Model and market are shown side by side, never blended (owner, 2026-10-07). โ
โ โข The market price is the freshest linked exchange's mid (bid/ask midpoint, else its last price, โ
โ else the tape's). โ
โ blend: none (owner, 2026-10-07; docs/sportsbook/slips.md) โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
And the settlement:
demo: the demo store's synthetic data (made-up names, results and prices); nothing is traded
book settle
id selection odds result payout profit
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
win Super Mario 3.20 pending โ โ
win-no Luigi not to win 1.30 pending โ โ
podium Peach 2.40 pending โ โ
top5 Daisy 1.90 pending โ โ
top10 Bowser 1.25 pending โ โ
p2 Luigi 4.50 pending โ โ
pole Mario 2.75 pending โ โ
fl Luigi 5.00 manual โ โ
h2h Daisy v Peach 2.10 pending โ โ
mover Yoshi 6.00 pending โ โ
spr-win Mario 2.90 pending โ โ
spr-pole Luigi 4.00 pending โ โ
red No 1.45 manual โ โ
sgp-joint Mario win + Luigi podium 4.20 pending โ โ
โ 14.1 race_win Mario (f1 2026-10) pending
โ 14.2 race_podium Luigi (f1 2026-10) pending
sgp-product Peach podium + Daisy top 10 2.50 pending โ โ
โ 15.1 race_podium Peach (f1 2026-10) pending
โ 15.2 race_top10 Daisy (f1 2026-10) pending
parlay Mario wins Rainbow Road and Wario Stadium 9.60 pending โ โ
โ 16.1 race_win Mario (f1 2026-10) pending
โ 16.2 race_win Mario (f1 2026-11) pending
typo Maryo โ โ โ โ
book_demo ยท event 2026-10 ยท f1 ยท captured 2026-10-15T09:00Z ยท odds decimal ยท USD
โญโโโโโโโโโโโโโโโโโโ unmapped lines โโโโโโโโโโโโโโโโโโโโฎ
โ typo โ
โ exact keys only: fix the book file or its [aliases] โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Rounds 10 and 11 have not been raced in the pack, so every line settles as pending.
Where things go¶
| What | Where | Notes |
|---|---|---|
| The demo database | racinglines_demo_kart, on the same server as DATABASE_URL |
RACINGLINES_DEMO_DATABASE_URL moves it |
| The demo data folder | data/demo/kart/ (gitignored) |
the generated FastF1 files under raw/, the exchange links under archive/, run outputs under runs/, the live spec under live/; RACINGLINES_DEMO_DATA moves it |
| The build marker | data/demo/kart/demo-store.json |
a fingerprint of the pack and its generator: both the database and the folder are rebuilt when the pack changes; delete the marker (or drop the database) to rebuild by hand |
Not in the quickstart yet: strategy replay f1 (the maker replay needs a recorded exchange tape of price history and
trades per market; the kart pack carries quotes only, not a tape).
Rebuild the data yourself¶
The demo is synthetic. To rebuild the real history locally, every source the code ingests is fetched with your own machine's network access, and with your own key where one is needed. Keys are never typed on the command line or committed: put them in your environment, or in a gitignored env file you fill with a hidden prompt, e.g.
# LOCAL (Mac): store a key without echoing it or leaving it in the shell history
read -rs -p "WUNDERGROUND_API_KEY: " k && printf 'export WUNDERGROUND_API_KEY=%s\n' "$k" >> .env.local && unset k
chmod 600 .env.local && source .env.local # .env.local: add it to .git/info/exclude if it isn't ignored
| Source | What | Your own key? | Commands | Code |
|---|---|---|---|---|
| F1 live-timing archive (via FastF1) | F1 sessions: results, laps, schedule | No | racinglines data fetch f1 --years 2020-2026, then racinglines data ingest f1 |
racinglines/sources/fastf1/fetch.py, ingest.py |
| ChronoRace | UCI downhill results | No (the results key comes from ChronoRace's public page data) | racinglines data download mtb_dh, then racinglines data ingest mtb_dh |
racinglines/sources/chronorace/download.py, ingest.py |
| NASCAR content feeds (cf.nascar.com) | NASCAR Cup results and laps | No | racinglines data fetch nascar, then racinglines data ingest nascar |
racinglines/sources/nascar/fetch.py |
| MotoGP results API (api.motogp.pulselive.com) | MotoGP classifications | No | racinglines data fetch motogp, then racinglines data ingest motogp |
racinglines/sources/motogp/fetch.py |
| ProCyclingStats | road cycling results | No key; needs pip install cloudscraper selectolax, and runs from a home connection |
racinglines data fetch cycling (see racinglines data fetch cycling -h) |
racinglines/sources/pcs.py, racinglines/cli/cycling.py |
| Polymarket (Gamma API) | market links, prices, trades | No (public market data) | racinglines markets sync, racinglines markets history, racinglines markets trades |
racinglines/markets/polymarket/sync.py |
| Kalshi (Trade API v2, market data) | market links, prices, trades | No for market data; a key (KALSHI_API_KEY_ID, KALSHI_PRIVATE_KEY_PATH, from your Kalshi account's API keys page) only for the portfolio and order endpoints, which a rebuild doesn't use |
racinglines markets --exchange kalshi sync (then history, trades) |
racinglines/markets/kalshi/client.py, trade.py |
| Open-Meteo | weather forecasts per event | No | racinglines weather fetch |
racinglines/weather/open_meteo.py |
| Weather Underground | weather forecasts (optional source) | Yes: WUNDERGROUND_API_KEY, the key a Weather Underground personal weather station owner gets; untested (no key has been probed) |
racinglines weather probe, racinglines weather fetch |
racinglines/weather/wunderground.py |
| IndyCar, WEC, SailGP | results (sources present, not wired into an ingest) | unknown | none yet | racinglines/sources/indycar/, wec/, sailgp/ |
Recorded exchange history older than what the exchanges still serve exists only on the VM: a rebuild has whatever
the exchanges return today. Respect each source's terms of use (e.g. sports/motogp.toml [results].terms) and its
rate limits; the fetchers pace themselves and are safe to re-run.
Next steps¶
-
CLI reference
Every group and command, with its
-houtput and a real run where one is captured. -
Demo data packs
What
--demodoes, what a pack is, the kart pack, and how to add one of your own. -
Ask Claude instead
The MCP server: the same data and simulations as typed tools for Claude Code, Claude Desktop or the CLI.
-
The web app
Markets, Trade, History and Lab at racinglines.bet, and how to run the app yourself.