📘 User Guide

Everything you need to start training — from connecting your first sensor to uploading your finished ride.

🚴 Overview

Maximum Trainer is a free, open-source indoor cycling and rowing training application. It connects to smart trainers, power meters, heart rate monitors, and cadence sensors over Bluetooth LE (BLE), runs structured interval workouts in automatic ERG mode, and exports completed activities to the Garmin FIT format for upload to Strava, TrainingPeaks, and SelfLoops.

📡

BLE Sensors

Heart rate, power, cadence, speed, and muscle oxygen via standard BLE profiles.

ERG Mode

Automatic resistance control — just pedal at the right cadence and hit your target power.

📋

Workout Library

Sync structured workouts from Intervals.icu, plus import your own .erg / .mrc / .zwo files.

☁️

Activity Upload

Post-workout upload to Strava, TrainingPeaks, and SelfLoops — directly from the app.

This guide assumes Maximum Trainer is already installed on your computer. If you need installation instructions, see the README on GitHub.

🚀 First Launch & Login

On first launch, Maximum Trainer displays a login screen. You can create a local account or log in with an existing one. Your account stores your user profile (FTP, weight, heart rate zones) and links to third-party services such as Strava.

  1. Launch MaximumTrainer from your Start Menu, Applications folder, or desktop shortcut.
  2. On the login screen, enter your username and password, then click Login.
  3. If this is your first time, click Create Account and follow the on-screen prompts to set up a new local profile.
  4. After a successful login the Main Window opens, showing your workout library.
Tip: Your account data is stored locally on your computer. No internet connection is required to log in or train.

👤 User Profile & FTP

Maximum Trainer uses your Functional Threshold Power (FTP) and body weight to calculate training zones and relative power (W/kg). Setting these values correctly ensures ERG targets and zone boundaries are accurate.

  1. Open Preferences → Preferences & Profile from the menu bar (or the gear icon in the toolbar).
  2. Select the User Profile tab.
  3. Enter your FTP (in watts). If you don't know your FTP, a value of 200 W is a reasonable starting point.
  4. Enter your body weight (in kg).
  5. Adjust heart rate zones if desired (default zones are percentage-based on your max HR).
  6. Click Save.
Tip: After completing a ramp test or FTP test, remember to update your FTP in the profile so that all future workout targets and difficulty adjustments scale correctly.

📡 Connecting Your Sensors

Maximum Trainer communicates with cycling hardware over Bluetooth Low Energy (BLE). Before connecting, make sure your devices are awake and within range (typically 10 m).

Waking up your devices

DeviceHow to wake it
Smart trainerStart pedalling for a few seconds
Power meterStart pedalling
Heart rate strapMoisten the electrode contacts and put it on
Speed / cadence sensorSpin the crank or wheel
Moxy muscle-oxygen sensorPress the activation button or begin exercise

Pairing sensors in the app

  1. From the main window, open Preferences → Device Connections (or the Bluetooth icon in the toolbar).
  2. Click Scan / Add Devices. The BLE scanner lists every nearby Bluetooth LE device.
  3. Select the correct BLE profile for each device from the list below.
  4. Click Connect. A green indicator confirms the sensor is active.
  5. Repeat for additional sensors. You can pair multiple devices simultaneously (e.g. an FTMS smart trainer and a heart rate strap).
Profile BLE UUID Data provided ERG control
Fitness Machine (FTMS) 0x1826 Speed · Cadence · Power ✅ Yes — automatic resistance
Cycling Power 0x1818 Power (W) · L/R Balance ❌ No
Heart Rate Monitor 0x180D Heart rate (bpm) ❌ No
Cycling Speed & Cadence 0x1816 Speed (km/h) · Cadence (rpm) ❌ No
Moxy Muscle Oxygen 0xAAB0 SmO₂ (%) · tHb (g/dL) ❌ No
Important: Select the Fitness Machine (FTMS / 0x1826) profile for your smart trainer to enable automatic ERG resistance control. Choosing a plain Power or Speed profile disables ERG.
Linux users: If the scanner returns an empty list, make sure your user account is in the bluetooth group and the BlueZ daemon is running. See the Linux Bluetooth Setup section of the README.

🎮 Simulation Mode

