BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
翻訳待ち
Free, open-source smart trainer app: ERG workouts, real-road courses, open world, ride history, Garmin/Strava/TrainingPeaks/intervals.icu sync
翻訳待ち
Loading the full README.
Read the full README ↗A free, open-source smart-trainer app.
Just Watts connects to any Bluetooth FTMS smart trainer and heart rate strap, runs your workouts in ERG mode or lets you ride free by grade, watts or resistance level, and keeps your history: NP, TSS, zones, intervals, trends. It runs on your own computer, with no account and no API keys. The trainer connection lives in a small local server, so reloading or closing the browser never drops the trainer or the ride.
Try it in the browser, no install: justwatts.com (Chrome or Edge, Web Bluetooth; rides stay in the browser, no uploads). The local app below adds Garmin and Strava upload and a trainer connection that survives closing the tab.
Needs Python 3.10+ and a computer with Bluetooth LE. Any modern browser works for the page.
git clone https://github.com/yaportmax/justwatts
cd justwatts
pip install -e .
justwatts serve
Open http://127.0.0.1:8765, press Connect trainer,
pick it from the scan list. The server remembers it and reconnects by itself. A trainer accepts one
controller at a time: close Zwift or any other app using it first. start.cmd (Windows) or
./start.sh (macOS, Linux) starts the server and opens the browser.
No trainer? justwatts simulate starts a workout on the server's fake trainer; watch it in the page.
10m 45-75%, 5x(3m 115%, 3m 50%), 10m free),
.zwo import and export, an FTP ramp test.app/roads/marin, app/world) so a ride never waits on a server.web/api/_lib/social.js), no extra service. Visibility can be switched
off in Settings. The local app has no accounts, so none of this shows there.Common actions sit on the ride screen; the rest are in Adjust. Each change shows what changed, and intensity, watts, segment time, length, trainer mode and settings can be undone for 15 s.
| Control | Where | Key |
|---|---|---|
| Pause, resume (Pause during an auto-pause stays paused) | bar | Space |
| Intensity ±1 % (grade, watts or level when not in ERG) | bar −/+ | ↑ ↓ (Shift ±5) |
| Back (restart segment; in its first 10 s, the previous one), Skip | bar | ← → |
| Segment time ±1 min (±30 s in Adjust) | bar | [ ] |
| Segment watts ±5/±10 | Adjust | - = |
| Intensity presets, reset to 100 % | Adjust | |
| Workout length ±5 min | Adjust | |
| Trainer: ERG, or ERG off by grade or level (the plan keeps showing) | Adjust | 1 2 3 |
| Edit the plan from the current segment | Adjust | |
| After the plan: hold the last target or ride flat | Adjust | |
| Cadence on/off and range (off: no readout, target or cues), beeps | Adjust | |
| Map style (Map, Satellite, Topo, Cycling), 3D terrain, map or chart focus (courses with a route) | map | F |
| Open world: the way at the junction ahead (shown about 200 m before it) | tap | ← ↑ → |
| Open world: U-turn (ride back the way you came) | bar, junction prompt | ↓ |
| Open world: go to another spot, the ride goes on | bar (Spots) | P |
| Full screen | bar | Shift F |
| Undo, Save, End (two taps) | bar | Z, S |
| Reconnect trainer or HR | header |
This is the beginning of the README. Read the rest at the original. Read the full README ↗