Skip to content
How it works

How a set becomes volume, and what the muscle map counts

How a set becomes volume, how bodyweight work is priced, and what the muscle map is counting.

By Kiptly ·

On this page

Volume is one multiplication

The volume of a session is the load of every set multiplied by its reps, added up. Nothing is weighted: a squat set and a curl set of the same tonnage contribute the same amount, a compound lift earns no bonus, and how hard the set felt never enters it.

Two-implement exercises count both. A set of ten with a pair of 20 kg dumbbells is 400 kg, not 200 — the multiplier defaults to one, so barbell and machine work is unaffected.

Range of motion, tempo and time under tension are not in the arithmetic at all. A quarter squat and a full squat with the same bar for the same reps produce the same number, because nothing in what you typed distinguishes them. That is a limit of the method, not an oversight to be fixed later: the app would have to guess at the missing half, and a guessed number in a total looks exactly like a counted one.

Which sets are in the sum

Warm-ups are excluded by default. There is a setting that folds them in, and the set counter beside the tonnage reads the same flag — so the two figures on that card always count the same population, which was worth fixing and is worth stating.

A set with no reps contributes no kilograms. A timed plank or a distance row still counts as a set you performed, and still appears in the set count; it simply has no multiplication to offer.

A set you have not ticked off still counts towards volume, as long as it carries reps. This is deliberate and it is the one place volume and personal records look at different things. The live header shows the planned volume of a prefilled session from the first second, and the total written when you finish counts those same sets, so the two never disagree with each other. Records are stricter: they only look at sets you actually marked done.

Where the weight comes from

Three branches and a refusal, in one function that every load number in the product passes through — the session total, the records, the charts and the muscle map all inherit it, and the app carries a copy for offline logging that is checked equal to the server’s to within a millionth of a kilogram.

For an ordinary exercise the load is the weight you typed, unchanged. For an assisted exercise — a gravitron, where the machine takes weight off you — the number you type is the assistance, so the load is your body mass minus that, floored at zero. For an exercise priced off your body mass, the load is your mass times a fraction of it, plus anything you hung off a belt.

And the refusal: when the app cannot work out an absolute load, the function returns nothing at all and the set is skipped. It is never counted as zero. Zero is a value that would drag a total down and sit in an average; nothing is the truth about a set whose load is unknown.

When the body is the load

For calisthenics the fraction is the share of your body mass the movement actually raises. It is not a difficulty rating, and that single rule is what makes the whole table checkable by anyone: a one-arm push-up carries the same share as a two-arm one, because the same mass travels the same distance and it is merely harder per arm.

So a pull-up, a chin-up and a dip are the whole of you, and carry 1.00. A push-up is 0.64, which comes from force-plate measurements rather than from anybody’s opinion. A bodyweight squat is 0.88 — all of you, less the shins and feet that stay on the floor, taken from a standard table of segment masses.

Your own figure wins if you set one. The app resolves the fraction as your override first, then the catalogue value, then nothing at all — and the override is allowed even where the catalogue offers no value, which is the only way most calisthenics exercises ever count towards anything.

What each movement is priced at

The complete table the app ships, read out of the seed when this site was built. Note what it does not contain as much as what it does: where an external support takes a share nobody can pin down — a rail, a band, a bench under your feet — or where the movement is a lever rather than a lift, no fraction is assigned and none is invented.

Exercises priced off a share of body mass: 28
ExerciseEquipmentShare of body mass
Chin-UpPull-up Bar1.00
Diamond DipBodyweight1.00
Dips (Chest)Bodyweight1.00
Dips (Triceps)Bodyweight1.00
Muscle-UpPull-up Bar1.00
Negative DipBodyweight1.00
Negative Pull-UpPull-up Bar1.00
Pull-UpPull-up Bar1.00
Ring DipBodyweight1.00
Scapular Pull-UpPull-up Bar1.00
Wide Pull-UpPull-up Bar1.00
Box Pistol SquatBodyweight0.94
Elevated Shrimp SquatBodyweight0.94
Pistol SquatBodyweight0.94
Shrimp SquatBodyweight0.94
Freestanding Handstand Push-UpBodyweight0.90
Wall Handstand Push-UpBodyweight0.90
Wall Handstand Push-Up (Negative)Bodyweight0.90
Bodyweight SquatBodyweight0.88
Decline Push-UpBodyweight0.70
Archer Push-UpBodyweight0.64
Diamond Push-UpBodyweight0.64
One-Arm Push-UpBodyweight0.64
Push-UpBodyweight0.64
Wide Push-UpBodyweight0.64
Incline Push-UpBodyweight0.55
Knee Push-UpBodyweight0.49
Wall Push-UpBodyweight0.35

