
How Datenshi's PP System Works
Datenshi uses its own custom-built Performance Points (PP) system, not a direct copy of official osu!'s. This page explains why, how the numbers are actually produced, and shows real examples from past calibration rounds.
Why not just use official osu!'s PP formula?
Official osu! (Bancho) has no PP system for Relax at all, since Relax doesn't exist there. Datenshi supports both Vanilla and Relax, so we built our own formula (inspired by osu!'s public performance formulas, but implemented and tuned independently) so both modes can have a working, comparable PP system.
What actually makes up your PP for a single play?
Every play is broken into a few components, then combined. The exact split depends on the mode:
- osu!standard: Aim PP, Speed PP, and Accuracy PP are calculated separately, then combined.
- Aim PP rewards hitting difficult jumps and patterns accurately. It scales with the map's aim difficulty rating.
- Speed PP rewards fast, dense tapping. Same shape as Aim PP, but driven by the speed difficulty rating instead.
- Accuracy PP rewards your hit accuracy specifically, scaled by the map's Overall Difficulty (OD). A tighter hit window (higher OD) means the same accuracy% is worth more Accuracy PP.
- osu!taiko, osu!catch, osu!mania: instead of splitting Aim/Speed, these modes use a single Strain PP value representing overall difficulty, combined with Accuracy PP.
On top of that, two things always apply:
- Combo factor: the closer you are to a full combo (relative to the map's maximum possible combo), the more of the Aim/Speed/Strain PP you actually get. Not FCing costs you PP even before counting misses.
- Miss penalty: each individual miss reduces PP further, and the penalty compounds, so 3 misses hurts more than 3x a single miss.
Finally, the map's difficulty rating used in all of the above isn't just the raw star rating. Mods adjust it first (see the next section), and then a mode-specific overall multiplier is applied at the very end (see below).
Why is the multiplier different per mode?
After all the per-component math above, one global multiplier is applied per mode:
| Mode | Vanilla | Relax |
|---|---|---|
| osu!standard | x0.75 | x0.75 |
| osu!taiko | x1.00 | x0.85 |
| osu!catch | x0.75 | x0.85 |
| osu!mania | x1.00 | not available |
Vanilla is calibrated to match Bancho. If a play's PP here looks clearly out of line with what the same play would give on official osu!, that's a calibration bug, not intended behavior, so report it.
Relax has no Bancho equivalent to match, so it's calibrated against other established private servers with active Relax communities instead, to keep numbers competitive and familiar for players coming from those servers.
Why do mods (DT, HR, etc.) affect PP differently between Vanilla and Relax?
Mods change the effective difficulty rating that feeds into the components above. DT/NC and HR raise it, EZ/HT lower it. But the size of that adjustment is smaller in Relax than in Vanilla:
| Mod | Vanilla adjustment | Relax adjustment |
|---|---|---|
| DT / NC | x1.30 | x1.08 |
| HR | x1.10 | x1.05 |
In Relax, tapping is fully automatic, so if mod combinations got the same difficulty bonus as Vanilla, PP would explode into absurd numbers when mods stack. This isn't hypothetical, it happened during calibration: a Relax full-combo at 7.4 star with NC+HR+HD stacked briefly gave 1690pp before this was tuned down to around 850pp. That's why Relax uses smaller bonuses for these mods, it's not an arbitrary nerf, it's what keeps the underlying formula from breaking at high mod combinations.
Per-mode calibration notes
Because this is a custom formula, every mode goes through its own tuning pass, checked against real reported plays. Here's the current state per mode, including cases where a number was actually wrong and got fixed:
osu!standard, Vanilla
Verified against real plays to match Bancho:
| Player | Map | Result |
|---|---|---|
| TuyulNyasar | Of Our Time, 6.94 star, FC, 99.87% nomod | 433.6pp, matches Bancho |
| TuyulNyasar | Miss Tail, 6.12 star, FC, 99.55% nomod | 297.1pp, matches Bancho |
Before the multiplier was corrected from x0.45 to the current x0.75, standard PP across the board sat at roughly 55% of these values (around 260pp and 178pp for the two plays above, calculated from the multiplier change itself, not a literal historical record).
osu!standard, Relax
| Player | Map / mods | Before | After | Why |
|---|---|---|---|---|
| rehalcool12 | 6.67 star, DT+HD+RX, 96% | 161pp | 1025pp | High-BPM Relax maps were only counting about 52% of star rating toward PP |
| Miel | 7.12 star, DT+HD+RX | 140pp | 239pp | Same underweighting issue, an earlier partial fix |
osu!taiko, Vanilla
| Player | Map / mods | Before | After | Why |
|---|---|---|---|---|
| bukanaesa | 8.03 star, nomod, 99.2% | 498pp | 664pp | Taiko was undershooting Bancho by around 150pp at high star rating |
osu!taiko and osu!catch, Relax
Both currently use fixed multipliers (x0.85 each) set at launch. Neither has had a specific community-reported miscalibration yet, unlike standard Relax which went through several rounds. If you have a play that looks off in either of these, report it, since we don't have a confirmed reference case for these two yet.
osu!catch
The most notable catch-specific fix was in Relax: maps that are actually standard-only difficulty (no dedicated catch star rating) were giving 0pp in Relax, because the catch-specific star rating was missing and nothing else was used instead. Fixed by falling back to the standard star rating when catch's isn't available.
osu!mania
Mania has no Relax mode. On the Vanilla side:
| Player | Map / mods | Result |
|---|---|---|
| OwOnta | Hanabi, 4.77 star, +DT, 99.53%, 4 misses | Roughly 471pp, matches Bancho |
| Peko | 7.84 star, full-LN, +HT | Was 12pp, fixed to 493pp |
The Peko case is the most dramatic recalibration on record: Halftime applies an in-game score penalty, and the PP formula wasn't compensating for it, so a top-tier play was scoring almost nothing. That's now fixed.
Why did my old PP change even though I didn't play?
Because this formula is actively tuned based on real player reports, not fixed like Bancho's. Every time something is fixed or rebalanced, we run a recalculation across every stored score so the leaderboard reflects the current formula consistently. If your total PP moves without you playing, that's a recalc, not a bug. All the "before / after" numbers in this page came from exactly that process.
Something feels wrong?
Report it on Discord or the Help & Support forum with:
- Beatmap link
- Mods used
- Accuracy, combo, and miss count
- The PP you got vs. what you think it should be, with a reference (Bancho for Vanilla, another private server for Relax)
That's exactly the kind of report that drives every calibration round listed above.