Skip to main content

Python client for Warped Pinball Vector boards (HTTP, USB serial, and UDP discovery)

Project description

warpedpinball

CI PyPI

Control real pinball machines from Python.

If a machine has a Warped Pinball Vector board installed, this library lets you talk to it in a few lines of code: watch scores change ball by ball, pull leaderboards, manage players, read and write the game's memory, and push firmware updates. Build a tournament display, a Discord bot that announces high scores, a stats dashboard for your basement, or a game mod that reacts to what's happening on the playfield.

The library finds boards on your network by name, handles authentication for you, and works the same whether you connect over WiFi or plug in with a USB cable. You write m.leaderboard(); it takes care of the rest.

Install

Requires Python 3.9+.

pip install warpedpinball

Recommended: install into a virtual environment

A virtual environment keeps warpedpinball and its dependencies isolated from your system Python, so nothing you install here can interfere with other projects (or with packages your OS manages). This is the recommended way to install.

# Create a virtual environment in a ".venv" folder
python3 -m venv .venv

# Activate it
source .venv/bin/activate          # macOS / Linux
# .venv\Scripts\activate           # Windows (PowerShell / cmd)

# Install the library into the active environment
pip install warpedpinball

# Or, to also get USB (serial) support:
pip install "warpedpinball[usb]"

Once activated, python, pip, and the vector CLI all refer to the environment. Run deactivate to leave it; re-run the source line above to come back to it in a new shell.

Quickstart

Connect to a machine by name and see what's happening on it:

import warpedpinball

with warpedpinball.connect("elvira") as m:
    print(m.leaderboard())

    for event in m.watch_game():
        if event.type == "score_changed":
            print(f"player {event.player}: {event.old} -> {event.new}")

That's a live feed of scores from a real pinball machine, in ten lines. connect() finds the board on your LAN by name (partial names work), and read-only calls like these need no password. When you're ready to change things, pass password= to connect() and the same object can update players, reset leaderboards, write memory, and more.

What you can do

  • Follow games live. watch_game() yields events as games start and end, balls drain, and scores change. See working with a machine.
  • Manage scores and players. Leaderboards, tournaments, player rosters, score claiming, import/export. Also covered in working with a machine.
  • Read and write game memory. Peek at credits, scores, and settings in the machine's battery-backed SRAM, or change them. See reading and writing memory.
  • Reach any firmware route. m.call() gives you the whole HTTP API, even routes that don't have a wrapper yet. See the HTTP API reference.
  • Skip the network entirely. Plug in a USB cable and connect_usb() gives you the same interface with no WiFi and no password.
  • Script from the shell. The vector CLI covers discovery, status, leaderboards, memory access, and firmware updates without writing any Python. See the CLI guide.

Documentation

Full guides live in the documentation index:

The complete API reference is generated from the source docstrings and published to GitHub Pages on every push to main. See docs/api-reference.md for how it is built and how to enable Pages.

Curious about the hardware itself? Vector boards and the machines they fit are at warpedpinball.com.

Development

git clone https://github.com/warped-pinball/python-library
cd python-library
pip install -e ".[dev,usb]"

pytest          # run the tests
ruff check .    # lint

pytest --cov --cov-report=term-missing   # run the tests with a coverage report

CI measures test coverage on every pull request and compares it against the base branch. Pull requests that lower total coverage are flagged: the coverage job posts a comment with the change and fails the check.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

warpedpinball-0.2.2.tar.gz (71.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

warpedpinball-0.2.2-py3-none-any.whl (32.7 kB view details)

Uploaded Python 3

File details

Details for the file warpedpinball-0.2.2.tar.gz.

File metadata

  • Download URL: warpedpinball-0.2.2.tar.gz
  • Upload date:
  • Size: 71.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for warpedpinball-0.2.2.tar.gz
Algorithm Hash digest
SHA256 c454405ec510f959b16ea4750a3bc598a0c7900943dbb22ef9dcc211956ef59f
MD5 590a2fd29dbf8cef6f3ea36345bdc015
BLAKE2b-256 4c1ac88eefc1cc3e95bec32610f5576ba5e2309d0f7391afec3769de98b6d3f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for warpedpinball-0.2.2.tar.gz:

Publisher: publish.yml on warped-pinball/python-library

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file warpedpinball-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: warpedpinball-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 32.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for warpedpinball-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ac8103bd20e001a718adc87ef296250b49d22e306e245dc9a732b5d9ae20bc47
MD5 a3826e750dafdf15a892fe20c8201ac9
BLAKE2b-256 d878523296a95f2660050322a6f302558527af406e267a2ca9da91d8c8114a7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for warpedpinball-0.2.2-py3-none-any.whl:

Publisher: publish.yml on warped-pinball/python-library

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page