Skip to content

Repository files navigation

🎯 PinReady

🇬🇧 English | 🇫🇷 Français


🇬🇧 English

Cross-platform configurator and launcher for Visual Pinball standalone (10.8.1).

PinReady replaces the non-existent native configuration tools for VPX standalone builds (SDL3/bgfx). It guides you through setting up a virtual pinball cabinet from scratch: screens, inputs, tilt, audio, then lets you browse and launch tables from a single interface. 🕹️

⚠️Scope — please read before installing

PinReady is designed to support the development and adoption of VPX 10.8.1, not to replace a stable production VPX setup. The target audience is testers and early adopters of the new 10.8.1 architecture (integrated plugins, folder-per-table layout, SDL3/bgfx backend). If you run a stable VPX 10.7.x production cabinet, PinReady is probably not for you yet.

💬 Community & support

Questions, bug reports, beta testing, or just want to chat? Join the Discord:

Discord

✨ Features

🧙 Configuration wizard (first run)

  • 📥 Visual Pinball auto-install -- Automatically download and install the correct Visual Pinball build for your platform (Linux/macOS/Windows, x64/aarch64/SBC)
  • 🖥️ Screen assignment -- Detect displays via SDL3, auto-assign roles (Playfield, Backglass, DMD, Topper) by size, configure multi-screen positioning and cabinet physical dimensions
  • 🎨 Rendering -- Anti-aliasing, FXAA, sharpening, reflections, texture limits, sync mode, max framerate
  • 🎮 Input mapping -- Capture keyboard and joystick bindings for all VPX actions, auto-detect pinball controllers (Pinscape KL25Z, Pinscape Pico, DudesCab), conflict warnings
  • 📐 Tilt & nudge -- Configure accelerometer sensitivity with simplified or advanced controls
  • 🔊 Audio routing -- Assign playfield and backglass audio devices, configure SSF surround modes (6 modes), test speaker wiring with built-in audio sequences (music, ball sounds, knocker)
  • 📁 Tables directory -- Select the root folder containing your tables (folder-per-table layout)
  • 🌍 Internationalization -- 20+ languages: 🇬🇧 🇫🇷 🇩🇪 🇪🇸 🇮🇹 🇵🇹 🇳🇱 🇸🇪 🇫🇮 🇵🇱 🇨🇿 🇸🇰 🇷🇺 🇹🇷 🇸🇦 🇮🇳 🇧🇩 🇹🇭 🇻🇳 🇮🇩 🇰🇪 🇨🇳 🇹🇼 🇯🇵 🇰🇷

🚀 Table launcher (subsequent runs)

  • 🗂️ Table browser -- Scan folder-per-table directories, display backglass thumbnails extracted from .directb2s files
  • 📺 Multi-screen layout -- Table selector on DMD, backglass preview on BG display
  • VPX integration -- Launch tables with loading progress overlay, parse VPX stdout for real-time status
  • 🔄 Auto-update -- Checks for new Visual Pinball releases on startup, one-click update from the launcher
  • 🕹️ Input navigation -- Browse and launch tables with joystick (flippers, start) or keyboard

