Competition & AI Tech Update: December 2022

Hey Zwifters!

Welcome back to another edition of our Competition & AI Tech update. This one will cover the progress we have made for the month of December.

This update will be a bit lighter in content compared to the previous ones due to the holiday season and giving folks some well-deserved time off.

The goal is to provide insight as to what we are working on surrounding competition and what’s on deck in the coming months.

The post will cover these sections:

  • What can you expect in the next release?
  • What is Zwift working on now?
  • What is the status of feedback the community provided?

As always, we welcome your feedback on this post! To make sure we capture it all in this moment in time, we will be auto-closing the post 7 days from the original post date.

Let’s get into it!

What can you expect from the next release?

Zwift game version 1.33 will have some great improvements from teams across Zwift. If all goes well, you should be able to begin recording and riding against your HoloReplay for entire routes in addition to segments. You should also have some UI updates for HoloReplay. We’ll have much more for you with Zwift version 1.33, so you’ll have to keep your eyes peeled for those release notes when they’re live for all the detail.

What is Zwift working on now?

Scoring: As has been said before, this project is built on a large technical foundation that will afford us freedom in the future to make changes quickly during testing and in response to community feedback.We have made some progress over the holiday and are rapidly approaching the ability to begin testing in events.

At a high level, the goals of adding scoring to racing are:

  • Create a race environment that rewards Zwifters that race smartly and to the best of their ability by scoring their results, no matter where you finish on the day
  • Give Zwifters a system of categorization or ranking that is not determined purely by power
  • Help make racing more easily understood and more exciting for more Zwifters

We are presently looking at multiple scoring/ranking options to identify strong contenders for what we feel would best create a fun, engaging, and fair racing experience. Community feedback will also play a part in helping us make the choices as we keep progressing on scoring your race results. We have also scheduled work to examine the benefits of compound score to compliment our scoring/ranking structure in the future. If you’re curious what compound score is or does, you can read all the details at this source. The simple high level explanation is that compound score will be used with the express purpose of seeding Zwifters into an initial score or rank when no racing data exists for a given Zwifter for any reason.

Like we mentioned in the November update, we will have posts in the coming weeks with more detail on scoring, so stay tuned!

Category Enforcement: Following discussion and input from our community, we have implemented detailed power data on the Zwifter profile. You can now see your power data on your profile on Check out this post for more information.

We are currently working on the Zwift Companion implementation with some additional tweaks, which should also be implemented on shortly thereafter. For example, Zwift Companion version will include a critical power graph in its first implementation. Currently, you will be able to see what your current values for zFTP, Critical Power, and zMAP are as well as your recommended minimum category based on that data.

For technical reasons, we have no plans to put this information in ZwiftPower or to make ZwiftPower use the same calculations to determine category, and this is unlikely to change. We will continue implementing more changes in the near future based on feedback from the original launch post (linked above) and elsewhere.

HoloReplay: We are in the final testing and polish steps to allow Zwifters to ride against their HoloReplays for entire routes (excluding event only routes or worlds). You will still be able to ride against your segments as before, and you’ll now also have the additional option to ride against your HoloReplay on full routes. For those keeping score at home, that means you can have up to 4 HoloReplays active at once depending on your choice of settings. Go go gadget Replays!

With this HoloReplay improvement, you will also see a number of quality of life improvements for the user interface to give you more easily identifiable information about your HoloReplay spawn during your ride.

Competitive Experiences - Pack Dynamics V4: Following Zwift game version 1.32’s release, we have implemented and continue to test Pack Dynamics V4 based on community feedback. Because we’re aiming to capture a “feeling” rather than just turn a couple dials, we will continue testing until we feel we have reached a satisfactory state. in a similar fashion. If you want to read or contribute feedback, our current test thread can be found at this link.

Competitive Experiences - Dynamic Watts Display: With version 1.33, we’ll be testing a new quality of life change with select groups of Zwfiters. This change will show Zwifter’s raw watts on the Zwifters Nearby List when riding on flatter roads and will then change to W/Kg on climbs or descents. The goal is to make it more intuitive to understand how hard the group is going on flatter roads.

