The engine · engine proposes, human edits

The engine proposes. A human edits.

A workout-decoding engine, proven on real per-second data. It reads a session, finds the structure, classifies the workout, and scores how sure it is. Then a person checks it.

Workout types
9
Data tiers
3
Confidence
0.10–0.98
False-interval
0
The pipeline

From raw activity to a decoded verdict

01
Ingest

Normalize the activity — summary, laps, and per-second streams — and scrub the start and finish for privacy.

02
Segment

Break the run into blocks: straight from laps, or from the velocity stream via mean-shift changepoints.

03
Find reps

Split work from easy at the speed threshold, cluster the repeats by duration, and capture each recovery float.

04
Classify

Run the cascade — intervals, race, long run, tempo, fartlek, easy, progression — over the shape and the stats.

05
Score

Set a confidence from the data tier, then adjust for rep cleanliness, auto-laps, heart rate, and the athlete's label.

Watch it decode

Pick a session, see the read

10 × 400 msession shape
VerdictIntervals
Confidence0.98

What the engine saw

  • 10 clean work reps detected between recovery floats.
  • Rep pacing is tight (low rep-to-rep variation).
  • Matches the athlete's own session label.
The cascade

How it decides what a workout is

Intervals3 or more clean work reps separated by recovery, and the laps aren't auto-generated.
RaceTagged a race and held even, or 21 km+ at 90%+ of max heart rate.
Long run21 km or more at an even pace, below race intensity.
TempoA sustained elevated block (5 min+), or controlled variation with threshold-range HR.
FartlekFrequent pace swings without a clean, repeating rep structure.
EasyEven pace throughout, very low variation.
ProgressionOverrides easy or tempo when pace climbs steadily across the run.
Workout · UnclassifiedStructured but unmatched falls back to workout; no signal at all falls back to unclassified.
Confidence

How sure it is, and why

Confidence — the base

It starts from how much data the source gives us.

Per-second streams
0.90
Lap markers
0.75
Summary only
0.45

Then it adjusts

Signals push it up or down, clamped to 0.10–0.98.

≥ 3 clean intervals+0.08
Matches the athlete's label+0.05
No heart-rate data−0.05
Auto-generated laps−0.20
Built to be checked

The engine proposes. The eval gates keep it honest.

Every change runs against a labeled set before it ships. Two gates are non-negotiable: it has to classify accurately, and it must never invent intervals on a run that has none.

Type accuracy
on the labeled set
≥ 0.70
False-interval rate
non-interval runs called intervals
0

See it on a real session

The flagship decode, engine read and all, end to end.

Open the flagship decode