I just developed a custom running workout generator

Hi I tried again with imperial units and my conclusion for now is: zwift only allows for intervalls as a multiple of 200m.

My 299.99867873999995 m which I entered as 0.186411 miles on your site were converted to 200m. i guess >=300 is rounded up to 400 and <300 is converted to 200. I have no other explanation at this point :slight_smile:

Thanks again for your work :+1:

Wow!
Thanks for the awesome bit of troubleshooting-- And now that you mention it, I do recall reading something about multiples of 200M (from a long time ago, I think).
Do you think I should code some kind of warning message into the web-site? Or do you think it would be better to just round up/down (ā€œquantiizeā€ those interval distances?))
Running for exact times is gonna be difficult when intervals of 200M are required.
Bummer.
Thanks Again-- You Rock
P.S. Here’s a feature request from 2018

And here’s a snippet from Zwift Insider-- they discuss the 200M limitation…

Hi, I think a message would be nice. With just metric a warning message would probably suffice, but as Zwift seems to base everything in metric, inputs in imperial which will then be rounded based on 200m, now that’s probably a nightmare :slight_smile:

Maybe something like up and down arrows next to the input field so one could jump to the next valid value? Or only the possibility to enter the value in front of the ā€.ā€œ ? So for example for 7.6 km you could enter 7 and had to use the arrows to dial in the 6.

I guess that would be preferable as a user than to find out that your value was rounded and you had to open the Intervall again in the editor.
And it could be done with imperial as well as metric.

Cheers.

Brillant! thank you so much for building this. I have seen other ones before this but they didn’t have the repeat feature. One request though: I know that you cannot do by time, only distance, but I do like your workaround (converting time to distance in the background). you implemented this workaround in the ā€œsteady stateā€ but not in the ā€œintervalā€. any reason why? for example I was trying to do 10x 30"30".
Thank you!

Yeah, agreed that the Workout Generator is awesome.
However, everything on Strava and every other analysis app that I use has my information as time and pace rather than speed/MPH, etc.

So I agree that it would be great to ā€œback inā€ to the distance from a desired Time value for all of the components, not just Steady State. Either way, a terrific utility.

Hi. I created my first custom workout, and for whatever reason I’m running into some numeric problems. Not sure if it’s something I’m doing or a shortcoming of the generator. Sorry for the lengthy description, but not sure I can get my point across in a few seconds.

To my incredible annoyance, I get a ā€œyou can’t embedā€ message if I try to paste images, download images, or add links to images. So, sorry for the text-only description.

I set my 1 mile pace in Zwift and Zwift WC to 10:00 so that it’s easy to do the math on the distance calculations that follow.

As an example of the problem, I started off by adding a Warmup activity at 60% throughout.
I wanted to warm up with 5 minutes of walking, so I did 0.3 miles @ 60%. This translated to 3.6 mph, which is correct.

In the resulting ZWO file it translated to the following:

SteadyState Power=ā€œ0.6ā€ Duration=ā€œ482.80199999999996ā€ pace=ā€œ0ā€

I then added the ZWO file to my Zwift workouts directory on my PC.
However, despite having the same 10:00 1-mile pace, the numbers are different in the Zwift version of the workout.

For the same warmup interval that was 0.3 miles @ 3.6mph in the tool, it has become 0.25 miles @ 3.6 mph. This problem repeats itself with some of the workout components and not with others, but it disrupts the workout enough that I’m not sure what’s going on.

Any idea what I’m doing wrong? Or is this some kind of quirk in the tool?
And, happy to provide screenshots if someone can tell me how to do this without getting that blasted error!

Sadly, nothing is wrong, the smallest increment which Zwift allows is 200m. And then it just allows multiples of 200m. Everything inbetween gets rounded up or down.

It’s an insane concept and really mind boggling. I have no clue what they are thinking. Time based workouts are already implemented for some workouts by Zwift. So there is almost no implementation required to turn Zwift running into a useful running platform.

Yet today they release some halloween stuff…

1 Like

Thanks for letting me know.

