/docs · Vetta Trainer
Load periodization
The Banister model + Coggan's metrics are the basis for how Vetta decides when to ramp you up and when to back off. Formulas and thresholds below.
TSS — Training Stress Score
Quantifies each session's load in a single unit. A 1-hour session at threshold = 100 TSS by definition.
Power formula: TSS = (duration_s × NP × IF) / (FTP × 3600) × 100, where IF = NP/FTP.
HR formula (Edwards TRIMP): TSS_HR = Σ (min × zone_multiplier). Z1 ×1, Z2 ×2, Z3 ×3, Z4 ×4, Z5 ×5.
Pace formula (rTSS): rTSS = (duration_s × intensity²) / 3600 × 100, where intensity = GAP / threshold_pace.
CTL — Chronic Training Load
Exponential moving average of TSS with halflife 42 days. Reflects sustained "fitness" — how much load your body has been processing over the last 6 weeks.
CTL up = fitness gained. CTL down = fitness lost. CTL is slow: meaningful changes take 3-6 weeks.
ATL — Acute Training Load
Exponential moving average of TSS with halflife 7 days. Reflects recent fatigue — last week's acute load.
High ATL = loaded, possibly fatigued. ATL rises and falls fast — a hard week spikes it, a recovery week crushes it.
TSB — Training Stress Balance (form)
TSB = CTL - ATL. It's your "form" — the gap between sustained fitness and acute fatigue.
TSB > +5: fresh, race window. TSB between -10 and +5: productive zone (adaptable load). TSB < -10: fatigued. TSB < -20: very fatigued, recovery mandatory.
A well-executed taper moves TSB from -15 (hard block) to +5/+15 (race-ready) over 2-3 weeks, holding CTL high and pulling ATL down.
ACWR — Acute:Chronic Workload Ratio
ACWR = ATL / CTL. Quantifies the ratio between acute and chronic load.
ACWR < 0.8: deconditioned, low injury risk but losing fitness. ACWR 0.8-1.3: sweet spot. ACWR 1.3-1.5: alert. ACWR > 1.5: high injury-risk zone (Gabbett 2016).
The engine uses ACWR as a signal: if your ACWR > 1.3 for 5+ days running across the last 2 weeks, it suggests a deload week.
How Vetta computes your TSS
If the Strava activity carries `training_load`, we use it directly (best-quality source).
Otherwise we compute rTSS with power (cycling with power meter) or pace (running), or TRIMP via HR when neither is available.
For manual sessions (Foster RPE), TSS = RPE × duration_min / 10. Rough approximation, sufficient to keep the model honest.
ramp_seguro: relationship to CTL
Foster's 10% rule applies to volume, not directly to CTL. But CTL rises ~1.5%/day with sustained TSS above current.
The engine targets weekly TSS as CTL × 7 (maintain) or CTL × 7 × 1.05-1.08 (gradual 5-8% ramp). Never asks for more than +8% over the previous week.
Public calculator
To simulate your case, use /herramientas/tsb-recovery: feed it current CTL, current ATL and planned daily TSS, and it projects TSB at 7/14/21/28 days.