# Working on advanced running metrics (GCT, Vertical Oscillation, Vertical Ratio, Step Length) — help us cover more devices before we ship it

**URL:** <https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701>\
**Category:** Training\
**Created:** [16 July 2026 12:52 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701 "2026-07-16T12:52:54Z")\
**Posts on this page:** 17\
**Page:** 4

<div class="post-metadata">

**Author:** ![Antoinette\_Tinker](https://forum.intervals.icu/user_avatar/forum.intervals.icu/antoinette_tinker/32/66758_2.png) [@Antoinette\_Tinker](https://forum.intervals.icu/u/Antoinette_Tinker)\
**Post date:** [19 August 2026 11:56 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/65 "2026-08-19T11:56:25Z")

</div>

@pepe @Povedano @miguell @MedTechCD @ryandev

Looks like we have agreement, right?

**Duty Factor % / stance\_time\_percent → is calculated per stride**

stance\_time\_percent = stance\_time × cadence / 600 = (287 x 84) / 600 = 40.2%

**Flight Time and Flight Ratio → is calculated per step**

flight\_time = Step Time − Stance Time = (30000/84)− 287 = 70.1 ms

flight\_ratio = Flight Time / (Flight Time + Stance time) × 100 = 71 / (71 + 287) × 100 = 19.8%

**Thus Duty Factor% (per stride) + Flight Ratio (per step) will not add up to 100%**

Intervals.icu will implement these metrics in this way assuming we are all in agreement.

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [19 August 2026 13:10 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/66 "2026-08-19T13:10:34Z")

</div>

The fastest set:

```auto

// Inputs assumed: stance_time (ms), cadence (RPM / strides per min), speed (m/s)
let duty_factor_pct = null;
let step_time = null;
let stride_time = null;
let flight_time = null;
let flight_ratio = null;

if (cadence > 0 && stance_time > 0) {
    // Pre-compute inverse cadence in RPM
    const inv_cadence = 1 / cadence;

    // 1. Step Time & Stride Time (ms)
    step_time = 30000 * inv_cadence; //30000 / cadence
    stride_time = step_time * 2; // 60000 * inv_cadence // 60000 / cadence

    // 2. Duty Factor (% per full stride) -> Stance Time / Stride Time * 100
    duty_factor_pct = (stance_time / stride_time) * 100;

    // 3. Flight Time (ms per step)
    flight_time = step_time - stance_time;

    // 4. Flight Ratio (% per step) -> Flight Time / Step Time * 100
    flight_ratio = (flight_time / step_time) * 100;
}

```

---

<div class="post-metadata">

**Author:** ![Povedano](https://forum.intervals.icu/user_avatar/forum.intervals.icu/povedano/32/43576_2.png) [@Povedano](https://forum.intervals.icu/u/Povedano)\
**Post date:** [19 August 2026 13:33 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/67 "2026-08-19T13:33:09Z")

</div>

Curious: why the speed in the condition?

---

<div class="post-metadata">

**Author:** ![miguell](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/85f322/32.png) [@miguell](https://forum.intervals.icu/u/miguell)\
**Post date:** [19 August 2026 17:47 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/68 "2026-08-19T17:47:30Z")

</div>

good catch.

---

<div class="post-metadata">

**Author:** ![JoeriVC](https://forum.intervals.icu/user_avatar/forum.intervals.icu/joerivc/32/89388_2.png) [@JoeriVC](https://forum.intervals.icu/u/JoeriVC)\
**Post date:** [21 August 2026 10:10 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/69 "2026-08-21T10:10:52Z")

</div>

> [@ryandev](#):
>
> If you run with a Stryd pod, we’d love a sample activity (ideally the raw .fit, since Custom Stream exports can lose the original field name) so we can scope that as a follow-up.

I run with Stryd (duo). I would be happy to contribute. The data is interesting but their own data platform doesn’t really allow you to use the data besides individual workouts. I do some analysis through Intervals and with Claude but better support would be welcoming.

---

<div class="post-metadata">

**Author:** ![ryandev](https://forum.intervals.icu/user_avatar/forum.intervals.icu/ryandev/32/75654_2.png) [@ryandev](https://forum.intervals.icu/u/ryandev)\
**Post date:** [31 August 2026 12:35 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/70 "2026-08-31T12:35:20Z")

</div>

Thanks everybody for your help, here is a more formal post of all the changes and additions [New Running Metrics](https://forum.intervals.icu/t/new-running-metrics/132173)

---

<div class="post-metadata">

**Author:** ![Maurizio\_Balasini](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/m/ed8c4c/32.png) [@Maurizio\_Balasini](https://forum.intervals.icu/u/Maurizio_Balasini)\
**Post date:** [2 September 2026 07:38 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/71 "2026-09-02T07:38:30Z")

</div>

Great idea. I am running using Amazfit/Zepp Balance 2. I am happy to contribute with files if needed. Thanks

---

<div class="post-metadata">

**Author:** ![zwirbeltier](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/z/59ef9b/32.png) [@zwirbeltier](https://forum.intervals.icu/u/zwirbeltier)\
**Post date:** [6 September 2026 09:27 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/72 "2026-09-06T09:27:11Z")

</div>

> [@ryandev](#):
>
> - Amazfit / Zepp users — same ask. We know at least one Zepp file has this data; want to confirm it’s the same field names across firmware/models before this goes out.

@ryandev I can happily provide data from a Balance 2 if still needed.

---

<div class="post-metadata">

**Author:** ![Pieter\_Baele](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pieter_baele/32/41927_2.png) [@Pieter\_Baele](https://forum.intervals.icu/u/Pieter_Baele)\
**Post date:** [8 September 2026 09:53 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/73 "2026-09-08T09:53:12Z")

</div>

Device coverage:  
Coros + Coros POD2 possibilties currently? (Can deliver those)  
Coros + Stryd?

---

<div class="post-metadata">

**Author:** ![Jeroen\_Doesburg](https://forum.intervals.icu/user_avatar/forum.intervals.icu/jeroen_doesburg/32/65283_2.png) [@Jeroen\_Doesburg](https://forum.intervals.icu/u/Jeroen_Doesburg)\
**Post date:** [22 September 2026 11:48 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/74 "2026-09-22T11:48:44Z")

</div>

I have trouble selecting the following fields (on the activity page under Intervals-\>Columns) on mobile:

Avg Stance Time  
Avg Stance Time %  
Avg Stance Balance  
Avg Vertical Oscillation  
Avg Vertical Ratio  
Avg Vertical Speed  
Avg Step Length  
Avg LSS kN/m  
Avg ILR

These are available and can be selected and deselected on my desktop, but they’re missing on mobile (the list of available fields goes from ‘End Distance’ directly to ‘Min Cadence’ there. Exactly the same for graphs, the running dynamics are also missing there. What am I overlooking? Thanks in advance!

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [22 September 2026 11:59 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/75 "2026-09-22T11:59:47Z")

</div>

On the bottom of the settings page you can see the version and date of what is running on your phone.  
Is that a recent date? Can you click ‘Check for updates’?

---

<div class="post-metadata">

**Author:** ![Jeroen\_Doesburg](https://forum.intervals.icu/user_avatar/forum.intervals.icu/jeroen_doesburg/32/65283_2.png) [@Jeroen\_Doesburg](https://forum.intervals.icu/u/Jeroen_Doesburg)\
**Post date:** [22 September 2026 12:50 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/76 "2026-09-22T12:50:30Z")

</div>

Thanks for the quick reply @MedTechCD . The mobile has version **2026-07-16 11:53:24** while desktop has **2026-09-22 11:06:09**. So that is likely the cause for the missing fields and graphs. If I click ‘Check for updates’ the ‘wheel’ keeps spinning for about a minute and then stops. Strangely enough this is also the case on desktop. I’m using Brave on both devices with shields/internal ad blocking off for intervals.icu. There’s no anti-virus interfering either. I already tried logging in and out, a forced hard reload, clearing the cache and unregister service workers but the problem remains. Same goes for Firefox. I also tried connecting using another network. All to no avail. The problem is likely on my side so I’ll dive into this when I have more time.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [22 September 2026 13:03 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/77 "2026-09-22T13:03:10Z")

</div>

On mobile you have an old version that did not have the advanced running metrics.  
I use Brave on Android (and desktop) without any problem.  
Did you ‘install’ as PWA ‘Progressive web app’?

---

<div class="post-metadata">

**Author:** ![Jeroen\_Doesburg](https://forum.intervals.icu/user_avatar/forum.intervals.icu/jeroen_doesburg/32/65283_2.png) [@Jeroen\_Doesburg](https://forum.intervals.icu/u/Jeroen_Doesburg)\
**Post date:** [22 September 2026 14:02 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/78 "2026-09-22T14:02:45Z")

</div>

PWA or normal web page doesn’t make a difference unfortunately. Desktop has managed to update to todays version though. Connection type: Websocket and Connected: Yes on both devices. No warnings or errors in console. Mysterious times. I haven’t tried Brave’s ‘shred site data’ option, but I’m afraid I will lose all device specific settings regarding columns (and their specific order), graphs, fitness charts etc. on the mobile device then. These layout settings are not synced between devices so they may have to be stored in cookies/local storage I assume.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [22 September 2026 14:08 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/79 "2026-09-22T14:08:41Z")

</div>

> [@Jeroen\_Doesburg](#):
>
> These layout settings are not synced between devices so they may have to be stored in cookies/local storage I assume.

These are on the Intervals platform, but stored per device ‘Type’. Class can be desktop/phone/tablet/… That’s because the differences in layout and available space do not allow a single page layout.

 ![image](https://forum.intervals.icu/uploads/default/original/3X/b/9/b9f0ffe773100e96e13953bf3979fedd59f886ac.png)

You should not loose them.  
You will certainly not loose any graphs/charts. Worst case, you would need to setup the page layout again by defining which charts have to be on it.

---

<div class="post-metadata">

**Author:** ![Jeroen\_Doesburg](https://forum.intervals.icu/user_avatar/forum.intervals.icu/jeroen_doesburg/32/65283_2.png) [@Jeroen\_Doesburg](https://forum.intervals.icu/u/Jeroen_Doesburg)\
**Post date:** [22 September 2026 14:36 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/80 "2026-09-22T14:36:54Z")

</div>

![Screenshot_20260922-163232_1](https://forum.intervals.icu/uploads/default/original/3X/0/e/0e186bdf1142ee5e76237adee8b8007464938a9d.png)I finally managed to get the version updated after shedding site data, some corrupted data I suppose. The new fields and charts show up now. However if I try to click ok on the notification window after logging in I get this error.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [22 September 2026 14:40 UTC](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701/81 "2026-09-22T14:40:44Z")

</div>

> [@Intervals.icu News 2026-08-11](https://forum.intervals.icu/t/intervals-icu-news-2026-08-11/130965/6):
>
> If you wait a while it might work. Intervals.icu installs itself in the background to speed up future loads using a “service worker”

[Previous page](https://forum.intervals.icu/t/working-on-advanced-running-metrics-gct-vertical-oscillation-vertical-ratio-step-length-help-us-cover-more-devices-before-we-ship-it/130701.md?page=3)
