Strava "Virtual" Ride?

675 views
Skip to first unread message

Andrew Codrington

unread,
Dec 4, 2022, 4:31:25 PM12/4/22
to golden-cheetah-users
My GoldenCheetah setup continues to work really well, including uploads/sync with Strava. I'm using Dev releases of 3.6.

I'm wondering if it's also possible to configure my Strava uploads so that the rides show as 'Virtual' on Strava?

Strava doesn't let me manually edit activities to say they are Virtual. Is this a flag that can only be set by Strava partners like Zwift and TrainerRoad?

Dashboard___Strava.png

Ale Martinez

unread,
Dec 5, 2022, 10:56:15 AM12/5/22
to golden-cheetah-users
I don't know, may be setting the activity type to VirtualRide could do the trick, but I have not tested this.
Currently we are setting activity type as Ride and setting the Trainer flag when the activity was generated by GC Train. 

Ale Martinez

unread,
Dec 5, 2022, 3:16:16 PM12/5/22
to golden-cheetah-users
El lunes, 5 de diciembre de 2022 a la(s) 12:56:15 UTC-3, Ale Martinez escribió:
El domingo, 4 de diciembre de 2022 a la(s) 18:31:25 UTC-3, andrew.c...@fidenti.ca escribió:
My GoldenCheetah setup continues to work really well, including uploads/sync with Strava. I'm using Dev releases of 3.6.

I'm wondering if it's also possible to configure my Strava uploads so that the rides show as 'Virtual' on Strava?

Strava doesn't let me manually edit activities to say they are Virtual. Is this a flag that can only be set by Strava partners like Zwift and TrainerRoad?

Dashboard___Strava.png

I don't know, may be setting the activity type to VirtualRide could do the trick, but I have not tested this.

Andrew Codrington

unread,
Dec 5, 2022, 10:31:51 PM12/5/22
to golden-cheetah-users
Wow! Thanks for looking into that. 
I’ll watch for that commit in a snapshot Mac build and try it out. 

Andrew Codrington

unread,
Dec 17, 2022, 4:03:45 PM12/17/22
to golden-cheetah-users
I've got the Dec 12 developer build. I can enter VirtualRide as the Sport under activity Details. I also manually clicked 'Trainer'.

However when I sync to Strava it still shows as a Ride.

Is there another place I need to adjust settings?

I looked under the UI for Athlete Settings Accounts and looked in the Strava account settings but didn't see anything obvious.

Thanks for any hints.

Cheers,
Andrew 

Ale Martinez

unread,
Dec 17, 2022, 6:02:21 PM12/17/22
to golden-cheetah-users
El sábado, 17 de diciembre de 2022 a la(s) 18:03:45 UTC-3, andrew.c...@fidenti.ca escribió:
I've got the Dec 12 developer build. I can enter VirtualRide as the Sport under activity Details. I also manually clicked 'Trainer'.

However when I sync to Strava it still shows as a Ride.

Is there another place I need to adjust settings?

No, activities generated by GC Train containing GPS data are automatically uploaded as VirtualRides, these are what we call simulation rides, and the distinction is to avoid confusion with real rides in the same spot.

Andrew Codrington

unread,
Dec 26, 2022, 1:15:55 PM12/26/22
to golden-cheetah-users
Thanks. That makes sense to me now.  Including GPS info with my virtual rides synced to Strava would be 'fun' but not critical for me. I've made a few attempts with no success so far. 

Is there a known good GPS fileset I can test with?

I did get an example videosync file with gps info working a while ago, but can't remember which combination of files worked now. All the combinations I've tried today result in a spinning beach ball and I have to Force Quit GC on my Mac. I'm probably doing a million things wrong - would it still be useful to capture and submit any error reporting or log info?

The example fileset I downloaded is Otto_Hofmeisterhaus. When I scan for workouts/videos/etc the fileset is detected as gpx, pgmf, tts, and _EP.gpx under Workouts as well as an avi under Media, and rlv, tts under Videosync.

