Workout builder

Is it possible to sync these workouts to zwift or training peaks?

Unfortunately not automatically.

Hey David,
Is there any way to upload/import more than one Workout file (erg/zwo/mrc/etc) at a time?
It would be great to be able to bulk import these files to use in plans!

I have started working on this. Should be done by Friday.

2 Likes

Awesome David!!!

Done:

5 Likes

Hi guys,

Is there a file format and an APP that supports HR targets workouts like if you were using your Garmin?
I can create HR based workouts using Intervals but as far I know it’s meant only for Garmin use.
I would like to run it using my desktop and/or phone and videos, charts, etc the same way we do with power.
The ones I use, Rouvy and Golden Cheetah, doesn’t support it.

tks,

ps: the reason behind is Polarized HR based training.

I was looking for an easy way to import Zwift workouts into the workout builder and could not find one – suggestions welcome;-)

As a quick solution I copied the workout description in the left sidebar of ‘What’s on Zwift’ into a file and run a Python script – please send me a personal message if you are interested in the code: Apparently “preformatted text” does not really work that well here, likely because of the quotes in the code, and I don’t see a code-block option;-)

Could something like this be build into the workout builder as a copy-n-paste importer or similar?
Or what’s the appropriate way of doing this?

Hi @david

Would you be able to add “distance” in addition to Duration under Workout Builder > Add Step ? This would be very useful for running workouts, many of them are based on distance (x * 100m, x * 400m, etc.)

Many thanks in advance!

Martial

4 Likes

You can use the “Import” button at the bottom of the dialog. You can also bulk import zwo, mrc and erg files into a folder in your training library:

@Martial_Pottier I have distance for workouts on the todo list. It has been much requested.

Hi @David , thanks for the feedback. I wasn’t clear:-o
There don’t generally seem to be zwo files available for download for the Zwift workouts… Thus, what I get is a copy-and-paste version of the web info on whatsonzwift:

10min from 40 to 70% FTP
1x 3min @ 95rpm, 80% FTP,
1min @ 65rpm, 105% FTP
1min @ 85rpm, 65% FTP
1x 3min @ 100rpm, 80% FTP,
1min @ 65rpm, 105% FTP
1min @ 85rpm, 65% FTP
1x 3min @ 70rpm, 80% FTP,
1min @ 100rpm, 105% FTP
1min @ 85rpm, 65% FTP
1x 3min @ 95rpm, 80% FTP,
1min @ 65rpm, 105% FTP
2min @ 85rpm, 65% FTP
4min @ 95rpm, 90% FTP
4min @ 85rpm, 80% FTP
4min @ 75rpm, 70% FTP
4min @ 75rpm, 90% FTP
4min @ 85rpm, 80% FTP
4min @ 95rpm, 70% FTP
12min from 90 to 60% FTP
2min @ 65rpm, 75% FTP
1min @ 65rpm, 75% FTP
2min @ 95rpm, 75% FTP
1min @ 65rpm, 75% FTP
2min @ 65rpm, 75% FTP
6x 1min @ 100rpm, 75% FTP,
1min @ 60rpm, 75% FTP
3min @ 50% FTP

I’ll post the (short) Python code that I use to convert that to an i.icu-format specification when I am home tonight, but the easiest was, obviously, if I could paste this into an i.icu dialog and get the appropriate workout specs in i.icu;-)
The “trickiest” thing is the ‘,’ at end of line as a continuation symbol;-)

Where are you cut and pasting from on whatsonzwift? I just had a look there and couldn’t find any text representation of the workout.

It’s this left “sidebar” – from this whatsonzwift page:


Btw., if you/i.icu could actually directly parse these website that would be cool;-))

1 Like

And this code will parse it into i.icu-compatible text

#!/usr/bin/env python
# -*- coding: utf-8; fill-column: 120; truncate-lines: t -*-

import re
import sys


def convert(zwift):
    icu = ""
    multiplier = False

    # expand multiplied lines
    for line in zwift:
        if re.match('^[1-9]+[xX] .*,\\s*\\Z', line):
            icu += '\n' + line[:3] + '\n'
            icu += '- ' + line[3:]
            multiplier = True
        elif re.match('^[1-9]+[xX]', line):
            icu += '\n' + line[:3] + '\n'
            icu += '- ' + line[3:]
            multiplier = False
        elif multiplier == True:
            icu += '- ' + line + '\n'
            multiplier = False
        else:
            icu += '- ' + line

    # replace words and fix grammar
    icu = icu.replace('min', 'm').replace('sec', 's') \
            .replace('from', 'ramp').replace(' to ', '-') \
            .replace('FTP', '').replace(',', '').replace('@', '').replace('\n+', '\n') + '\n'
    icu = re.sub('([0-9]+m) ([0-9]+s)', '\\1\\2', icu)

    return icu



if __name__ == '__main__':
    with open(sys.argv[1], 'rt') as zwift:
        print(convert(zwift))
3 Likes

http://cubingtest.byethost9.com/Other/CyclingCalculator.html

12 Likes

Max_Nelson : thank you !!! this literaly mades my day

Thats very cool, tx for publishing it!

Hey @Max_Nelson , nice for the community to put this up!

Then, it doesn’t really help me;-) Using Emacs & my Python code above gets me the i.icu text much faster than even opening yet another website – thus I would hope that @David will still eventually add an “WoZ importer/converter” to the workout builder of i.icu;-) That would be an real improvement (for me)

2 Likes

It’s fabulous. Brilliant you. Thank you.

2 Likes

@david playing around w/ the builder. Noticed something strange.

for the last interval. I wanted to change it from 4m47s to 4m but noticed something interesting, when putting 4m00s instead of 4m, looks like it interpreted it differently, it considered it as not part of the 3x interval.

Nothing serious, just thot I’ll share