How it works

Convert indoor bike files to TCX for Strava, Garmin Connect, TrainingPeaks, and Golden Cheetah. Repair speed and distance.

What is a TCX file?

TCX is Garmin's workout format: a second-by-second log of power, heart rate, cadence, speed, and distance. Strava, Garmin Connect, TrainingPeaks, and Golden Cheetah all read it.

Strava and Garmin want TCX. Many indoor bikes export CSV (or other formats) instead. upload.bike reads those files and saves a TCX they accept.

Supported equipment

Schwinn MPower Echelon Stages Indoor Cycles The Sufferfest Wahoo SYSTM TrainerRoad NordicTrack PRO-FORM iFit

Also accepts .fit and .tcx files from Garmin devices, MyWhoosh, Zwift, Apple Watch, or any app that records power data. Drop one in to fix bad speed/distance or re-export as a clean TCX.

Missing your bike? Send a sample file to upload.bike@gmail.com. If it has power, cadence, heart rate, and distance, support is usually straightforward.

Repair speed and distance

Many indoor bikes don't measure speed and distance. They estimate it from wheel RPM or resistance, and that estimate can be well off, so your ride lands on Strava with the wrong distance, speed, and calories.

This option ignores the bike's figures and recomputes them from your power and combined rider + bike weight, using the forces that act on a real bike:

Each second, it solves for the speed your power supports at that moment. Distance accumulates from there.

You can also use this to fix workouts that already exported as TCX or FIT. Drop the file in, enable Repair speed and distance, and set your combined weight. Power, cadence, and heart rate stay as recorded; speed and distance are rebuilt from power, then saved as a clean TCX for Strava, Garmin Connect, or TrainingPeaks.

A real example

The chart below is a 73-minute ride on a Schwinn MPower Echelon 2. The bike logged 21.5 miles; the physics model puts it at 23.8, about 11% higher. The reported top speed is 78 mph, which no one produces on a trainer. The model caps it at 32 mph, the figure the power actually supports. Reported speed that jumps around like this usually means the console is inferring distance from cadence rather than measuring it.

Drag the mass slider to see how rider weight changes the result.

Rider + bike mass:

Loading sample data...

Bike reported
Physics model
Difference

Repair timing

Some bikes log a point every 3, 5, or 10 seconds. The bike's screen doesn't care, but Strava and Garmin Connect expect one point per second. Those gaps can skew your duration, leave holes in the charts, break segment matching, or fail the import.

Repair timing (on by default) resamples the data to one point per second using linear interpolation. It never overshoots the source min/max or invents spikes: power and cadence are clamped at zero or above, heart rate dropouts are forward-filled, and distance stays monotonic. Any remaining whipsaws come from the source data, not the resampling.

Getting your file

Schwinn MPower Echelon

  1. Insert a USB thumb drive into the slot at the top of the console
  2. Do your workout, then stop pedalling
  3. Press and hold AVG/MAX for 5 seconds
  4. Wait for the flashing USB logo to stop, then remove the drive
  5. The drive holds a file named something like MPower12.csv

Video: exporting rider data to a USB drive

USB drive problems? Some Schwinn consoles reject newer thumb drives. A 1GB drive usually works. If the USB logo won't flash or the console shuts off, try a smaller drive.

Stages Indoor Cycles

  1. From the console, open the ride summary or history
  2. Insert a USB drive and select the export option
  3. The file saves with a name like STAGES01.csv

Video: Stages SIC1 console quick start

The Sufferfest and Wahoo SYSTM

Both export CSV under workout history or activity settings.

TrainerRoad

Activity files end in .txt. On the computer where TrainerRoad is installed they live in your WorkoutRecords folder (with names such as dca6f8c2-3171-40ad-9e17-1b6a89898af2.txt).

MyWhoosh

MyWhoosh exports FIT files. On Windows they live in your local AppData directory:

%LocalAppData%\Packages\MyWhooshTechnologyService.MyWhoosh_eps1123pz0kt0\LocalCache\Local\MyWhoosh\Content\Data

Converting and uploading

Convert

  1. Open upload.bike and choose your workout file
  2. Repair timing is on by default
  3. Turn on Repair speed and distance if the distance looks off, then enter your combined rider + bike weight
  4. Download the TCX

Upload

FAQ

How do I convert a CSV file to TCX?

Open upload.bike and drop your CSV workout file in the converter. The tool detects your bike model, repairs timing and distance as needed, then Download TCX saves a Garmin TCX file you can upload to Strava, Garmin Connect, TrainingPeaks, or Golden Cheetah.

How do I convert a TrainerRoad TXT file to TCX?

TrainerRoad activity files end in .txt and live in the WorkoutRecords folder on the computer where TrainerRoad is installed. Drop the .txt file into upload.bike, and it parses it automatically: the TSV rows are converted to Garmin TCX for Strava or Garmin Connect.

Why is my distance different after conversion?

Many indoor bikes estimate distance from wheel RPM or resistance, which can be off by 10% or more. The physics model recalculates distance from your actual power output, rider mass, and physical constants, so the number is more realistic.

What if my bike isn't in the supported list?

Missing your bike? Send a sample file to upload.bike@gmail.com. If it has power, cadence, heart rate, and distance, support is usually straightforward.

Is my data sent to a server?

No. All conversion runs in your browser via WebAssembly. Your data never leaves your device.

Why does the physics model need my weight?

Mass affects speed for a given power output. A heavier rider goes slower at the same wattage on flat ground. The model uses combined rider + bike mass to solve the equations of motion.

What formats are supported?

File types: .csv, .txt, .fit, and .tcx. Supported equipment: • Schwinn MPower Echelon (3 variants) • Stages Indoor Cycles (metric and English, with or without headers) • The Sufferfest • Wahoo SYSTM • TrainerRoad • NordicTrack • PRO-FORM iFit Missing your bike? Send a sample file to upload.bike@gmail.com.

Why does Strava show a different time than my bike console?

Some bikes record every 3 or 5 seconds instead of every second. Repair timing resamples to 1-second intervals so the duration matches what fitness platforms expect.

The USB export didn't work on my Schwinn bike. What do I do?

Some consoles crash with newer USB thumb drives. A 1GB drive works best. If the USB logo fails to flash or the unit shuts off during export, try an older, smaller drive.

Troubleshooting

File won't load

Bikes and firmware versions export files differently. If yours won't load, email it to upload.bike@gmail.com and it can usually be added.

Distance looks wrong in Strava

Turn on Repair speed and distance and enter your weight to replace the bike's guess with a value derived from your power. See the physics section above.

Convert your file