What is the status of feedback the community provided?

  • Backlog : It’s on our radar and some work has been done
  • Discovery : Early in the development process
  • In Progress : It’s actively being worked on
  • Done : Released

Improving Fairness in Competition

  • Category Enforcement: implement UI on the Zwifter profile on to show what the current power thresholds are - Done :white_check_mark:
  • Category Enforcement: allow in-game pause and post ride screens to use same power curve data as CE - Done :white_check_mark:
  • Category Enforcement: implement UI on the Zwifter profile in Zwift Companion to show what the current power thresholds are - In Progress
  • Scoring & Categorization: test and determine various scoring or ranking methodologies - In Progress
  • Scoring & Categorization: allow race results to have a score - In Progress
  • Scoring & Categorization: allow Zwifters to participate in test events and give feedback - In Discovery
  • Scoring & Categorization: allow scored results to influence overall ranking progression - In Discovery
  • Scoring & Categorization: use compound score to seed Zwifter rank - In Discovery

AI Tech

  • HoloReplay: implement recording, data retention, and data playback for entire routes - In Progress (will release with 1.33 barring no major issues)
  • HoloReplay - UI improvements: show at the start and end of a segment when a HoloReplay will spawn/despawn - In Progress (will release with 1.33 barring no major issues)
  • HoloReplay - UI improvements: add more information to minimap - In Progress (will release with 1.33 barring no major issues)
  • HoloReplay - UI improvements: add more information to segment leaderboards - In Progress (will release with 1.33 barring no major issues)
  • HoloReplay - Visual improvements: spawn a HoloReplay to wait for the Zwifter at the start of a segment - In Progress (will release with 1.33 barring no major issues)
  • HoloReplay: allow Zwifters to ride against one another’s Replay - In Discovery
  • HoloReplay: Zwift Companion UI component - In Discovery
  • RoboPacers: Implement a handcycle Pacer - In Discovery

Competitive Experiences

  • Pack Dynamics V4 - In Progress
  • Dynamic Watts Display - In Discovery


A note for bugs: this update is from a limited perspective, and will not always be representative of everything affecting events, segment results, etc. These bodies of work focus most directly on competitive events, RoboPacers, and the future of competition at Zwift.

  • RoboPacers: Zwifters could sometimes not follow the Pacer on drop in - Done :white_check_mark:
  • RoboPacers: Zwifters could sometimes not join the Pacer on drop in - Done :white_check_mark:
  • Team Time Trials: Zwifter behavior is erratic in pens - Done :white_check_mark:
  • Event join: joining an event while experiencing pedal assist effects could cause issues - Done :white_check_mark:
  • RoboPacers: drops multiplier stuck at 2x instead of 2.5x - Done :white_check_mark:
  • Category Enforcement: UI text issues on event join - Done :white_check_mark:
  • HoloReplay: Replays will sometimes spawn at the start line of segment in events - In Progress

Thanks @xflintx

Always nice to read these posts.

Won’t it be easier to show both power and w/kg.

I don’t think w/kg should be displayed on downhills raw power is the driver downhill therefore it should be pure watts


It might be technically easy to show both watts and w/kg, but the riders nearby list is already pretty crammed full of information (as is a lot of the HUD). It could be useful to show both, or just raw watts on downhill, etc.

We’ll pay close attention to the feedback during testing in the next couple weeks and see what we can change.

1 Like

That is what I thought would be the problem. I really like this idea since it will move the focus away from w/kg is the only important metric.

Can’t wait to start testing. :sunglasses:

1 Like

Fitness or Cat Enforcement Stats -
Looking at my own values in Golden Cheetah vs the Zwift Fitness ones I was able to “reverse engineer” my Z numbers, by pointing my mouse at the “correct” time on the CP graph.

To mimic in Golden Cheetah (Activities) on the CP tab
Basic: Set the date range to 2 months, also have Power & Activity Mean Max as settings
Model: Extended CP (this is a 5 point sample on my graph)

zFTP is CP40 ie the watts at 40min on the model line.
VO2max is calculated from your CP20 watts, not the 5min actual or CP 5 model line, so will be lower.
zMAP is the 6min actual value.