If you have no Bluetooth hardware available — or simply want to preview a new workout — choose Simulation in the connection dialog. The built-in simulator generates realistic, gently drifting sensor values and responds to ERG load commands, giving you a full end-to-end test of the training logic without any physical devices.

  1. When the connection method dialog appears, select Simulation instead of BTLE Device.
  2. Choose a workout and press Start.
  3. The simulator immediately begins emitting data — no hardware required.
ChannelBase valueRange
Heart rate140 bpm125–165 bpm
Cadence90 rpm80–100 rpm
Speed28 km/h23–33 km/h
Power200 W170–260 W
Good to know: The simulator responds to ERG load commands. When an interval target changes, the simulated power output adjusts accordingly — letting you verify the full workout flow before your first real ride.

🔍 Finding Workouts

Main window — workout list with structured interval plans
Main window — workout library with the Intervals.icu calendar sync in the sidebar

Option A — Intervals.icu calendar sync

Maximum Trainer integrates directly with Intervals.icu — the popular free training platform — to pull your scheduled workouts into the app.

  1. Open Preferences → Cloud Sync and enter your Intervals.icu API key and Athlete ID.
  2. Click Intervals.icu in the left sidebar of the main window.
  3. Use Refresh to load your planned workouts for the current week.
  4. Select a workout and click Load Selected Workout to download it to your local library.
  5. The workout appears in your library list immediately, ready to start.
Tip: Find your API key at intervals.icu → Settings → API. An internet connection is required to sync with Intervals.icu. The WASM (web) version runs in offline mode only.

Option B — Browse existing library

Previously downloaded workouts are listed in the Workouts tab of the main window. Use the search/filter bar at the top to quickly find a specific session by name, duration, or workout type.

📂 Importing Workouts

If you already have workout files from another application (TrainerRoad, Zwift Companion, Intervals.icu, etc.), you can import them directly into Maximum Trainer.

Supported import formats

FormatExtensionSource applications
CyclingPeaks / TrainerRoad ERG.ergTrainerRoad, custom scripts
CyclingPeaks MRC.mrcTrainerRoad, PerfPro, various

Importing a single workout file

  1. Go to File → Import Workout in the menu bar.
  2. Navigate to your .erg or .mrc file and click Open.
  3. Maximum Trainer converts the file to its native XML format and adds it to your library.

Importing a folder of workout files

  1. Go to File → Import Course Folder.
  2. Select the folder containing your .erg / .mrc files.
  3. All compatible files in the folder are batch-imported at once.

✏️ Creating Custom Workouts

The built-in Workout Creator lets you design your own structured interval sessions — specify target power (as absolute watts or % FTP), cadence, or heart rate for every segment, add repeats, and save for immediate use.

Workout editor — build custom interval sessions
Workout Creator — designing a custom interval session with the graphical editor
  1. Click the pencil / Workout Creator icon in the toolbar (or go to File → New Workout).
  2. Enter a name, optional description, and workout type (cycling / rowing).
  3. Add intervals using the Add Interval button:
    • Set the duration (minutes:seconds).
    • Set the target — Power (W or % FTP), Cadence (rpm), or Heart Rate (bpm).
    • Choose Ramp if the power should smoothly transition from the previous segment.
  4. Use Add Repeat Block to wrap a set of intervals in a repeat loop (e.g. 4 × 4 min at 105 % FTP).
  5. Drag rows in the interval table to reorder segments.
  6. The graphical preview at the top updates in real time as you add and edit intervals.
  7. Click Save. The workout is added to your library immediately.
Tip: Click an existing workout in your library and then open the Workout Creator — it will load the selected workout for editing. Click Save as New to keep the original intact.

⚙️ ERG vs Slope Mode

Maximum Trainer supports two resistance modes when connected to a smart trainer. Understanding the difference is key to getting the most out of your sessions.

Mode How it works Best for
ERG The app continuously adjusts trainer resistance so your actual power output matches the interval target. You only need to control cadence. Structured interval workouts with power targets
Slope / Manual The app sends a constant simulated incline (grade %) to the trainer. Resistance increases naturally with speed, just like riding a hill outdoors. Free-riding, ramp tests, courses, race simulations
Note: The workout player switches to Slope mode automatically when the current interval has no power target, or when you press the Increase / Decrease Difficulty buttons to temporarily override ERG.

ERG tips

  • Maintain a smooth, consistent cadence (85–95 rpm is typical). Abrupt cadence changes cause the trainer to momentarily over- or under-correct resistance.
  • When a new interval starts, give the trainer 5–10 seconds to settle at the new target.
  • If a target feels too hard or too easy, use Adjust Difficulty (±5 % FTP per press) to scale the entire session without stopping.

