Athlete summary
Training Stress Score (TSS) is how hard and how long a bike ride was, relative to your FTP. One hour at FTP is 100 TSS. A two-hour endurance ride at a lower intensity might also land near 100 — same stress, different shape.
Koyaro computes TSS from the ride file the same way TrainingPeaks does (Allen & Coggan). The engine never invents a TSS from duration alone when power is present.
How the number is built
- Normalized Power (NP) — a 30-second rolling average of watts, raised to the 4th power, averaged, then 4th-rooted. Surges cost more than a flat average.
- Intensity Factor (IF) —
NP / FTP.1.0means the ride “felt like” threshold for its whole duration. - TSS —
(duration_s × NP × IF) / (FTP × 3600) × 100.
Variability Index is NP / average power — how spiky the file was.
Weekly TSS is the sum of completed ride TSS Monday–Sunday. Work (kJ) is mechanical energy (Σ power × Δt / 1000). Max power is the peak sample. Pedaling / coasting seconds count samples above vs at 0 W (including resampled gaps).
What this is not
- Not Banister TRIMP or hrTSS — those are HR-only fallbacks. See HR-only load, Karvonen zones, and Banister TRIMP.
- Not planned session TSS — that uses the expanded workout, not the completed file. See Planned session TSS/IF from workout structure.
- Not run-load or swim-load (Critical Speed / CSS). Those have their own articles.
- Not optional heat/altitude environmental TSS/IF — that is a labeled annotation on top of mechanical TSS. See Heat and altitude load (optional TSS/IF cost).
Citations
- Allen H, Coggan AR — Training and Racing with a Power Meter: NP, IF, TSS.
- Coggan PMC — weekly TSS feeds CTL / ATL / TSB (see Banister impulse-response vs Coggan PMC).