Understanding osu! pp: how performance points are calculated and aggregated
Performance points (pp) are osu!'s skill-oriented ranking metric, intended to reflect what a player can do rather than how long they have played. Each eligible play is given a pp value derived from the beatmap's difficulty and the player's accuracy, combo, misses and mods. A profile's pp is not the sum of those values: scores are sorted by pp and each is weighted by 0.95 raised to the power of its position minus one, so the best play counts in full, the second at 95%, the third at 90.25% and the hundredth at roughly 0.6%. A capped bonus tied to the number of ranked maps played is added on top.
What pp measures, and what it replaced
The osu! wiki describes performance points as a ranking metric that aims to be more contextually relevant to a player's progression, shifting the emphasis from the amount of time played to a representation of the player's skill. That framing explains most of the system's design choices.
The metric osu! used before pp was ranked score, which accumulates with every score you set on a ranked beatmap and never falls. A player who played constantly at a modest standard would out-rank a stronger player who played less. pp was built to invert that: it is bounded in a way ranked score is not, it responds to how well you play rather than how often, and past a certain point additional volume contributes almost nothing. Ranked score, total score, play count and play time all still appear on your profile, but they answer a different question.
What determines a single play's pp
Before any weighting happens, each play is given a raw pp value by the osu! servers. The wiki identifies four calculation components that feed it:
- Aim — the difficulty of hitting consecutive notes, affected by approach rate and by mods such as Flashlight, Hidden and Hard Rock.
- Speed — the rate at which the beatmap presents hit objects, increased by Double Time and decreased by Half Time.
- Accuracy — how precisely objects are hit, weighted heavily in the algorithm.
- Strain — the intensity and duration of demanding sections such as streams and fast jump patterns.
These combine in varying magnitudes according to what a particular beatmap demands. The components are not universal across game modes: aim is not considered in osu!taiko or osu!mania, which have their own mode-specific calculations. Misses matter a great deal because they break combo, and a play that is otherwise excellent can lose a substantial share of its value to a single one.
Star rating: the difficulty input
Star rating describes a beatmap's difficulty and is calculated automatically by the osu! client. It is the main difficulty term feeding a play's pp, and it is what makes the same accuracy worth wildly different amounts on two different maps. The official difficulty categories are:
| Category | Star rating |
|---|---|
| Easy | 0.00★ – 1.99★ |
| Normal | 2.00★ – 2.69★ |
| Hard | 2.70★ – 3.99★ |
| Insane | 4.00★ – 5.29★ |
| Expert | 5.30★ – 6.49★ |
| Expert+ | 6.50★ and above |
Three points are worth keeping in mind. Star rating is mod-dependent — the same difficulty played with Double Time is a harder map by this measure than the same difficulty played without it. The bands above are labels for browsing, not inputs to the pp calculation, which uses the underlying number rather than the category. And the exact calculation is not published as a formula in the wiki; it lives in osu!'s difficulty calculator, which is periodically revised, so a map's rating today may differ from its rating a year ago.
How accuracy is counted
In osu!standard, accuracy for a single play is the total value of your judgements divided by the maximum those judgements could have been worth:
Accuracy = (300 × 300s + 100 × 100s + 50 × 50s) ÷ (300 × (300s + 100s + 50s + misses))
| Judgement | Share of a perfect hit |
|---|---|
| 300 | 100% |
| 100 | 33.33% |
| 50 | 16.67% |
| Miss | 0% |
The step from a 300 to a 100 costs two thirds of that note's value, which is why accuracy falls faster than players expect from a handful of sloppy notes. Note that other game modes use their own accuracy formulas, with different judgement values. The accuracy shown on your profile is a separate figure again: it is weighted so that better scores stand out more, rather than being a flat average across everything you have ever played. Grade thresholds are defined by the distribution of judgements rather than by an accuracy percentage — see grades.
The weighting curve, position by position
Your profile pp is a weighted sum. Scores are sorted from highest pp to lowest, and the score in position n is multiplied by 0.95 raised to the power of n − 1:
total pp = pp[1] × 0.95⁰ + pp[2] × 0.95¹ + pp[3] × 0.95² + … + pp[m] × 0.95m−1
| Position | Weight | What a 300pp play contributes there |
|---|---|---|
| #1 | 1.0000 | 300.0pp |
| #2 | 0.9500 | 285.0pp |
| #3 | 0.9025 | 270.8pp |
| #5 | 0.8145 | 244.4pp |
| #10 | 0.6302 | 189.1pp |
| #20 | 0.3774 | 113.2pp |
| #25 | 0.2920 | 87.6pp |
| #50 | 0.0810 | 24.3pp |
| #75 | 0.0225 | 6.7pp |
| #100 | 0.0062 | 1.9pp |
In principle the curve continues past 100. In practice it has stopped mattering: osu! exposes a player's Best Performance list up to 100 scores, and by that depth each additional entry is worth well under 1% of its face value.
Where your pp actually lives
Because the weights form a geometric series with ratio 0.95, they can be summed exactly, and the result reframes what your top 100 is for. An unlimited list of scores would have weights summing to 20. The first 100 weights sum to 19.88 — 99.4% of that theoretical maximum. Everything beyond your hundredth best play is, collectively, worth about 0.6% of the ceiling.
| Scores considered | Share of the total available weight |
|---|---|
| Top 10 | 40.1% |
| Top 25 | 72.3% |
| Top 50 | 92.3% |
| Top 100 | 99.4% |
Roughly 40% of the weight available to you sits in ten plays, and nearly three quarters in twenty-five. A player looking to move their profile figure meaningfully is competing against their own top ten, not against their hundredth-best score. Conversely, filling out the bottom of the list is close to cosmetic — improving your hundredth top play by 50pp adds about 0.3pp.
Bonus pp and its ceiling
A small bonus is added on top of the weighted sum, awarded for the number of ranked maps you have set a score on. The osu! wiki puts the maximum at 413.894 bonus performance points. It is a hard ceiling: the bonus cannot be extended by continuing to play, no matter how many further maps you set scores on.
The practical significance depends entirely on where you are. For a player at 800pp, a few hundred bonus points is a large fraction of the profile figure and the fastest early progress many new players make comes simply from touching more maps. For a player at 6,800pp the full bonus is about 6% of the total, and for a player at 15,000pp it is under 3%. It is also the reason two players with identical top 100 lists can show different profile pp — one has simply played across more distinct ranked maps. The osu! wiki gives the bonus as 416.6667 × (1 − 0.995min(N, 1000)), where N is the number of ranked beatmaps with a score set, reaching a maximum of 413.894 pp at N = 1,000.
Why a 400pp play does not add 400pp
This is the point where most explanations stop short. Adding a score does not simply append its weighted value — it displaces everything below it. When a new score enters at position k, the change to your weighted total is its pp times the weight at k, minus 5% of the combined weighted contribution of every score pushed down one place, minus the weighted value of the score that fell off the end.
Take an illustrative profile with a weighted top 100 of 6,372.7pp, a best play of 380pp and a hundredth play of 140.5pp:
| New play | Enters at | Naive estimate (pp × weight) | Actual gain |
|---|---|---|---|
| 400pp | #1 | 400.0 | +80.5 |
| 330pp | #16 | 152.9 | +25.5 |
| 300pp | #25 | 87.6 | +14.2 |
| 250pp | #43 | 29.0 | +4.6 |
For the 400pp play: 400.0 minus 5% of 6,371.8 (318.6) minus 0.9 equals 80.5. The displacement term grows with your existing total, which is diminishing returns stated precisely.
Mods and which plays are eligible
Mods change a play's pp because they change what the play demanded. Difficulty-increasing mods such as Double Time, Hard Rock, Hidden and Flashlight raise the effective difficulty and therefore the pp available; difficulty-reducing mods such as Easy and Half Time lower it. The effect is not a flat multiplier applied afterwards — the mods alter the star rating and the underlying skill components, so the same mod is worth different amounts on different maps.
Some mods place a play outside the pp system entirely. Relax and Autopilot grant no pp, and Autoplay scores are not submitted to leaderboards at all. pp also only comes from ranked beatmaps; a score on an unranked or graveyarded map, however good, contributes nothing to your profile figure and nothing to the bonus. If you are chasing pp specifically, it is worth confirming a map's status before investing hours in it — an excellent play on the wrong map is invisible to the ranking system.
osu!(stable), osu!(lazer), and recalculations
Both clients share one account and one profile. The osu! wiki's own answer to whether a lazer score gives performance points is simply "Yes"; pp for lazer scores is awarded into the same profile total. The clients do differ in scoring: lazer uses a system based on ScoreV2 with adjustments, while stable uses the original scoring system, and a Classic score display mode is available in lazer for those who prefer the older presentation. On the website, the Best Performance list is filtered by whether lazer mode is enabled. ppy have also stated that they offer no guarantee scores will remain indefinitely and may wipe a subset for balance reasons.
Separately, the pp algorithm itself is revised from time to time — the update of 28 October 2024 adjusted rhythm complexity and slider accuracy handling in osu!, among other mode-specific changes. These revisions are applied retroactively, so your existing plays are re-rated and your profile figure can move without you playing at all.
Seeing the curve in your own play
The weighting curve is easy to state and hard to feel, because the osu! profile shows only the aggregate. You see that your pp changed; you do not see which score caused it or what it displaced.
TrackMyOsu records the top 100 at the moment a tracking session starts and compares against it on every refresh, so a completed session lists each new top play with its pp, accuracy, grade, mods and star rating alongside the profile movement for the session as a whole. Putting the two side by side is what makes the curve legible: a 400pp play next to a +80pp session is the displacement arithmetic in front of you rather than on paper. Over a run of sessions the pattern becomes clearer still — the same standard of play yields progressively less as your top 100 strengthens. For compact definitions of the terms used here, see pp, top play and global rank.
Sources
Game mechanics described here follow the official osu! wiki — in particular Performance points, Star rating and Accuracy — and the ppy/osu difficulty and performance calculators. Session figures are computed from TrackMyOsu's own tracked-session database.
By carrot12_. Last updated 2026-08-12.