The short version
Heart rate is nearly blind to lifting. A near-maximal set of five can leave you shaking at a heart rate you’d call a warm-up, because strength is paid for by your muscles and nervous system, not primarily by your aerobic system. So when you log a structured strength workout — real sets, reps, and load — we stop trusting heart rate to score the lifting and run a dedicated Muscular Load model instead. It reads the actual mechanical work: how much you moved, how hard that was relative to your own history, and what kind of movement it was. This page explains exactly how a set of squats becomes strain.
Why heart rate isn't enough for lifting
The Strain methodology page makes the general case; for strength it’s at its most extreme. A heavy triple barely perturbs your heart rate, yet it’s one of the most demanding things you can ask of your body. If we scored lifting from heart rate alone, we’d tell a powerlifter their max-effort session was an easy day. That’s not a small error — it cascades into under-counted recovery needs and bad training advice.
The fix is to measure the work directly. Strength science already has the tools: volume load (weight × reps) for how much work was done, and relative intensity (how heavy, compared to what you can handle) for how hard it was. Our model is built from both.[2]
What the model reads
For every set you log, the model uses:
- The external load — the weight on the bar or in your hands, normalized to kilograms.
- The reps — repetitions completed.
- Your bodyweight — because your own body is part of the load, especially in compound and bodyweight movements.
- Your recent history with that exact exercise — your typical and maximal loads over the last two weeks, which is how we judge whether today’s set was hard for you.
It does not read your heart rate, and it doesn’t need to. Cardio load is scored separately and added on top (see “Why this lives apart from cardio” below).
Step 1 — Volume load per set
We first compute how much physical work a set represented, including the part of your own body that the movement has to move:
effective bodyweight = your_weight × mass_factor total weight = external_weight + effective_bodyweight volume load = total weight × reps
The mass factor is the fraction of your bodyweight a movement meaningfully loads:
| Movement type | Mass factor | Rationale |
|---|---|---|
| Compound (squat, deadlift, press, row, pull…) | 0.80 | Moves most of the body against the load |
| Isolation (curl, extension, raise…) | 0.10 | Loads a single joint; little bodyweight involved |
A barbell squat therefore counts your legs and torso, not just the plates — which is why a bodyweight squat is real work and a seated leg extension at the same external weight isn’t scored the same. Compound versus isolation is determined from the exercise name.
Step 2 — Intensity relative to you
The same 100 kg means something completely different to two different lifters, and to the same lifter on a fresh day versus a fried one. So intensity is always measured against your own recent baseline for that exercise, not an absolute number:
relative intensity = this set's (weight × reps) / your recent best for this lift
Then we shape it two ways:
A rep-range multiplier, because the same relative load is more taxing in the strength range than the endurance range:
| Reps | Multiplier |
|---|---|
| ≤ 3 | 1.20 |
| 4–5 | 1.10 |
| 6–8 | 1.00 |
| 9–12 | 0.90 |
| 13–15 | 0.80 |
| > 15 | 0.70 |
Heavy, low-rep work carries more neuromuscular cost per unit of volume; high-rep work is more metabolic and we weight it accordingly.
A progressive-overload bonus, capped small: when a set beats your recent best by more than 5%, it earns a little extra credit (up to +0.05), because a genuine PR attempt is a deeper effort than the volume alone shows.
The final intensity factor is clamped to a sane band (0.3–1.0) so a single mislabeled or freak set can’t blow up your score.
Bootstrapping a new lifter
If you’ve logged an exercise fewer than three times, we don’t have a personal baseline yet, so we estimate a reasonable one from your bodyweight and the movement pattern — e.g. a squat baseline near 1.5× bodyweight for working sets, a press near 1.0×, an isolation movement far lower. These defaults are intentionally rough; they get out of the way the moment you’ve built real history, which is what the model actually wants to use.
Step 3 — Set strain, then session strain
Each set’s contribution is:
set strain = (volume load × intensity factor × type multiplier) / 35
where the type multiplier is 1.0 for compound lifts and 0.7 for isolation work (a curl and a squat at the same computed volume aren’t the same systemic event), and 35 is a scaling divisor that puts muscular load into the same units as cardio load.
We sum set strain across every set in the session to get your raw muscular load. That number then enters the shared Strain pipeline exactly like cardio load does — combined at a 1.2× exchange rate, scaled by recovery, and bent onto the 0–21 curve. The full mechanics are on the Strain methodology page.
Yoga, pilates, and flow work
Flow-style sessions (logged as timed flows rather than weighted sets) are scored on a parallel track: bodyweight load over the duration, modulated by pace, at a slightly reduced multiplier. A slow, holding flow (long isometric holds) and a fast, dynamic one are scored differently — the isometric tension in a long-held pose is real load that a pace-blind model would miss.
Why this lives apart from cardio
Keeping muscular load on its own track is what lets the whole system stay honest:
- No double-counting. Because the muscular model already captures the non-cardiovascular toll of lifting, structured workouts always carry an Activity Load Factor of exactly 1.0. The barbell is counted once, by the model built to count it.
- Two currencies, one scale. Cardio and muscular load are genuinely different physiological events. We score each with the right tool, convert them to a common footing (the 1.2× factor), and only then combine — rather than forcing one number to describe both.
What we're honest about
What we’re honest about
- Effort within a set isn’t fully observed. We read load and reps, not bar speed or true proximity to failure. A grindy last rep and a crisp one at the same weight log identically. Logging RPE helps us elsewhere in the app, but it does not currently adjust the muscular-strain number itself.
- Tempo and rest aren’t inputs. A 5-second eccentric and a bounced rep score the same, and supersets versus long rests aren’t distinguished. These matter physiologically; we don’t yet capture them.
- Intensity is relative to your recent history, not a true 1RM. We estimate a one-rep max from your logged sets (via the standard Brzycki relationship)[1], but the live strain calculation judges “hard” against your recent best loads rather than a percentage of that 1RM. It’s robust and self-calibrating, but it means a long layoff resets your reference point.
- Per-session, not per-week. This model scores each session on its own. It is not a chronic-fatigue or weekly-volume tracker; that accumulation lives elsewhere in the app.
- It needs the data to work. The accuracy here is the reward for logging structured sets. Log lifting as a bare time window and we fall back to heart rate, which — for strength — is the very problem this model exists to solve.
How this metric evolves
Muscular Load ships as part of Strain v2.0. The constants here — the mass factors, the rep-range curve, the type multipliers, the scaling divisor — are tuned to land strength sessions intuitively on the 0–21 scale next to cardio. We expect to refine them as we gather data, and to fold in richer signals (velocity, RPE, proximity-to-failure) as they become reliably available. Material changes will be noted here.
References
- [1] Brzycki M. Strength Testing — Predicting a One-Rep Max from Reps-to-Fatigue. Journal of Physical Education, Recreation & Dance (JOPERD), 64(1):88–90 (1993). doi:10.1080/07303084.1993.10606684. We use the Brzycki relationship — 1RM = weight ÷ (1.0278 − 0.0278 × reps) — to estimate one-rep max from submaximal sets.
- [2] Haddad M., Stylianides G., Djaoui L., Dellal A., Chamari K. Session-RPE Method for Training Load Monitoring: Validity, Ecological Usefulness, and Influencing Factors. Frontiers in Neuroscience, 11:612 (2017). doi:10.3389/fnins.2017.00612. Volume load (external load × repetitions) and relative intensity are standard internal-load measures in strength and conditioning; this review summarizes the session-RPE and training-load literature.
This document describes a proprietary metric. The reasoning and constants are published in the interest of transparency; the underlying implementation is our own.