Tag Archives: tcx

TCX-Tools: Convert Nike+ Files, Work With GPS and Heart Rate Data from TCX Files.

Photo by darkmatter/flickr.

I recently started using Endomondo to keep track of my workouts. Endomondo can get data from the Endomondo smartphone apps, but it also has good support for importing data from Garmin devices (including my Garmin Forerunner 610) and it supports importing tcx files generated by other sites/apps as well. However, there was a few things that annoyed me a little bit.

  • I could not import my old foot-pod workouts from Nike+.
  • Endomondo will only display the heart rate graph if the workout has associated GPS information. This means that I cannot see the heart rate graph for my indoor workouts, and that’s just dumb.
  • Sometimes I will walk or run with my wife and we will follow the same route. If she wears the Forerunner the associated heart rate information will not apply to me, although the gps trace itself is perfectly valid.
I decided to scratch my itch and develop some simple open source tools that can help me with the above issues. The result is TCX-Tools. which is a suite of very rudimentary tools that perform helpful operations on TCX files, the popular Garmin file format for fitness information.
  • nike+totcx Converts XML Files with iPod foot-pod data from Nike+
    to TCX files.
  • tcx-add-gps-coordinate Adds a GPS coordinate to an existing TCX
    file without location information.
  • tcx-strip-heart-rate Removes heart rate information from an
    existing TCX file.

Be aware: This is a very basic collection of XSL Transformations and some trivial tools to run them. There are probably multiple bugs and there is no fancy GUI or anything like that. It is also completely untested on anything but Ubuntu 11.10, but I am hopeful that it works on most OS’s, even if the scripts themselves won’t run :). Please let me know if/when you find any issues with any of the tools and I’ll try and fix them.

Endomondo heart rate
Endomondo heart rate graph with no speed information.


TCX-Tools is hosted on github. These directions assume  you are working with a GNU/Linux (or possibly Mac) system. The tools are based on XSL Transformations which should work in any os if you have the right tools. First clone the tcx-tools repository

$ git clone https://thomasmoelhave@github.com/thomasmoelhave/tcx-tools.git
$ cd tcx-tools 

You will need to install Saxon, on Ubuntu this can be done like this:

$ sudo aptitude install libsaxon-java 

To use nike+totcx to convert Nike+ XML files to TCX files you also
need to download the EXSLT template:

$ wget http://www.exslt.org/date/functions/add/date.add.template.xsl 


The nike+totcx tool is an xsl document that can be used to convert
information from a standard Nike+ foot-pod system paired with an iPod
to the TCX files supported by Endomondo and Garmin Connect (and many

Getting the data

Mount your iPod and find the directory containing the .xml files for
the individual workouts. On my iPod the workouts are stored in the

 /media/<ipod name>/iPod_Control/Device/Trainer/Workouts/ 

It is also possible to get the xml files of past runs from the Nike+
website, but it involves some trickery.


$ ./nike+totcx <input xml file> <output tcx file> 


As explained above this tool adds a single GPS coordinate (lat,long)
to the tcx file. Doing this will coerce Endomondo to display the heart
rate graph that it otherwise wouldn’t display.


$ ./tcx-add-gps-coordinate <input tcx file> <output tcx file> <lat> <long> 


If you have been out exercising with a companion that used a gps and
heart rate monitoring device, you may want to import the GPS trace but
not the heart rate information into your own account (on Endomondo,
Garmin Connect or other tool). This tool strips the heart rate (and
calorie) information from the supplied tcx file, but keeps everything


$ ./tcx-strip-heart-rate <input tcx file> <output tcx file>