# 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:** 20\
**Page:** 2

<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:** [3 August 2026 14:32 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/21 "2026-08-03T14:32:28Z")

</div>

First observations:

Cadence could optionally be display in spm

This update is really helpful for Stryd users. Only missing vertical\_oscillation\_balance, leg\_spring\_stiffness\_balance and impact\_loading\_rate\_balance for the full Stryd Duo set.

For Garmin

Impact Loading Rate, Step Speed Loss and Step Speed loss % are missing.

Overall analyses: Only niche metrics are missing. As a Stryd Duo user i would love to have it all, but i understand your choosing.

Thank you.

---

<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:** [3 August 2026 15:29 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/22 "2026-08-03T15:29:58Z")

</div>

Using Stryd: Impact Loading Rate, i am getting no values

```auto
{
      icu.activity.average_impact_loading_rate
}

```

nor intervals ILR nor icu.streams.impact\_loading\_rate

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [3 August 2026 16:34 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/23 "2026-08-03T16:34:12Z")

</div>

> [@miguell](#):
>
> For Garmin
> 
> Impact Loading Rate, Step Speed Loss and Step Speed loss % are missing.

correction:

> [@miguell](#):
>
> For Garmin
> 
> **Impact Loading Factor** , Step Speed Loss and Step Speed loss % are missing.

---

<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:** [3 August 2026 18:14 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/24 "2026-08-03T18:14:04Z")

</div>

Using my streams checker

with a HRM600

💎 STREAMS VARIABLES CHECK |

Variable Name | Length | Type | Status |---------------------------------|--------|-----------|-------- |

| cadence\_row 7270 | Array | ✅

| vertical\_oscillation\_row | 7270 | Array | ✅

| stance\_time | 7270 | Array | ✅

| vertical\_ratio | 7270 | Array | ✅

| step\_length\_row | 7270 | Array | ✅

| stance\_time\_balance | 7270 | Array | ✅

| stance\_time\_percent | 7270 | Array | ✅

| vertical\_speed | 0 | Array | ❌

| impact\_loading\_rate. | 0 | Array | ❌

| leg\_spring\_stiffness. | 0 | Array | ❌

With a Garmin Watch and a Stryd Duo:

| cadence\_row | 10898 | Array | ✅  
| vertical\_oscillation\_row | 10898 | Array | ✅  
| stance\_time | 10898 | Array | ✅  
| vertical\_ratio | 10898 | Array | ✅  
| step\_length\_row | 10898 | Array | ✅  
| stance\_time\_balance | 10898 | Array | ✅  
| stance\_time\_percent | 10898 | Array | ✅  
| vertical\_speed | 0 | Array | ❌  
| impact\_loading\_rate | 0 | Array | ❌  
| leg\_spring\_stiffness | 10898 | Array | ✅

---

<div class="post-metadata">

**Author:** ![Michael\_Carrabine](https://forum.intervals.icu/user_avatar/forum.intervals.icu/michael_carrabine/32/81881_2.png) [@Michael\_Carrabine](https://forum.intervals.icu/u/Michael_Carrabine)\
**Post date:** [3 August 2026 18: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/25 "2026-08-03T18:36:15Z")

</div>

I would also love to see more data coming from my Apple Watch

---

<div class="post-metadata">

**Author:** ![Andy\_Drake](https://forum.intervals.icu/user_avatar/forum.intervals.icu/andy_drake/32/47036_2.png) [@Andy\_Drake](https://forum.intervals.icu/u/Andy_Drake)\
**Post date:** [4 August 2026 09:41 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/26 "2026-08-04T09:41:45Z")

</div>

Apologies if I should know this but who is ‘we’ in this context? Is this for intervals.icu improvement?

I have lots of examples from various devices / watches - just not clear who is asking and what is being developed

---

<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:** [4 August 2026 12:14 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/27 "2026-08-04T12:14:46Z")

</div>

@david , @eva and @ryandev is the dev team.  
If one of them mentions ‘We’, they mean the official icu devs.

---

<div class="post-metadata">

**Author:** ![Andy\_Drake](https://forum.intervals.icu/user_avatar/forum.intervals.icu/andy_drake/32/47036_2.png) [@Andy\_Drake](https://forum.intervals.icu/u/Andy_Drake)\
**Post date:** [4 August 2026 12:31 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/28 "2026-08-04T12:31:19Z")

</div>

Thank You @MedTechCD

i can supply FIT files from Suunto with Stryd and Garmin with Stryd (Duo / v5)

And Coros if you need it (I believe running dynamics are from the pod, not watch / wrist based)

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [4 August 2026 15:11 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/29 "2026-08-04T15:11:35Z")

</div>

Created a Activity Chart named “New Running Streams” for you to check which streams are available to you, don’t forget to reprocess activity before use.

---

<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:** [4 August 2026 19:28 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/30 "2026-08-04T19:28:49Z")

</div>

This is great new addition, thanks.

I also analyze the Flight Time in my sessions, it depends on the cadence and GCT.

I explain it in the post: [https://forum.intervals.icu/t/all-fields-from-garmin-activity/28097](https://forum.intervals.icu/t/all-fields-from-garmin-activity/28097)

> Flight Time (FlightTime): Flight Time is the amount of time you spend off the ground between strides when running. It needs Ground Contact Time (GCT) custom activity field created. Script activity.GCT \> 0 ? (60 / (activity.average\_cadence \* 2) \* 1000) - activity.GCT : NaN

---

<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:** [4 August 2026 19: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/31 "2026-08-04T19:36:17Z")

</div>

There is a limited collection of metrics from Coros wrist based, on the newer devices with latest firmware.

> [@Working on advanced running metrics (GCT, Vertical Oscillation, Vertical Ratio, Step Length) — help us cover more devices before we ship it](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/3):
>
> For newer Coros watches with latest firmware update you get some of them without the POD, ‘from the wrist’ as Coros calls it. vertical\_oscillation (mm) is Vertical Oscillation vertical\_ratio (percent) is Vertical Ratio stance\_time (ms) is Ground Contact Time step\_length (mm) is Step Length Balance is not being recorded from the wrist. These names are almost surely identical to those from Coros + POD, but just wanted to share for completeness.

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [4 August 2026 20: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/32 "2026-08-04T20:36:30Z")

</div>

For Coros new watches, wrist based have at least the following streams available:

| cadence | 2567 | Array | ✅  
| vertical\_oscillation. | 2567 | Array | ✅  
| stance\_time | 2567 | Array | ✅. GCT,  
| vertical\_ratio | 2567 | Array | ✅  
| step\_length | 2567 | Array | ✅  
| stance\_time\_balance | 0 | Array | ❌  
| stance\_time\_percent | 0 | Array | ❌  
| vertical\_speed | 0 | Array | ❌

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [4 August 2026 20:45 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/33 "2026-08-04T20:45:55Z")

</div>

Flight time is a valuable metric inversely correlated with Duty Factor (DF)—the biomechanics literature standard that corresponds directly to Garmin’s stance\_time\_percent metric expressed as a ratio:

In running dynamics literature, **Duty Factor** is widely used to classify runners along the **aerial–terrestrial continuum** :

- **Aerial Pattern (Low DF):** Characterized by longer flight times, lower ground contact times, and higher leg stiffness. At a standard speed of **12 km/h** , runners exhibiting a **DF≤0.25–0.27** (Garmin `stance_time_percent` ≤25–27%) are classified as strongly **aerial**.

- **Terrestrial Pattern (High DF):** Characterized by longer stance times and shorter flight times to optimize energy expenditure via forward propulsion rather than vertical displacement. At 12 km/h, runners with **DF≥0.28–0.30** (Garmin `stance_time_percent` ≥28–30%) are classified as **terrestrial**.

### Duty Factor & stance\_time\_percent Thresholds @ 12 km/h

The Duty Factor (DF) classification at 12 km/h breaks down into clear motor-profile zones:

| **Motor Profile** | **Duty Factor (DF)** | **Garmin stance\_time\_percent** | **Flight Ratio (1 - DF)** |
| --- | --- | --- | --- |
| **Strongly Aerial** | \<= 0.25 | \<= 25.0% | \>= 75.0% |
| **Aerial** | 0.25 - 0.27 | 25.0% - 27.6% | 72.4% - 75.0% |
| **Transition Zone** | 0.27 - 0.28 | 27.7% - 28.7% | 71.3% - 72.3% |
| **Terrestrial** | 0.28 - 0.30 | 28.8% - 30.0% | 70.0% - 71.2% |
| **Strongly Terrestrial** | \> 0.30 | \> 30.0% | \< 70.0% |

### 📚 Primary References in Literature

> **1. Patoz et al. (2019)** _“Duty Factor Is a Viable Measure to Classify Spontaneous Running Forms”_ — _Sports_, 7(7), 174.
> 
> ➔ Identified Duty Factor at 12 km/h as a reliable, objective metric to classify runners into aerial (DF≤27.6%) versus terrestrial (DF≥28.8%) groups.

> **2. Lussiana et al. (2017)** _“Biomechanical comparison of running economy and global running patterns in aerial and terrestrial runners”_ — _Journal of Biomechanics_, 60, 185-192.
> 
> ➔ Established the biomechanical framework linking lower Duty Factor to increased elastic energy storage/recoil in aerial runners.

> **3. Gindre et al. (2016)** _“Aerial and terrestrial patterns: A new concept in running economy”_ — _International Journal of Sports Medicine_, 37(03), 202-209.
> 
> ➔ Introduced the original Volodalen® aerial-terrestrial motor profile concept.  
> Garmin’s `stance_time_percent` divided by 100 is literally Duty Factor. A score below 0.25–0.27 at 12 km/h means you’re an aerial runner; higher means you’re terrestrial.

---

<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:** [5 August 2026 08:31 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/34 "2026-08-05T08:31:45Z")

</div>

Could you send me this fit file?

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [5 August 2026 12:44 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/35 "2026-08-05T12:44:28Z")

</div>

Did that by DMS

COROS-Pace4-Optical and added a Apple Watch Ultra 3 file

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [5 August 2026 14:06 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/36 "2026-08-05T14:06:32Z")

</div>

So your streams are working great. 😀  
exception: icu.streams.impact\_loading\_rate

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [5 August 2026 14:22 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/37 "2026-08-05T14:22:39Z")

</div>

Apple Watch Ultra 3 has the following streams:

 ![imagem](https://forum.intervals.icu/uploads/default/original/3X/0/6/0656ec54244c2c263c1fc7422ba6feac9e872f50.png)

Can you share your Apple Watch activity output from miguell’s “New Running Streams” activity chart?

---

<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:** [6 August 2026 11:29 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/38 "2026-08-06T11:29:00Z")

</div>

> [@pepe](#):
>
> Flight time is a valuable metric inversely correlated with Duty Factor (DF)—the biomechanics literature standard that corresponds directly to Garmin’s stance\_time\_percent metric expressed as a ratio:

That’s a great explanation, thank you @pepe.

Also for **Apple** watch and **Coros** watch and others that have `icu.streams.cadence and icu.streams.stance_time`` there is the Duty Factor and Stance Time Percent Customs Streams and Fields i created.

Tests if `stance_time_percent` exists if not calculates it.

---

<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:** [6 August 2026 20:44 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/39 "2026-08-06T20:44:35Z")

</div>

Duty Factor is just a percentage, it shows your balance and efficiency but hides critical data.

Flight Time provides the exact milliseconds you are airborne, revealing if you are gliding or bouncing. Two runners can share the same Duty Factor percentage but have completely different (perhaps unsafe) flight times.

---

<div class="post-metadata">

**Author:** ![pepe](https://forum.intervals.icu/user_avatar/forum.intervals.icu/pepe/32/36539_2.png) [@pepe](https://forum.intervals.icu/u/pepe)\
**Post date:** [7 August 2026 00:04 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/40 "2026-08-07T00:04:37Z")

</div>

Flight time is a useful metric, but looking at it in isolation leaves out how force is actually applied. Spring-mass mechanics, leg stiffness, and impact loading depend primarily on Ground Contact Time and the ratio of airtime to ground time (the Flight Ratio, which is simply (1 / dutyFactor) - 1;

Ground Contact Time is where force production, tendon energy storage, and deceleration actually happen; Flight Time is just the passive ballistic trajectory that results from that contact phase.

Looking at Flight Time without Ground Contact Time is like measuring how high a ball bounced without knowing how hard it hit the ground. Pairing Duty Factor (or Ground Contact Time) with Flight Time, gives the full picture.

[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=1)

[Next 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)
