RIR vs RPE is a difference of direction, not of substance: RIR (reps in reserve) counts how many more reps you could have done, and RPE (rate of perceived exertion) rates how hard the set felt on a 1–10 scale. On the lifting-specific scale the two are tied together by one line of arithmetic — RIR = 10 − RPE — so a set at RPE 8 is a set with 2 reps in reserve.
Two scales, one idea
RPE started life as a general effort scale for endurance work. The version lifters use was re-anchored to something you can count: how many reps were left in the tank when you racked the bar. That re-anchored scale — the RIR-based RPE scale — was formally described and tested in 2016 by Zourdos and colleagues, who had 29 experienced and novice squatters rate sets at 60%, 75% and 90% of their one-rep max while bar velocity was measured1. Ratings tracked bar speed closely in both groups (r = −0.88 in the experienced lifters, r = −0.77 in the novices), which is the evidence that the number people report is measuring something real1.
The idea is simple:
- RIR answers "how many more could you have done?" — 0, 1, 2, 3…
- RPE answers "how hard was that, out of 10?" — 10 is nothing left, 9 is one rep left, and so on.
They meet at the top of the scale. RPE 10 is RIR 0. Every step down the RPE scale is one more rep in reserve. Below about RPE 6 the published scale stops giving single-rep precision and groups 5–6 as "4–6 reps in reserve", because nobody can reliably tell four reps left from six2.
In plain terms: RIR is the number you feel after the set; RPE is the same number written from the other end.
The conversion table
This is the table the RIR / RPE converter runs, and the one Zyra Workouts uses when it turns a logged RPE into the reps-in-reserve label you see on a set.
| RPE | RIR | What it felt like |
|---|---|---|
| 10 | 0 | Nothing left; a technical-failure set |
| 9 | 1 | One more rep was possible |
| 8 | 2 | Two more reps were possible |
| 7 | 3 | Three more reps were possible |
| 6 | 4 | Four more; the app treats anything easier as this |
| below 6 | 4 (clamped) | Warm-up territory; not distinguished |
Half points work too. The app rounds first, then converts: RPE 8.5 rounds to 9 and becomes RIR 1; RPE 9.5 rounds to 10 and becomes RIR 0. If you want half-rep precision, log the RPE rather than the RIR label.
Why the app clamps RPE at 6
The conversion in the source is one line:
RIR = 10 − clamp(round(RPE), 6, 10)
The clamp does two things. It caps RPE at 10 (you cannot have fewer than zero reps left), and it floors it at 6, so RPE 4 and RPE 6 both come out as RIR 4. That floor is deliberate. The scale's own authors present RPE 5–6 as a range of 4–6 reps in reserve rather than exact counts2, and a set that easy is not the kind of set a progression rule should be reasoning about. Collapsing everything easy into "at least 4 left" keeps the number honest instead of pretending to a precision nobody has.
The reverse direction is clamped the same way: RPE = 10 − clamp(round(RIR), 0, 4). Type RIR 6 into the converter and it reads back RPE 6, not RPE 4.
In plain terms: the app trusts your effort rating between "four left" and "nothing left", and treats anything easier as a warm-up.
How Zyra Workouts logs it
Zyra Workouts stores effort per set as an RPE value. From that it derives a short RIR label — 2R for two reps in reserve, 1R for one — and shows it on the reps cell; a set at RIR 0 shows no label, because there was nothing in reserve to report. Change the value after the set (uncheck, edit, re-check) and the new number is what Smart Progression sees next time.
That last part is why the rating matters beyond the log. Two of the app's rules read it directly:
- The progression ceiling for a set target is
round((repMin + repMax) / 2) + RIR target— the effort target is baked into the number of reps the app expects before it adds weight. That rule is walked through in double progression. - The "Deload needed" flag on the dashboard fires only when an exercise's estimated 1RM has fallen by 2% or more *and* the average logged RIR over the window is 1 or less — see training plateau or time to deload.
Neither rule can work from "it felt hard". They need the number, which is why the app asks for it on every working set.
A caveat that the research supports: RIR is a skill. The novice group in the validation study rated less consistently than the experienced group1, and the scale's application paper suggests newer lifters practise recording RIR before letting it steer intensity on its own2. Log it from day one; lean on it once your ratings stop surprising you.
The short version
RIR is reps left; RPE is effort out of ten; on the lifting scale RIR = 10 − RPE. Zyra Workouts stores RPE, rounds it, clamps it between 6 and 10, and shows the result as an nR label — and both the progression ceiling and the deload flag are computed from that number. The converter does the arithmetic either way round. Zyra Workouts is in development and not yet on the App Store; the rules quoted here are read from its source code and may change before release. Training guidance, never medical advice. Educational overview only — not medical advice.