GoldenCheetah Train - videosync tts gpx.jpg

Ale Martinez

unread,
Dec 26, 2022, 2:35:42 PM12/26/22
to golden-cheetah-users
My recommendation is to read the wiki: FAQs on Train, Charts for Train and Train Sidebar entries will likely answer most of your questions. Searching the forum also can help.

Andrew Codrington

unread,
Jan 4, 2023, 4:21:05 PM1/4/23
to golden-cheetah-users
Thanks Ale. I had searched/read the sites for a couple hours before posting without figuring out what I was doing wrong.

I spent a couple more hours reading and then decided to take a step back and try with something simpler. I created a route in Strava, exported it to gpx, then imported it as a simulation workout.

Everything worked as expected during the training session and the activity synced to Strava. It did not, however, show up flagged as a 'Virtual' ride in my feed:

Strava - Road to Tuk - feed view doesn't indicate virtual.jpg
If I edit the activity and click 'Indoor Cycling' it suppresses the map view in my feed, which is different from the 'virtual' label on a map that I see on others Zwift rides. I didn't expect that would help, but tried it to be sure.

Strava - Road to Tuk - edit activity and select Indoor.jpg

Strava - Zwift virtual ride.jpg



On Monday, December 26, 2022 at 2:35:42 PM UTC-5 Ale Martinez wrote:
My recommendation is to read the wiki: FAQs on Train, Charts for Train and Train Sidebar entries will likely answer most of your questions. Searching the forum also can help.

El lunes, 26 de diciembre de 2022 a la(s) 15:15:55 UTC-3, andrew.c.escribió:
Thanks. That makes sense to me now.  Including GPS info with my virtual rides synced to Strava would be 'fun' but not critical for me. I've made a few attempts with no success so far. 

Is there a known good GPS fileset I can test with?

I did get an example videosync file with gps info working a while ago, but can't remember which combination of files worked now. All the combinations I've tried today result in a spinning beach ball and I have to Force Quit GC on my Mac. I'm probably doing a million things wrong - would it still be useful to capture and submit any error reporting or log info?

The example fileset I downloaded is Otto_Hofmeisterhaus. When I scan for workouts/videos/etc the fileset is detected as gpx, pgmf, tts, and _EP.gpx under Workouts as well as an avi under Media, and rlv, tts under Videosync.

GoldenCheetah Train - videosync tts gpx.jpg

On Saturday, December 17, 2022 at 6:02:21 PM UTC-5 Ale Martinez wrote:

Ale Martinez

unread,
Jan 4, 2023, 4:47:48 PM1/4/23
to golden-cheetah-users
El miércoles, 4 de enero de 2023 a la(s) 18:21:05 UTC-3, andrew.c...@fidenti.ca escribió:
Thanks Ale. I had searched/read the sites for a couple hours before posting without figuring out what I was doing wrong.

I spent a couple more hours reading and then decided to take a step back and try with something simpler. I created a route in Strava, exported it to gpx, then imported it as a simulation workout.

Everything worked as expected during the training session and the activity synced to Strava. It did not, however, show up flagged as a 'Virtual' ride in my feed:

Strava - Road to Tuk - feed view doesn't indicate virtual.jpg
If I edit the activity and click 'Indoor Cycling' it suppresses the map view in my feed, which is different from the 'virtual' label on a map that I see on others Zwift rides. I didn't expect that would help, but tried it to be sure.

Strava - Road to Tuk - edit activity and select Indoor.jpg

Strava - Zwift virtual ride.jpg

When lat/lon and TRAIN XData are present we send VirtualRide instead of Ride as Sport, it looks like this in my Strava Tests:

StravaVittualRide.jpg

I have no idea why they don't put the "Virtual" on the map and, honestly, I couldn't care less.

Andrew Codrington

unread,
Jan 4, 2023, 6:30:59 PM1/4/23
to golden-cheetah-users
The 'Virtual' label I'm expecting is in the feed view, not the activity view.
My activity on Strava is just a 'Ride' not 'Virtual Ride' as you get. Something's wrong with my activity data that isn't triggering GC to send it as a VirtualRide.
I'll keep trying to figure it out.