▶️ The Workout Player

Active ERG workout — live power graph and real-time sensor metrics
Workout Player — real-time power graph and live sensor metrics during an active ERG session

The workout player is the central screen during a training session. It combines a real-time power graph, live sensor metrics, interval information, and playback controls all in one view.

Display elements

ElementDescription
Interval graphColoured target-power band with your live wattage overlaid as a line. Each zone has a distinct colour matching standard training zones.
Interval countdownTime remaining in the current interval, displayed prominently at the top.
Workout timeTotal elapsed time and total remaining time for the full session.
PowerLive power output in watts from your trainer or power meter.
Heart rateLive beats per minute from your HR strap, colour-coded by zone.
CadenceLive pedalling cadence in rpm.
SpeedLive speed in km/h.
L/R BalanceLeft/right power split (%) — only shown when a dual-sided power meter is connected.
SmO₂ / tHbMuscle oxygen saturation and total haemoglobin — only shown when a Moxy sensor is connected.
CaloriesEstimated kilojoules / kcal burned, calculated from power data.

🎛️ During a Workout

Starting a workout

  1. Select a workout in the main window and click Start Workout (or double-click the workout).
  2. Choose your connection method: BTLE Device (real hardware) or Simulation.
  3. The workout player opens and begins the pre-ride countdown.
  4. Start pedalling — the ERG controller begins adjusting resistance immediately.

Playback controls

ControlAction
Pause / ResumeTemporarily pauses the workout timer and sets trainer load to 0 W. Press again to resume.
Skip IntervalImmediately jumps to the next interval in the sequence.
+ DifficultyIncreases all remaining interval targets by 5 % of your FTP (stacks).
− DifficultyDecreases all remaining interval targets by 5 % of your FTP (stacks).
LapMarks a manual lap in the recorded data (useful for free-ride segments).
Stop / FinishEnds the session and opens the post-workout save screen.

Settings during a workout

Press the gear icon within the workout player to open the in-workout settings panel. From here you can adjust display options — which metrics are visible, timer size, font size — without interrupting the session.

Internet radio

Maximum Trainer includes a built-in internet radio player. Open the settings panel during a workout and navigate to the Radio tab to add a stream URL and adjust volume. Radio plays in the background alongside workout audio cues.

Video player

On desktop builds with VLC-Qt installed, you can open a local video file (training footage, virtual rides) to play alongside your workout. Use Settings → Video in the workout player to select a file.

Reconnection: If your BLE device disconnects mid-workout (e.g. low battery), Maximum Trainer automatically attempts to reconnect every 5 seconds, up to 3 times. A notification appears while reconnecting. The workout timer continues so you don't lose data — simply wait a moment and the connection will restore.

💾 Saving Your Activity

When you press Stop / Finish (or the workout ends naturally), the post-workout screen appears.

Activity history — ride log with power data and upload options
Activity history — saved rides with power data, TSS, and Strava / TrainingPeaks upload buttons
  1. Review the activity summary — total time, average and normalised power, average HR, TSS, and interval breakdown.
  2. Edit the activity name if desired (defaults to the workout name + date).
  3. Click Save to write the activity as a .fit file to your configured history folder.
Where are my files? By default, activity files are saved to your system's Documents folder under MaximumTrainer / History. You can change the history folder in Preferences → Folders.

If you choose Discard instead, the raw data is deleted and no file is written. This cannot be undone.

☁️ Uploading to Strava & More

Maximum Trainer can upload completed activities directly to third-party platforms from the post-workout screen — no need to open a web browser or manually transfer files.

Supported platforms

🟠

Strava

Authenticate once via OAuth. Activities appear on your Strava feed automatically after uploading.

📊

TrainingPeaks

Link your TrainingPeaks account for seamless TSS, ATL/CTL tracking integration.

📈

SelfLoops

Upload to the SelfLoops analytics platform for advanced power and performance metrics.

Linking a platform (one-time setup)

  1. Open Preferences → Preferences & Profile.
  2. Select the Connections tab.
  3. Click Connect to Strava (or TrainingPeaks / SelfLoops).
  4. A browser window opens for you to authorise Maximum Trainer. Log in and click Authorise.
  5. Return to Maximum Trainer — the platform now shows as linked with a green tick.