That is a truly asinine implementation strategy on the part of Zwift.

1 Like

Hi everyone
@Chris_Hanger, i desperately try to connect an ESP32 to Zwift using BLE
is there a way to contact you directly to have some help please?

Best regards

1 Like

I will be on your way soon Paul!

Hi Sebastian
Did you managed to do it?
We can discuss on facebrook group Zwift Coders if you want

Paul I don“t have an ESP32 yet, I am just doing tests with an ESP8266 as pulse generator simulating the sensor on my TM. Then with another ESP and interrupts I am measuring it and displaying values on different kinds of displays.

On the other hand my TM has a commercial /industrial inverter, that can be controlled with dry contacts or RS485. I suppose I will go for RS485 option, I am doing just some testing on it straigh from a PC.

To put it simple I am just learning a bit.I will go to Zwift coders now…

This is brilliant work!! The metric units is great, the workaround for the duration feature for steady state and interval is fantastic.

Hello guys, I enjoy running on Zwift on a semi-smart treadmill (not compatible) at gym using a zwift runpod and my phone or tablet, and it’s so fun!

One thing I benefit a lot are quality workouts, because I have full control of the rythm on every repetition and I can do it on May Field if I want, or go wild and explore outside.

But what would be ideal is to create my own workouts, as I’d do outside with a smartwatch, programming alerts on every training milestone to concentrate on finish repetitions without having to worry about the distance I’ve done, but the workout generator seems to be down… Any alternatives?

Thanks!

https://www.zwiftworkout.com/

This any good?

You never said what band of treadmill you have at the gym.

For example, I have Technogym at my gym, which you can create your own work on.

I’ve used it before, and it’s fine, but over time, I find a plain text editor faster and more versatile. No workout generator is smart enough -that’s why I wish Zwift would let you edit their workouts.

Fantastic tool, thanks!

I’ve read somewhere about the training file syntax, I’ll start making my trainings with the tool, and when I’ve had plenty of them, I’ll explore the plain-text syntax.

Thank you all for your answers and have fun!

You could just use chat gpt an tell it what you want. I was curious an asked if it knew the .zwo format and it asked straight away if I needed help to create a file. I told it to :

ā€žPlease create a running workout: 5 min @ 70% 5k time, the repeat 5 times 2 min @ 105% 5k time / 2 min @ 85% 5 k timeā€œ

And it produced:

<workout_file>
5K Pace Interval Workout
Warm-up followed by 5 rounds of 2 min hard / 2 min moderate intervals
running

<workout>
    <!-- Warm-up: 5 min @ 70% 5K pace -->
    <SteadyState duration="300" pace="0.70"/>
    
    <!-- 5 Intervals of 2 min @ 105% 5K pace / 2 min @ 85% 5K pace -->
    <Repeat count="5">
        <SteadyState duration="120" pace="1.05"/>
        <SteadyState duration="120" pace="0.85"/>
    </Repeat>
</workout>

</workout_file>

As far as I know that is not correct (5k pace missing) so after some prodding chat gpt admitted:

ā€žYou’re absolutely right! In Zwift .zwo files, the pace attribute is used to define pace relative to a specific race distanceā€œ

Then it used the wrong values for pace but finally I got:

<workout_file>
5K Pace Interval Workout
Workout based on 5K pace: 5 min @ 70% 5K pace, then 5 rounds of 2 min @ 105% 5K pace / 2 min @ 85% 5K pace.
running

<workout>
    <!-- Warm-up: 5 min @ 70% 5K pace -->
    <SteadyState duration="300" Power="0.70" pace="1"/>

    <!-- 5 Intervals of 2 min @ 105% 5K pace / 2 min @ 85% 5K pace -->
    <Repeat count="5">
        <SteadyState duration="120" Power="1.05" pace="1"/>
        <SteadyState duration="120" Power="0.85" pace="1"/>
    </Repeat>
</workout>

</workout_file>

This looks right to me, but it has been ages since I wrote a xml for Zwift by hand. But you could give it a try telling ChatGPT what kind of workout you want. You should arrive there eventually.