Ale Martinez

unread,
Jan 4, 2023, 6:53:42 PM1/4/23
to golden-cheetah-users
El miércoles, 4 de enero de 2023 a la(s) 20:30:59 UTC-3, andrew.c...@fidenti.ca escribió:
The 'Virtual' label I'm expecting is in the feed view, not the activity view.
My activity on Strava is just a 'Ride' not 'Virtual Ride' as you get. Something's wrong with my activity data that isn't triggering GC to send it as a VirtualRide.

Try letting the Sport field in GC blank, just as Train generates the activity. My guess is, if you set Sport="Bike", that goes into the uploaded GPX file and overrides the activity type. 

Andrew Codrington

unread,
Jan 5, 2023, 1:35:38 PM1/5/23
to golden-cheetah-users
To be sure I don't have something odd in my regular Athlete config I created a new Athlete ("CleanTest") and did a train session with the robot.
When I synced the activity to Strava it did not show as a 'Virtual Ride', so behaviour is the same as with my regular Athlete.
I've pasted in some details below, but I think my next step is to perform a clean install of GC.

The 'Sport' field appears to be blank in the Activity data within the UI:
CleanTest.png

I opened the activity JSON file. The first line says "RIDE". Is that where it should show "VirtualRide" if things are correctly configured?

{
    "RIDE":{
        "STARTTIME":"2023\/01\/05 18:08:02 UTC ",
        "RECINTSECS":1,
        "DEVICETYPE":"GoldenCheetah ",
        "IDENTIFIER":" ",
        "TAGS":{
            "Athlete":"CleanTest ",
            "Data":"TDSPHC-AGL---O- ",
            "Device":"GoldenCheetah ",
            "File Format":"GoldenCheetah CSV (csv) ",
            "Filename":"2023_01_05_13_08_02.json ",
            "Month":"January ",
            "Route":"Inuvik to Tuk ",
            "Source Filename":"2023_01_05_13_08_02_Inuvik to Tuk_2023_01_05_13_08_02.csv ",
            "Weekday":"Thu ",
            "Year":"2023 "
        },
        "INTERVALS":[
            { "NAME":"1 ", "START": 0, "STOP": 64, "COLOR":"#000000", "PTEST":"false" }
        ],
        "SAMPLES":[
            { "SECS":0, "KM":0, "WATTS":88, "CAD":85, "KPH":1.22538, "HR":143, "ALT":24.239055213, "LAT":68.360359728, "LON":-133.72083042, "SLOPE":0, "SMO2":37, "THB":11.51 },
            { "SECS":1, "KM":0.000858297, "WATTS":109, "CAD":89, "KPH":5.05272, "HR":143, "ALT":24.215601591, "LAT":68.360353026, "LON":-133.72084083, "SLOPE":-2.73258, "SMO2":46, "THB":11.88 },
            { "SECS":2, "KM":0.00273526, "WATTS":88, "CAD":83, "KPH":8.02039, "HR":145, "ALT":24.162824966, "LAT":68.36033833, "LON":-133.72086358, "SLOPE":-2.81181, "SMO2":49, "THB":11.62 },
            { "SECS":3, "KM":0.0051379, "WATTS":97, "CAD":88, "KPH":10.1377, "HR":144, "ALT":24.092571986, "LAT":68.360319447, "LON":-133.72089264, "SLOPE":-2.92399, "SMO2":51, "THB":11.02 },
            { "SECS":4, "KM":0.00824958, "WATTS":86, "CAD":84, "KPH":12.1648, "HR":145, "ALT":23.997769462, "LAT":68.360294889, "LON":-133.72093022, "SLOPE":-3.04667, "SMO2":50, "THB":11.62 },
<deleted many rows>
        ],
        "XDATA":[
        {
            "NAME" : "TRAIN",
            "VALUE" : "TARGET",
            "UNIT" : "Watts",
            "SAMPLES" : [
                { "SECS":1, "KM":3.49227e-05, "VALUE":100 },
                { "SECS":2, "KM":0.00089322, "VALUE":100 },
                { "SECS":3, "KM":0.00277018, "VALUE":100 },
                { "SECS":4, "KM":0.00517282, "VALUE":100 },
...



Andrew Codrington

unread,
Jan 5, 2023, 1:40:15 PM1/5/23
to golden-cheetah-users
Also, in case it's relevant here is what my Options | Data Fields | Fields looks like:

Preferences.png

Andrew Codrington

unread,
Jan 6, 2023, 9:39:10 AM1/6/23
to golden-cheetah-users
I did a complete reinstall using the Dec 28 snapshot build and did a training session using the same GPX file as before.
The activity synced to Strava and shows up there as a Ride instead of the expected Virtual Ride. I don't have any more ideas to try and troubleshoot.

I'm quite happy I did the clean reinstall though. The default ("out of the box") views/charts/perspectives etc are much nicer now. I was impressed before at how much better GC had become in 3.6, now that I can see how it is really supposed to look I'm even more impressed. The new user setup and onboarding experience was smooth too. Great work!

Yama

unread,
Nov 1, 2023, 12:38:40 PM11/1/23
to golden-cheetah-users
I have the same issue with 3.6, my rides are uploaded as Indoor Cycling, but the elevation is not showing on Strava activity, if I export the FIT file from Strava to Garmin Connect, the elevations shows.

Weird thing is that on Stava's My Stats, the elevation does show,  the same on the Training Log, the elevation is there.

Anyone was able to fix this?

ZajtiM

unread,
Apr 4, 2025, 8:30:47 PMApr 4
to golden-cheetah-users
On Wednesday, 1 November 2023 at 17:38:40 UTC+1 Yama wrote:
I have the same issue with 3.6, my rides are uploaded as Indoor Cycling, but the elevation is not showing on Strava activity, if I export the FIT file from Strava to Garmin Connect, the elevations shows.

Weird thing is that on Stava's My Stats, the elevation does show,  the same on the Training Log, the elevation is there.

Anyone was able to fix this?

"Virtual Ride" fixed!

I see this is a bit old thread.
But it might help some users that are uploading to Strava. I tested this with few GPX rides i did in GC and it uploaded them as "Virtual Ride".
You don't need to change anything else. Just run Processor and then it should recognize your upload as "Virtual Ride" on Strava.

I wanted to create Processor that will create XDATA(TRAIN -> TARGET) with the same number of rows that are in Basic Data table. But GC always crashed when i wanted to loop through all rows (from Basic Data). So i tested with only first 200 rows in XData table and it works.
200 rows is fairly quick. Should take a few seconds. But could be tested with less rows as well. I spent too much time trying to make it work with all rows, so i tested only with 200 rows.

ERG rides are uploaded as "Indoor cycling". So i tested this only with GPX rides.
Current code check for "longitude" at first. So it will not work for "pgmf" (RLV) rides. But you could remove  "if "longitude" in GC.activity():".

This is code for Python Processor (indents are important!):

if "longitude" in GC.activity():

     GC_time = list(GC.series(GC.SERIES_SECS))

     GC_distance = list(GC.series(GC.SERIES_KM))


     # Create TRAIN TARGET in XData if it doesn't exist

     if "TRAIN_TARGET" not in GC.activity():

          GC.createXDataSeries("TRAIN", "TARGET", "Watts")


     # Create 200 new rows with TRAIN -> TARGET data

     for i,GC_TIME in enumerate(GC_time):

          GC.xdataSeries("TRAIN", "secs").append(GC_TIME)

          GC.xdataSeries("TRAIN", "km")[i] = GC_distance[i]

          GC.xdataSeries("TRAIN", "TARGET")[i] = 100

          if i == 199:

               break



Feedback is welcome.


Cheers,
Mitja


Reply all
Reply to author
Forward
0 new messages