Main thing is that it’s consistant, it’s not important to me that my VO2max is lower in zwift.
Each method and app will have a different take, look at an outdoor ride’s distance in 2 or more apps and answer the question “how far did I ride” as each app has it’s own answer !

Critical Power is way better then classic FTP, a 4DP test will get you your best CP model.
Seen FTP to mean best 20min power, 95% of best 20min, 40min power, 25mile/ 40km TT power.

Edit: seems I can’t spell Enforcement :slight_smile:

Agreed. As a lighter rider, I usually have to push HARD on descents to stay in the draft, so seeing pure watts instead of w/kg would be useful!

1 Like

I’ve seen this somewhere before, can’t quite put my finger on it…


Are you familiar with the reports of inaccuracy in this feature change? I can’t gauge the veracity of the complaints but they might be worth investigating to see if something is not working as expected.

Also, if the CP folder is no longer used to manage personal best data, this documentation needs to be updated:

Yes, James, it’s from the work done on


Thanks for the updates a couple points,

The rider list I think the first ask on this is going to be to allow it to be user configurable. With the popularity of sauce it’s clear that users like to customise their HUD so i fully expect a few complaints if you change things and force people to see numbers they don’t want.

On the scoring CE subject if ZP is not going to be in scope of updates can you share any more details on the plan to upgrade/replace zp given it’s the scoring system that 99% of races users it seems odd that CE updates continuing to get over looked

i have this bug and as far as i can tell it’s purely visual… the random numbers displayed on zwift don’t correlate with my CE numbers. currently it says my best 20 min is 296w… a number i’ve never come within 20w of hitting in my life. it also added another 20w onto my 1min the other day. i wish

1 Like

Very cool. So the months and months of work wasn’t in vain then? :sweat_smile:


Is raw power the driver? I’d have thought weight played a big part, so in any case showing W/kg or W won’t really give much useful information will it?

It could alternate between Watts and W/kg once per second perhaps.

Alternatively, in a race or group ride, I think the distance riders next to me have covered is irrelevant. Given we all start together, they’ll have completed the same distance I have, give or take a few metres due to different lines taken by the game.

So perhaps in races and group rides the distance could be replaced by Watts.

It doesn’t solve it for Pace Partner groups, admittedly, but I don’t really care how far people have ridden (unless it’s impressively long, anyway).

1 Like

This info does become important if the race/ride has multiple laps, though. If you were racing a crit with 10 laps, you wouldn’t want to mistake someone you’d lapped as being someone you were still in competition with!


Power is the driver on a downhill a lot more significant than weight. On the TTT down the Alpe a 90kg rider freewheeling could not make up 1second over the first 10 turns (halfway) against 2 riders free wheeling weighing 20kg less.

Riders at different weight will decent at about the same speed in a bunch when no power is applied. But if the riders apply power then the rider that produce the most power will go the fastest down the hill. So a rider of 100kg at 200w will show 2w/kg but the 50kg rider doing 2w/kg will only do 100w if the 50kg rider want to keep up with the 100kg rider he need to know that the 100kg rider is doing 200w so that he can also do 200w.

Good point, but I think there would be another way it could be shown. People not on the same lap could be greyed out or have a some other indication of that.


This doesn’t really match my experience as far as I recall. I’m sure I’ve seen myself catch people, and pull away from people without pedalling. Maybe I’m mistaken; I’ll have to pay more attention.

I know the gradient gets halved on a descent, so weight won’t be as big a difference as it would be in real life.

@xflintx This is now a problem as it pulls lifetime data from zwifts servers. Mine now includes corrupt data from when my trainer overread to 2000w for 10 seconds. Also my entire curve is from an OG kickr that read high. Finally now I’m 50 I won’t be setting any lifetime PBs so my CP is useless now. I’ve raised it with support before Christmas and been punted around. Told to delete the local file. Reinstall zwift etc. it seems support have no clue that the data now comes from zwifts servers.

I’ve bodged it for now by c breaking some code in the exe file so it now uses the local file again.

In short I would say this is not DONE but should be in progress. Really it needs a toggle for lifetime / season / 60 days.