This package targets your Windows computer and Dynastream ANT USB-m stick (USB ID 0fcf:1009). It includes the ride app with 165 courses across 30 cities: 20 Reykjavík courses and five mapped courses in each of 29 more cities. USB hardware pairing has not been tested on your computer.
.venv folder. No dependency download is needed. Internet access is needed for online map tiles and, if missing, the initial Python download.http://127.0.0.1:8765/?ant=1. Open this address in Chrome or Edge if a different default browser opens. Click Connect ANT+ if it has not connected automatically.You can also open the hosted WorldRide Virtual app and click Connect ANT+ while the companion is running. Chrome or Edge may ask to access your local network; allow it for this app. If that connection is blocked, use the locally opened app, which is served by the companion itself.
Virtual ride speed always uses measured power, rider height/weight and route gradient. Cadence and heart rate are recorded when available. Bike speed is optional and never drives virtual speed. Resistance stays manual. Routes repeat until you finish, and Lap marks intervals.
Choose a city, save favourite routes or import your own GPX. Reykjavík includes 20 courses. Paris, London, Copenhagen, Amsterdam and Berlin each include five preloaded courses. Search the catalogue by city or route name and filter by length. Only cities with courses are offered. Live worldwide generation is deferred; imports remain available.
A zero ID in bridge-config.json pairs each profile to the first matching nearby transmitter. For a home setup with multiple sensors, replace zero with the correct ID displayed in the ANT+ panel, then restart the companion. Profiles can come from different devices; verify IDs before recording. Use the IC8 console’s documented wheel-equivalent circumference if you want its reported speed to match. Change wheel_mm in the configuration and restart.
companion.log or use Download ANT+ report in the app. Check the adapter in Device Manager. Driver changes should only target the ANT stick.python bridge.py --port 8766 and use the locally opened app at that address.Profile parsing, revolution rollover, sentinel values, duplicate-event handling, bridge response format, origin restrictions, browser integration, background timing and stale-data handling, and FIT generation were checked using synthetic data. Real USB access, IC8 pairing, Windows launcher execution, and physical sensor values still need a test on your PC.
The simplified model uses the gravity, rolling resistance, aerodynamic drag and inertia approach described by Martin et al. (1998), Validation of a Mathematical Model for Road Cycling Power. Assumptions: no wind or drafting, 10 kg bike, air density 1.225 kg/m³, drag area 0.32 m² at 175 cm height, scaled with height squared, rolling coefficient 0.004, 97% drivetrain efficiency. Uphill and downhill results are simulation estimates; height-based drag scaling is a simple app-specific estimate.
The companion binds only to this computer (127.0.0.1). It accepts read requests from its local page and the exact hosted app origin. It does not send control commands to the bike, expose your computer to your LAN, or upload workouts automatically. Map tiles load from OpenStreetMap. Sessions and imported routes remain in this browser until you export them. The local and hosted pages have separate browser storage, so finish and export in the same page where you began.
OpenANT (MIT), PyUSB, libusb-package, and importlib_resources are installed from PyPI. Their licenses remain in the installed packages. ANT+ parsing is a best-effort implementation, not an ANT+ certification. This is a Python companion package, not a compiled Windows executable.