📦 Asset bundling & enrichment

  • 🔁 Legacy folder merge (Tables wizard page, opt-in) -- Point to your old ~/VPINMAME, ~/PUPVIDEOS, ~/Music folders and PinReady migrates ROM, altsound, altcolor (.vni), Serum (.crz), PUP packs, NVRAM, CFG, music, .directb2s and POV .ini into the modern folder-per-table layout. Three I/O strategies: copy, move, symlink. Dry-run mode shows what would be placed before you commit.
  • 🌐 Self-hosted mirror (System wizard page) -- Route the VBS catalog and VPin media DB through your own server (e.g. https://pinready.syl21.org) instead of GitHub. Useful for offline cabs and bandwidth control.
  • 🧩 Catalog enrichment -- Match each installed table against the Virtual Pinball Spreadsheet and auto-fetch backglass thumbnails + audio jingles from superhac/vpinmediadb. Drives hover preview and the "↑ update available" badge.
  • 🖥️ Desktop integration (System wizard page) -- Cross-platform menu shortcuts and .vpx file association: freedesktop on Linux (GNOME / KDE / XFCE), .app bundle on macOS, Start Menu + HKCU registry on Windows.

🛡️ Diagnostics & robustness

  • 🩺 Detected-system banner at the top of the wizard's first page (Detected system: Ubuntu 24.04 LTS · X11 · GNOME (Mutter) · PinReady v0.12) — bug reports always carry their context.
  • 💥 Cross-OS crash diagnostics -- When VPX exits abnormally the popup shows a POSIX shell-quoted reproduction command, the cwd, the system info, the loading-phase log + the last 100 in-game lines, and the exact path to the OS coredump (systemd-coredump on Linux, ~/Library/Logs/DiagnosticReports/ on macOS, %LOCALAPPDATA%\CrashDumps\ on Windows) plus links to inspect them.
  • Parallel rescan -- Per-table pipeline (match → install media → extract backglass → write DB → push to UI) running in parallel across num_cpus workers. Each table is fully self-contained: same worker writes medias/bg.png and reads it back, no cross-thread file race.
  • 🔄 Robust auto-update -- The new instance retries the PID lock for 5 s while the previous one finishes exiting (used to silently fail on race).

⌨️ Command-line tools

  • pinready --print-paths -- Resolved DB / log / ini / tables / VPX-binary paths.
  • pinready --list-tables -- One line per detected table folder (scriptable).
  • pinready --merge-dry-run TABLES VPINMAME PUPVIDEOS MUSIC [--strategy copy|move|symlink] -- Headless preview of what the legacy-folder import would do.
  • pinready --merge ... [--yes] -- Same but commit-mode.
  • pinready --reset-wizard -- Re-arm the configuration wizard for the next launch.
  • pinready --config -- Force-launch the wizard.

🎯 Target

  • 🎰 Visual Pinball 10.8.1 -- Uses the folder-per-table layout
  • 💻 Cross-platform -- Linux, macOS, Windows. SDL3 only, no platform-specific APIs
  • 📦 No system dependencies -- SDL3 and SQLite are statically linked

📥 Download

Grab the latest release for your platform -- no install needed, just download and run:

👉 Download PinReady (Linux, macOS, Windows)

📹 Video demo — YouTube playlist (EN + FR)

🔨 Build from source

If you prefer to compile it yourself:

🐧 Linux:

sudo apt install build-essential cmake pkg-config \
libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxkbcommon-dev libssl-dev
cargo build --release

🍎 macOS / 🪟 Windows:

cargo build --release

SDL3 and SQLite compile from source automatically -- no manual installation needed. ✅

🚀 Usage

First run (no existing database) launches the configuration wizard. Subsequent runs go directly to the table launcher. The wizard can be re-launched at any time.

# Run with debug logging
RUST_LOG=info cargo run
# Or run the release binary directly
./target/release/pinready

📋 Requirements:

  • 🎰 Visual Pinball executable (10.8.1+) -- auto-installed or path configured in the wizard
  • 📁 Tables directory -- folder-per-table layout as described in VPX docs
  • 🌐 Internet connection -- required for auto-install and update checks (optional for manual install)

📂 File locations (auto-resolved via OS conventions — you do not need to create these folders yourself):

WhatLinuxmacOSWindows
VPinballX.ini (PinReady reads/writes)~/.local/share/VPinballX/10.8/VPinballX.ini~/Library/Application Support/VPinballX/10.8/VPinballX.ini%APPDATA%\VPinballX\10.8\VPinballX.ini
PinReady DB + log~/.local/share/pinready/~/Library/Application Support/pinready/%APPDATA%\pinready\
DOF config (extract the VPUniverse zip here)~/.local/share/VPinballX/10.8/directoutputconfig/~/Library/Application Support/VPinballX/10.8/directoutputconfig/%APPDATA%\VPinballX\10.8\directoutputconfig\

🎮 Launcher controls:

Action🖱️ Mouse⌨️ Keyboard🕹️ Joystick
Previous/next tableHoverArrow Left/RightLeft/Right Flipper
Previous/next row--Arrow Up/DownLeft/Right MagnaSave
Jump by one viewportWheel flickPageUp/PageDown--
First/last table--Home/End--
Scroll view (no selection change)Mouse wheel----
Launch tableClickEnterStart
Open config----Launch Ball
Quit launcher--EscapeExitGame

📺 Multi-screen launcher layout:

ScreensPlayfieldBackglassDMDTopper
1Table grid------
2Table grid (fullscreen)Backglass preview of hovered table----
3VPX logo coverBackglass preview of hovered tableTable grid (fullscreen)--
4VPX logo coverBackglass preview of hovered tableTable grid (fullscreen)VPX logo cover

When a table is launched, all cover viewports are hidden to let VPX take over the screens.

🕹️ Supported pinball controllers:

PinReady auto-detects pinball controllers and applies default button mappings. The profile can be changed in the wizard.

KL25Z (KL Shield V5.1 / Brain / Rig Master) — 21 buttons
BtnLabelVPX Action
0STARTStart
1EXTRA-BExtraBall
2COIN1Credit1
3COIN2Credit2
4L BALLLaunchBall
5EXITExitGame
6QUIT(VP editor)
7L FLIPPLeftFlipper + LeftStagedFlipper
8R FLIPPRightFlipper + RightStagedFlipper
9L MAGNALeftMagna
10R MAGNARightMagna
11FIRELockbar
12TILTTilt
13DOORCoinDoor
14SERVICE EXITService1
15SERVICE -Service2
16SERVICE +Service3
17ENTERService4
18N.M.(Night Mode)
19VOL-VolumeDown
20VOL+VolumeUp
Pinscape Pico (OpenPinballDevice) — 27 buttons
BtnFunctionVPX Action
0StartStart
1ExitExitGame
2Extra BallExtraBall
3–6Coin 1–4Credit1–4
7Launch BallLaunchBall
8FireLockbar
9Left FlipperLeftFlipper
10Right FlipperRightFlipper
11Upper Left FlipperLeftStagedFlipper
12Upper Right FlipperRightStagedFlipper
13MagnaSave LeftLeftMagna
14MagnaSave RightRightMagna
15Tilt BobTilt
16Slam TiltSlamTilt
17Coin DoorCoinDoor
18–21Service 1–4Service1–4
22Left NudgeLeftNudge
23Forward NudgeCenterNudge
24Right NudgeRightNudge
25Volume UpVolumeUp
26Volume DownVolumeDown
DudesCab (Arnoz) — 32 buttons
BtnLabelVPX Action
0StartStart
1ExtraBallExtraBall
2Coin1Credit1
3Coin2Credit2
4LaunchBallLaunchBall
5ReturnExitGame
6Exit(Quit to editor)
7Flipper LeftLeftFlipper + LeftStagedFlipper
8Flipper RightRightFlipper + RightStagedFlipper
9Magna LeftLeftMagna
10Magna RightRightMagna
11TiltTilt
12FireLockbar
13DoorCoinDoor
14–17ROM Exit/−/+/EnterService1–4
18VOL −VolumeDown
19VOL +VolumeUp
20–23DPAD(Hat navigation)
24NightMode(DO NOT REMAP)
25–30Spare 1–6(User-defined)
31Calib(DO NOT REMAP)

🧩 Table preparation

Some tables need a bit of prep to behave correctly under VPX Standalone 10.8.1. Optional steps, but worth knowing:

🔧 Patching old tables for VPX Standalone

Some older tables use VBScript features that don't behave identically under VPX Standalone's scripting engine. The community-maintained jsm174/vpx-standalone-scripts repo provides patched .vbs sidecar scripts for hundreds of tables.

Workflow:

  1. Find the .vbs file matching your table name in the repo
  2. Place it next to your .vpx (same folder, same base name)
  3. VPX Standalone automatically uses the sidecar script instead of the embedded one

⚙️ Per-table settings (custom ini)

Global settings live in VPinballX.ini. To override them for a specific table, two options:

Option A — Sidecar ini (simplest, no tool needed)

Drop a .ini next to your .vpx with the same base name. VPX picks it up automatically:

MyTable/
├── MyTable.vpx
└── MyTable.ini # overrides global VPinballX.ini for this table only

Only include the keys you want to override — everything else falls back to the global ini.

Option B — Embed the ini inside the .vpx (via vpxtool)

If you prefer keeping the settings inside the table file itself, use vpxtool — grab a binary from the latest release (Linux, macOS, Windows):

# 1. Extract the .vpx into a directory structure
vpxtool extract MyTable.vpx
# 2. Edit MyTable/MyTable.ini with your overrides# 3. Reassemble the .vpx with the ini embedded
vpxtool assemble MyTable/

🎨 Bonus — shrink table size (WebP conversion)

VPX tables often ship with large lossless BMP/PNG images. vpxtool can batch-convert them to WebP:

vpxtool images webp MyTable.vpx

Useful when you have dozens of tables eating disk space.


🇫🇷 Français

Configurateur et lanceur multiplateforme pour Visual Pinball standalone (10.8.1).

PinReady remplace les outils de configuration natifs inexistants pour les builds VPX standalone (SDL3/bgfx). Il vous guide dans la mise en place d'un flipper virtuel depuis zéro : écrans, contrôles, tilt, audio, puis permet de parcourir et lancer vos tables depuis une interface unique. 🕹️

⚠️Périmètre — à lire avant d'installer

PinReady est conçu pour accompagner le développement et l'adoption de VPX 10.8.1, pas pour remplacer une installation VPX stable en production. Le public cible, ce sont les testeurs et les early adopters de la nouvelle architecture 10.8.1 (plugins intégrés, format dossier-par-table, backend SDL3/bgfx). Si vous avez un cabinet VPX 10.7.x stable en production, PinReady n'est probablement pas encore pour vous.

💬 Communauté & support

Des questions, un bug à signaler, envie de tester les bêtas ou juste de discuter ? Rejoignez le Discord :

Discord

✨ Fonctionnalités

🧙 Assistant de configuration (premier lancement)

  • 📥 Installation automatique de Visual Pinball -- Télécharge et installe automatiquement le bon build Visual Pinball pour votre plateforme (Linux/macOS/Windows, x64/aarch64/SBC)
  • 🖥️ Affectation des écrans -- Détection des écrans via SDL3, affectation automatique des rôles (Playfield, Backglass, DMD, Topper) par taille, configuration du positionnement multi-écran et des dimensions physiques du cabinet
  • 🎨 Rendu -- Anti-aliasing, FXAA, netteté, reflets, limites de texture, mode sync, framerate max
  • 🎮 Mapping des contrôles -- Capture des touches clavier et boutons joystick pour toutes les actions VPX, détection automatique des contrôleurs pinball (Pinscape KL25Z, Pinscape Pico, DudesCab), avertissements de conflits
  • 📐 Tilt & nudge -- Configuration de la sensibilité de l'accéléromètre en mode simplifié ou avancé
  • 🔊 Routage audio -- Affectation des périphériques audio playfield et backglass, configuration des modes surround SSF (6 modes), test du câblage des enceintes avec séquences audio intégrées (musique, bruits de bille, knocker)
  • 📁 Répertoire des tables -- Sélection du dossier racine contenant vos tables (format dossier-par-table)
  • 🌍 Internationalisation -- 20+ langues : 🇬🇧 🇫🇷 🇩🇪 🇪🇸 🇮🇹 🇵🇹 🇳🇱 🇸🇪 🇫🇮 🇵🇱 🇨🇿 🇸🇰 🇷🇺 🇹🇷 🇸🇦 🇮🇳 🇧🇩 🇹🇭 🇻🇳 🇮🇩 🇰🇪 🇨🇳 🇹🇼 🇯🇵 🇰🇷

🚀 Lanceur de tables (lancements suivants)

  • 🗂️ Navigateur de tables -- Scan des répertoires dossier-par-table, affichage des miniatures backglass extraites des fichiers .directb2s
  • 📺 Affichage multi-écran -- Sélecteur de table sur le DMD, aperçu du backglass sur l'écran BG
  • Intégration VPX -- Lancement des tables avec overlay de progression, lecture du stdout VPX pour le statut en temps réel
  • 🔄 Mise à jour automatique -- Vérifie les nouvelles releases Visual Pinball au démarrage, mise à jour en un clic depuis le lanceur
  • 🕹️ Navigation aux contrôles -- Parcourir et lancer les tables au joystick (flippers, start) ou au clavier

📦 Import & enrichissement d'assets

  • 🔁 Import depuis dossiers legacy (page Tables, optionnel) -- Indiquez vos anciens dossiers ~/VPINMAME, ~/PUPVIDEOS, ~/Music et PinReady migre ROM, altsound, altcolor (.vni), Serum (.crz), PUP packs, NVRAM, CFG, musique, .directb2s et POV .ini vers le format dossier-par-table moderne. Trois stratégies d'I/O : copie, déplacement, lien symbolique. Aperçu (dry-run) avant validation.
  • 🌐 Miroir auto-hébergé (page Système) -- Route le catalogue VBS et la base de médias VPin via votre propre serveur (ex : https://pinready.syl21.org) au lieu de GitHub. Utile pour cabs hors-ligne et contrôle de bande passante.
  • 🧩 Enrichissement catalogue -- Match chaque table installée contre le Virtual Pinball Spreadsheet et récupère automatiquement miniatures backglass + jingles audio depuis superhac/vpinmediadb. Alimente le hover preview et le badge "↑ mise à jour disponible".
  • 🖥️ Intégration au bureau (page Système) -- Raccourcis menu cross-platform et association des fichiers .vpx : freedesktop sous Linux (GNOME / KDE / XFCE), bundle .app sous macOS, Menu Démarrer + registre HKCU sous Windows.

🛡️ Diagnostic & robustesse

  • 🩺 Bandeau "système détecté" en haut de la première page du wizard (Système détecté : Ubuntu 24.04 LTS · X11 · GNOME (Mutter) · PinReady v0.12) — les bug reports portent leur contexte.
  • 💥 Diagnostic crash multi-OS -- Quand VPX se ferme anormalement, le popup affiche une commande de reproduction shell-quotée, le cwd, l'info système, le log de loading + les 100 dernières lignes de jeu, et le chemin exact du coredump OS (systemd-coredump sous Linux, ~/Library/Logs/DiagnosticReports/ sous macOS, %LOCALAPPDATA%\CrashDumps\ sous Windows) avec les liens pour les inspecter.
  • Rescan parallèle -- Pipeline par-table (match → install médias → extraction backglass → write DB → push UI) en parallèle sur num_cpus workers. Chaque table est auto-suffisante : le même worker écrit medias/bg.png et le relit, pas de race FS cross-thread.
  • 🔄 Auto-update robuste -- La nouvelle instance retry le PID lock 5 s pendant que l'ancienne finit de quitter (avant ça échouait silencieusement sur race).

⌨️ Outils en ligne de commande

  • pinready --print-paths -- Chemins résolus DB / log / ini / tables / binaire VPX.
  • pinready --list-tables -- Une ligne par dossier de table détecté (scriptable).
  • pinready --merge-dry-run TABLES VPINMAME PUPVIDEOS MUSIC [--strategy copy|move|symlink] -- Aperçu headless de l'import legacy.
  • pinready --merge ... [--yes] -- Même chose en mode commit.
  • pinready --reset-wizard -- Réamorce le wizard pour le prochain lancement.
  • pinready --config -- Force le lancement du wizard.

🎯 Cible

  • 🎰 Visual Pinball 10.8.1 -- Utilise le format dossier-par-table
  • 💻 Multiplateforme -- Linux, macOS, Windows. SDL3 uniquement, aucune API spécifique à une plateforme
  • 📦 Aucune dépendance système -- SDL3 et SQLite sont liés statiquement

📥 Téléchargement

Téléchargez la dernière version pour votre plateforme -- pas d'installation, il suffit de lancer :

👉 Télécharger PinReady (Linux, macOS, Windows)

📹 Démo vidéo — playlist YouTube (FR + EN)

🔨 Compilation depuis les sources

Si vous préférez compiler vous-même :

🐧 Linux :

sudo apt install build-essential cmake pkg-config \
libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxkbcommon-dev libssl-dev
cargo build --release

🍎 macOS / 🪟 Windows :

cargo build --release

SDL3 et SQLite se compilent depuis les sources automatiquement -- aucune installation manuelle nécessaire. ✅

🚀 Utilisation

Premier lancement (pas de base de données existante) : lance l'assistant de configuration. Lancements suivants : accès direct au lanceur de tables. L'assistant peut être relancé à tout moment.

# Lancer avec les logs de debug
RUST_LOG=info cargo run
# Ou lancer directement le binaire release
./target/release/pinready

📋 Prérequis :

  • 🎰 Visual Pinball exécutable (10.8.1+) -- installé automatiquement ou chemin configuré dans l'assistant
  • 📁 Répertoire de tables -- format dossier-par-table tel que décrit dans la doc VPX
  • 🌐 Connexion internet -- nécessaire pour l'installation automatique et la vérification des mises à jour (optionnel pour l'installation manuelle)

📂 Emplacements des fichiers (résolus automatiquement via les conventions OS — vous n'avez pas à créer ces dossiers vous-même) :

QuoiLinuxmacOSWindows
VPinballX.ini (PinReady lit/écrit)~/.local/share/VPinballX/10.8/VPinballX.ini~/Library/Application Support/VPinballX/10.8/VPinballX.ini%APPDATA%\VPinballX\10.8\VPinballX.ini
BDD + log PinReady~/.local/share/pinready/~/Library/Application Support/pinready/%APPDATA%\pinready\
Config DOF (décompresser le zip VPUniverse ici)~/.local/share/VPinballX/10.8/directoutputconfig/~/Library/Application Support/VPinballX/10.8/directoutputconfig/%APPDATA%\VPinballX\10.8\directoutputconfig\

🎮 Contrôles du lanceur :

Action🖱️ Souris⌨️ Clavier🕹️ Joystick
Table précédente/suivanteSurvolFlèche Gauche/DroiteFlipper Gauche/Droit
Ligne précédente/suivante--Flèche Haut/BasMagnaSave Gauche/Droit
Saut d'un viewportFlick molettePageUp/PageDown--
Première/dernière table--Home/End--
Scroll visuel (sans changer la sélection)Molette----
Lancer une tableClicEntréeStart
Ouvrir la config----Launch Ball
Quitter le lanceur--ÉchapExitGame

📺 Disposition multi-écran du lanceur :

ÉcransPlayfieldBackglassDMDTopper
1Grille tables------
2Grille tables (plein écran)Aperçu backglass de la table survolée----
3Logo VPX (cover)Aperçu backglass de la table survoléeGrille tables (plein écran)--
4Logo VPX (cover)Aperçu backglass de la table survoléeGrille tables (plein écran)Logo VPX (cover)

Au lancement d'une table, tous les viewports de couverture sont masqués pour laisser VPX prendre le contrôle des écrans.

🕹️ Contrôleurs pinball supportés :

PinReady détecte automatiquement les contrôleurs pinball et applique le mapping par défaut. Le profil est modifiable dans l'assistant.

KL25Z (KL Shield V5.1 / Brain / Rig Master) — 21 boutons
BtnSérigraphieAction VPX
0STARTStart
1EXTRA-BExtraBall
2COIN1Credit1
3COIN2Credit2
4L BALLLaunchBall
5EXITExitGame
6QUIT(éditeur VP)
7L FLIPPLeftFlipper + LeftStagedFlipper
8R FLIPPRightFlipper + RightStagedFlipper
9L MAGNALeftMagna
10R MAGNARightMagna
11FIRELockbar
12TILTTilt
13DOORCoinDoor
14SERVICE EXITService1
15SERVICE -Service2
16SERVICE +Service3
17ENTERService4
18N.M.(Night Mode)
19VOL-VolumeDown
20VOL+VolumeUp
Pinscape Pico (OpenPinballDevice) — 27 boutons
BtnFonctionAction VPX
0StartStart
1ExitExitGame
2Extra BallExtraBall
3–6Coin 1–4Credit1–4
7Launch BallLaunchBall
8FireLockbar
9Flipper GaucheLeftFlipper
10Flipper DroitRightFlipper
11Upper Flipper GaucheLeftStagedFlipper
12Upper Flipper DroitRightStagedFlipper
13MagnaSave GaucheLeftMagna
14MagnaSave DroitRightMagna
15Tilt BobTilt
16Slam TiltSlamTilt
17Porte monnayeurCoinDoor
18–21Service 1–4Service1–4
22Nudge GaucheLeftNudge
23Nudge CentreCenterNudge
24Nudge DroitRightNudge
25Volume +VolumeUp
26Volume −VolumeDown
DudesCab (Arnoz) — 32 boutons
BtnLabelAction VPX
0StartStart
1ExtraBallExtraBall
2Coin1Credit1
3Coin2Credit2
4LaunchBallLaunchBall
5ReturnExitGame
6Exit(Quit éditeur)
7Flipper LeftLeftFlipper + LeftStagedFlipper
8Flipper RightRightFlipper + RightStagedFlipper
9Magna LeftLeftMagna
10Magna RightRightMagna
11TiltTilt
12FireLockbar
13DoorCoinDoor
14–17ROM Exit/−/+/EnterService1–4
18VOL −VolumeDown
19VOL +VolumeUp
20–23DPAD(Navigation hat)
24NightMode(NE PAS REMAPPER)
25–30Spare 1–6(Libre)
31Calib(NE PAS REMAPPER)

🧩 Préparation des tables

Certaines tables demandent un peu de préparation pour bien fonctionner sous VPX Standalone 10.8.1. Étapes optionnelles, mais bon à savoir :

🔧 Patcher les anciennes tables pour VPX Standalone

Certaines tables anciennes utilisent des particularités VBScript qui ne se comportent pas à l'identique sous le moteur de script de VPX Standalone. Le dépôt communautaire jsm174/vpx-standalone-scripts fournit des scripts .vbs patchés pour des centaines de tables, à utiliser en sidecar.

Procédure :

  1. Trouvez le fichier .vbs correspondant au nom de votre table dans le dépôt
  2. Placez-le à côté de votre .vpx (même dossier, même nom de base)
  3. VPX Standalone utilise automatiquement le script sidecar à la place du script embarqué

⚙️ Réglages par table (ini personnalisé)

Les réglages globaux sont dans VPinballX.ini. Pour les surcharger pour une table donnée, deux options :

Option A — Ini sidecar (le plus simple, sans outil)

Déposez un .ini à côté de votre .vpx avec le même nom de base. VPX le prend automatiquement :

MaTable/
├── MaTable.vpx
└── MaTable.ini # surcharge le VPinballX.ini global pour cette table uniquement

N'incluez que les clés à surcharger — tout le reste retombe sur l'ini global.

Option B — Embarquer l'ini dans le .vpx (via vpxtool)

Si vous préférez garder les réglages dans le fichier de table lui-même, utilisez vpxtool — récupérez un binaire sur la dernière release (Linux, macOS, Windows) :

# 1. Extraire le .vpx sous forme de répertoire
vpxtool extract MaTable.vpx
# 2. Éditer MaTable/MaTable.ini avec vos surcharges# 3. Réassembler le .vpx avec l'ini embarqué
vpxtool assemble MaTable/

🎨 Bonus — réduire la taille des tables (conversion WebP)

Les tables VPX embarquent souvent des images BMP/PNG sans perte, volumineuses. vpxtool peut les convertir en WebP en une passe :

vpxtool images webp MaTable.vpx

Utile quand vous avez des dizaines de tables qui mangent de l'espace disque.


🏗️ Architecture

src/
main.rs Entry point, first-run detection, eframe launch
app/ Main App struct, page routing, wizard & launcher UI
screens.rs SDL3 display enumeration + role assignment
inputs.rs Input mapping with SDL3 event loop on dedicated thread
tilt.rs Tilt/nudge sensitivity configuration
audio.rs Audio device detection + routing + test sequences
assets.rs Backglass extraction from directb2s files
config.rs VPinballX.ini read/write (format-preserving)
db.rs SQLite catalog
updater.rs Visual Pinball release check, download, install

🧰 Stack

LayerCrateRole
🖼️ UIeframe + eguiImmediate mode GUI
🖥️ Display/Inputsdl3-sys (build-from-source-static)Screen enumeration, input capture
⚙️ Configini-preserveRead/write VPinballX.ini
🗄️ Databaserusqlite (bundled)Local table catalog
🖼️ Imagesimage + directb2sBackglass thumbnail extraction
🔊 AudiosymphoniaOGG/Vorbis decode for SDL3 playback
🌐 HTTPureqGitHub API + release download
📦 Archivezip + flate2 + tarRelease extraction
🌍 i18nrust-i18n + noto-fonts-dl20+ languages with font support

🔧 Visual Pinball fork management

The vpinball-fork.sh script manages a personal fork of vpinball/vpinball for building Visual Pinball. It keeps CI workflows set to manual dispatch so builds only run when you decide.

Releases created by this script are automatically detected by PinReady clients, which can download and install the correct build for their platform. 🎉

Prerequisites

  • gh CLI installed and authenticated (gh auth login)
  • jq installed (sudo apt install jq)
  • A fork of vpinball/vpinball on your GitHub account

Workflow

# 1. Sync fork with upstream + patch CI + trigger builds
./vpinball-fork.sh sync
# 2. Monitor build progress
./vpinball-fork.sh status
# 3. Test the build manually on your pincab# 4. When validated, create a GitHub Release (clients will auto-detect it)
./vpinball-fork.sh release

Commands

CommandAction
syncForce-reset fork to upstream HEAD, patch workflows to workflow_dispatch, trigger vpinball + vpinball-sbc builds
releaseWait for both builds to succeed, run prerelease workflow to create a GitHub Release, upload SBC artifacts
statusShow recent workflow runs and latest release info

📄 License

GPL-3.0-or-later

About

🎯 Cross-platform configurator and launcher for Visual Pinball — screen assignment, input mapping, audio routing, table browser. Built with Rust, egui and SDL3. 🕹️

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages