Have you ever been frustrated by any WYSIWYG workout editor, such as the Zwift Workout editor and the TrainingPeaks Workout Builder?
ZWOG makes it easier to generate structured workouts using a syntax similar to the one used on What's on Zwift?.
Install the latest stable version from PyPI
$ pip install zwog
Install the version from the main branch
$ pip install git+https://github.com/tare/zwog.git
The basic building blocks are ramp intervals
10min from 30 to 60% FTP
and steady state intervals
2hrs 10min @ 60% FTP
Interval durations can be given in seconds (sec
,s
), minutes (min
,m
), and hours (hrs
,h
).
Moreover, it is possible to create repeated intervals
4x 5min @ 95% FTP, 5min @ 85% FTP
Finally, a complete workout can be defined as follows
10min from 40 to 85% FTP
3x 5min @ 95% FTP, 5min @ 86% FTP
5min @ 50% FTP
3x 5min @ 95% FTP, 5min @ 86% FTP
10min from 75 to 55% FTP
The parser is rather robust when it comes to newlines and other whitespaces.
You can use the command line application
$ zwog --help
usage: zwog [-h] -i INPUT_FILE [-o OUTPUT_FILE] [-a AUTHOR] [-n NAME]
[-c CATEGORY] [-s SUBCATEGORY] [-v]
Zwift workout generator
optional arguments:
-h, --help show this help message and exit
-i INPUT_FILE, --input_file INPUT_FILE
input filename
-o OUTPUT_FILE, --output_file OUTPUT_FILE
output filename
-a AUTHOR, --author AUTHOR
author name
-n NAME, --name NAME workout name
-c CATEGORY, --category CATEGORY
category
-s SUBCATEGORY, --subcategory SUBCATEGORY
subcategory
-v, --version show program's version number and exit
or call it from Python
import zwog
workout_text = "15min from 10 to 50% FTP 5min from 50 to 70% FTP 2x 0.5hrs @ 100% FTP, 0.5hrs @ 50% FTP, 10min from 80 to 90% FTP 2min @ 50% FTP\n2min @ 50% FTP\n 10min @ 50% FTP, 10min @ 60% FTP 10min from 50 to 10% FTP"
workout = zwog.ZWOG(workout_text)
workout.save_zwo('workout.xml')
print(workout)
print(f"{round(workout.tss)} TSS")
- Only the ZWO file format is supported currently
- Workout files have to be uploaded manually to Zwift