Skip to main content

/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.