28 of the 84 exercises this can apply to carry a share. The other 56 carry none — those sets are priced at the weight you typed, exactly as they were before.

What the muscle map is counting

Every exercise in the catalogue names the muscles it trains, each one as either primary or secondary. One set credits a primary muscle with one set and a secondary with half of one. That split is the method the code cites Pelland et al. for, and it is the only thing a body diagram in this app could honestly report: the catalogue knows which muscles an exercise names, and your log knows how many sets you did.

Counted in sets, not in kilograms — and the diagram is shaded by sets for the same reason the list beside it counts them. "Triceps, 5 t" after a bench day is a figure nobody lifted; half a set is exactly what the triceps did. Set counts are rounded to halves rather than to whole numbers, because rounding 2.5 up to 3 would erase the very distinction the half exists to carry.

The shade is relative to you. The darkest muscle is your busiest one in the window, and everything else is drawn as a share of that — so a map is readable whether you did three sets or thirty, and two people’s maps, or your own two windows, are not comparable with each other. The window is four weeks unless you choose another one, and the app asks for secondary muscles to be folded in; the server leaves them out unless asked, so that an older build keeps receiving exactly what it always received.

Why the total disappears when you share a session

Divide a session’s volume by its reps and you get the load per rep. For a session of pull-ups and dips, priced at 1.00, that load is your body mass to the kilogram — and the same card publishes the rep counts.

So a shared workout containing any body-mass-priced exercise shows no volume total at all to anyone who is not you. Not a rounded one, not a recomputed one: none. Body mass is health data and a rep count is not, and inventing a second definition of volume that only some readers see would be worse than showing none. You keep the number everywhere you read your own log.

The numbers, and where they live

Every number this page leans on, read out of the API when the site was built. Four of them are written in more than one place — two of those twice in the server, two across the server and the app — and the build fails if the copies stop agreeing with each other.

What it isValueRead from
What one set credits a secondary muscle with. A primary is credited 1.0.5apps/api/src/common/muscle-role-share.tsapps/flutter/lib/features/workout/domain/worked_muscles.dart
Muscle set counts round to this step, so half a set stays half a set.0.5apps/api/src/common/muscle-role-share.ts
Weeks the muscle map covers when you have not chosen a window.4apps/api/src/workout/analytics/analytics.controller.ts
Under this, a recorded body mass is treated as a bad reading rather than a weight.20apps/api/src/workout/resolve-bodyweight.tsapps/api/src/workout/strength-score.service.ts
Over this, the same — the weigh-in is ignored, not used.300apps/api/src/workout/resolve-bodyweight.tsapps/api/src/workout/strength-score.service.ts
The largest share of your own body mass you can tell the app a movement raises.1apps/api/src/exercise/bodyweight-factor.service.tsapps/flutter/lib/features/workout/domain/workout_volume.dart

Sources

Each source says how far we actually got into it. A citation list shows that a paper exists, not that anybody opened it — so this one is labelled.

  1. Pelland et al., Sports Medicine, 2025 — 67 studies

    The reason the code credits a secondary muscle half a set rather than a whole one or none. We have not read it; the citation lives in the source beside the constant, and what this page reports is that the code cites it.

    Not read

  2. Ebben et al. (2011), "Kinetic Analysis of Several Variations of Push-Ups", J Strength Cond Res 25(10)

    Peak vertical ground-reaction force as a share of body mass — the origin of the push-up family’s numbers in the table above. Cited by the seed that holds them; we have not read the paper itself.

    Not read

  3. Dempster (1955) segment-mass fractions

    The standard anthropometric table the squat and handstand figures are derived from by subtracting whatever stays on the floor. Cited by the seed; not read here.

    Not read

  4. The code that computes it

    packages/shared/src/utils/effective-load.ts, apps/api/src/workout/workout.service.ts, apps/api/src/common/muscle-role-share.ts and apps/api/src/workout/analytics/analytics.service.ts. Every number above is read out of these files when this site is built, and the table of fractions is mirrored from the seed rather than typed.

    Read in full

General fitness information, not medical advice.