Uploading after a workout

  1. On the post-workout summary screen, click the Upload to Strava (or other platform) button.
  2. Maximum Trainer uploads the .fit file. A confirmation message appears when the upload completes.
Manual upload: You can also upload any saved .fit file from your activity history. Open the History tab in the main window, right-click an activity, and choose Upload.

⚙️ Settings

Open Preferences → Preferences & Profile from the menu bar to access the full settings dialog. Settings are organised into tabs.

Settings dialog — BLE sensor pairing and user profile configuration
Settings dialog — user profile, display options, sensor pairing, and third-party connections
TabWhat you can configure
User Profile FTP (W), body weight (kg), max heart rate, heart rate zones, display name
Display Which metric widgets are visible during workouts (power, HR, cadence, speed, balance, SmO₂, calories), timer style, font size
Trainer Trainer make/model and power curve calibration (for trainers without native FTMS power reporting)
Folders Workout library folder, activity history folder, course file folder
Connections Link/unlink Strava, TrainingPeaks, SelfLoops accounts
Radio Add, edit, and reorder internet radio station URLs
Language Switch the UI language (requires a restart)

🏟️ Studio Mode

Studio Mode allows multiple riders to train simultaneously on a single installation — perfect for spinning studios and group training sessions. Each rider has their own BLE device slot and individual metrics display.

Studio mode — multiple riders training simultaneously
Studio Mode — six riders training simultaneously, each with their own metrics panel

Enabling Studio Mode

  1. Open Preferences → Preferences & Profile.
  2. On the Studio tab, toggle Enable Studio Mode.
  3. Set the number of riders (up to the maximum supported by your hardware).
  4. For each rider, configure their name, FTP, and assign a BLE device.
  5. Click Save. The main window now shows a rider panel for each participant.
Note: In Studio Mode, each rider's power data is recorded separately in the session .fit file. Workout targets are scaled per-rider based on individual FTP values.

🏆 Achievements

Maximum Trainer awards achievements automatically at the end of a workout based on your performance data. Achievements recognise milestones such as personal power records, streak completions, and training volume targets.

After saving an activity, any newly unlocked achievements are displayed on the post-workout screen. You can review all earned achievements at any time in the History tab of the main window.

Motivation tip: Achievements are evaluated against your full activity history, so every completed workout counts — even if you don't hit the power targets perfectly.

💡 Tips & Shortcuts

Useful keyboard shortcuts (during a workout)

KeyAction
SpacePause / Resume workout
Skip to next interval
+Increase difficulty (+5 % FTP)
Decrease difficulty (−5 % FTP)
LMark a lap
EscStop workout (confirmation dialog appears)

General tips

  • Warm up your trainer before calibrating or doing a serious workout. Most direct-drive trainers need 10–15 minutes of easy riding at 100–150 W to reach operating temperature and produce accurate power readings.
  • Use simulation mode to preview new workouts and verify that the interval structure is what you expect before committing to the real effort.
  • Adjust difficulty on the fly — if a workout is designed at 100 % FTP and you're having a bad day, knock it down by 1–2 presses (−5–10 %) rather than stopping. You'll still get a training benefit and keep the streak alive.
  • Set accurate FTP and weight. Incorrect values shift all zone boundaries and make ERG targets too easy or too hard. Update your FTP after every test or ramp test.
  • Check for updates regularly via Help → Check for Updates in the menu bar. New trainer profiles and BLE improvements are shipped frequently.

Troubleshooting

ProblemSolution
Sensor not appearing in BLE scanner Wake the device (pedal / moisten HR strap), bring it closer, and click Rescan. On Linux, ensure the bluetooth group membership and BlueZ daemon are correct.
ERG resistance not changing Ensure the trainer is connected with the FTMS (0x1826) profile, not a plain Power profile. A plain Power profile provides data but does not accept load commands.
Power readings seem inaccurate Spin-down / calibrate the trainer from its own app, then reconnect in Maximum Trainer. If your trainer uses a built-in power curve, verify the correct model is selected in Preferences → Trainer.
App won't connect after a BLE disconnect Maximum Trainer retries automatically (up to 3 times, 5-second intervals). If reconnection fails, toggle Bluetooth off/on in your OS and click Reconnect in the notification bar.
Upload to Strava fails Re-link your Strava account in Preferences → Connections. OAuth tokens expire; re-linking refreshes them.
Need more help? Visit the Community Discussions on GitHub, or open an issue if you believe you've found a bug.