Workset app icon
Workset – Gym Log

The math behind Workset

Workset publishes the rules it uses so a lifter can check a suggestion against the log that produced it.

Auto-progression engines

Definitions
W = the heaviest weight among the exercise's completed, non-warm-up sets in the session.
    Weights are compared in kg, with a tolerance of 0.01 kg.
Top sets = the completed, non-warm-up sets at W.
    Work and failure sets are used first. Drop sets are used only when the session
    has no completed work or failure set for the exercise.
I = the weight increment: 5 lb when W is in lb, or 2.5 kg when W is in kg.
L = the low rep target. H = the high rep target.
First judged session: no verdict is made. L is seeded as the lowest top-set rep
    count and H as the highest top-set rep count.
Deload offer D = round to the nearest I of (W x 0.90).
    D is offered when the recorded stall count reaches 3, except for a comeback
    session, and only when W > 0. An offer is not applied automatically.
Duration exercises are not judged by these engines.

Comeback rule
If the exercise was last trained at least 14 calendar days ago, its last top
W > 0, and no manual next weight has been typed, the return session is planned
at round to the nearest I of (last top W x 0.90), with reps at L. If that
rounding would produce 0, the last top W is used instead.
The stall count restarts for that session, and the session cannot produce a
deload offer.

Double progression (free)
If every top set has reps >= H: next W = W + I, and planned reps return to L.
    If W = 0, next W stays 0.
If every top set has reps >= L, but not every top set reaches H:
    next W = W, and planned reps rise by 1 per set, capped at H.
If any top set has reps < L:
    next W = W, planned reps stay the same, and the stall count rises by 1.

Linear (Pro)
If every top set has reps >= L: next W = W + I.
Otherwise: next W = W, and the stall count rises by 1.

Percentage wave (Pro)
Let M = the highest estimated one-rep max from the lift's logged work sets, in kg.
Let n = the number of earlier sessions of the lift in this template, taken
    modulo 4. For a workout with no template, n is the number of earlier
    sessions of the lift anywhere, taken modulo 4.
p = [0.70, 0.75, 0.80, 0.60][n]
Planned W = round to the nearest I of (M x p), converted to the display unit.
Planned reps are at L. At Finish, the engine records a hold only: it does not
    add a stall and does not offer its own deload.

AMRAP-informed (Pro)
Let S = reps in the last top set - H.
If S >= 2: next W = W + I. The increase is one increment, however large S is.
If S = 0 or 1: next W = W.
If S < 0: next W = W, and the stall count rises by 1.

RPE-based (Pro)
Let R = the highest RPE logged on a completed, non-warm-up top set.
If R <= 8.0: next W = W + I.
If 8.0 < R < 9.5: next W = W.
If R >= 9.5: next W = W, and the stall count rises by 1.
If no top set has an RPE, the session is judged by double progression instead.

An engine changes only the next suggestion, and the lifter can override that suggestion without changing any set already logged.

Estimated one-rep max

For one qualifying set:
estimated one-rep max = W in kg x (1 + reps / 30)

The value for a set, session or lift is the maximum value produced by its
qualifying sets.

A set qualifies when it is completed, is not a warm-up, has weight > 0 and
reps > 0, and is not a duration set.

The estimate is the largest Epley value from the qualifying sets, not an average of those sets.

Personal bests

A record-setting set must be completed, must not be a warm-up, must have
weight > 0 and reps > 0, and must not be a duration set. Drop and failure sets
can qualify. Bodyweight sets, duration sets, cardio and warm-ups set no record.

Heaviest weight = maximum W in kg
Best estimated one-rep max = maximum [W in kg x (1 + reps / 30)]
Best single-set volume = maximum (W in kg x reps)

Total tonnage is not a record type and is not calculated as a personal best.

A standing record changes only when a new value is strictly greater than the
old value. A tie keeps the first date on which the record was set.

A personal best is a workout that beats a record which stood before that
workout started. The first recorded value for an exercise is a baseline, not
a personal best. An imported workout can change the standing records, but an
imported workout does not itself produce a personal-best outcome.

The separate rep-max table lists, for each exact rep count from 1 to 12, the
heaviest weight lifted for that count. It is display only and does not create
a personal best.

A personal best is a new standing record in one of the three measures above, not a measure of the total work in a workout.

Strength Score

For each lift, first calculate one estimated one-rep max for each session,
using the estimated one-rep max formula and qualifying sets above.

A lift is scored only when it has at least 6 sessions with an estimated
one-rep max.

Lift score = 100 x median(last 5 session estimates) / median(first 5 session estimates)

A median for an even number of values is the mean of the two middle values.

Group score = the arithmetic mean of the scores of the scored lifts that
train that muscle group. One lift can count toward every group it trains.

Overall Strength Score = the arithmetic mean of the group scores for groups
that have at least one scored lift.

A group with no scored lift is left out of the overall score and listed as
left out. It is not averaged in as zero.

Scores are displayed as whole numbers.

The score compares each lift only with its own earlier sessions, not with other lifters and not with bodyweight.

Weekly streak

A calendar week starts on Monday.

A week holds when it contains at least one finished workout that either:
(a) has at least one completed work set, or
(b) has a cardio entry.

Let A = the current week if it holds. If the current week does not hold yet,
let A = the previous week.

Weekly streak = the number of consecutive holding weeks ending with A.
The first earlier week that does not hold ends the count.
With no qualifying workout, the streak is 0.

An empty current week does not break the streak yet, but an empty earlier week does.

Warm-up ladder

Warm-ups are generated when a workout starts from a template or quick start.
The exercise must be an eligible barbell or dumbbell compound, the Settings
warm-up switch must be on, and the exercise's own warm-up switch must be on.
W below is the planned top working weight.

Barbell, using the lifter's bar weight B and plate list:
Step 1: B x 10, included only when W >= B + (2 x smallest plate).
If W is below B + (2 x smallest plate), there is no ramp.
For each fraction f and rep count in [(0.40, 5), (0.60, 3), (0.80, 2)]:
    candidate = the heaviest loadable weight <= W x f, using B and the plates.
    Include candidate only when W x f >= B, candidate < W, and candidate does
    not repeat a weight already in the ramp.
Result: at most 4 steps, in ascending weight order.
Example from the code: W = 225 lb and B = 45 lb can produce
45 x 10, 90 x 5, 135 x 3 and 180 x 2.

Dumbbell, per dumbbell, using rack increment q:
q = 5 lb in lb mode, or 2.5 kg in kg mode.
If W < 2q, there is no ramp.
For each fraction f and rep count in
[(0.20, 10), (0.40, 5), (0.60, 3), (0.80, 2)]:
    candidate = max(q, floor(W x f / q) x q).
    Include candidate only when candidate < W and candidate does not repeat
    a weight already in the ramp.
After the steps are built, remove the first step if it is only q.
Result: at most 4 steps, in ascending weight order.
Examples from the code: W = 60 lb produces 10 x 10, 20 x 5, 35 x 3 and 45 x 2;
W = 100 lb produces 20 x 10, 40 x 5, 60 x 3 and 80 x 2.

Warm-up rest is the smaller of 45 seconds and the lift's own rest time.

The ramp is built from the planned top weight and the equipment available, and warm-up sets do not count as work sets.