#osu #streams #pp #stars

app SimpleBeatmapAnalyzer

Simple program to analyze all of your osu files and save a csv with all the computed metrics

3 releases

0.9.2 Sep 14, 2023
0.9.1 Sep 10, 2023
0.9.0 Sep 7, 2023

#822 in Command line utilities

MIT license

913 lines



What is Simple Beatmap Analyzer?

This is my first rust program

Simple Beatmap Analyzer is a console application that analyzes ".osu" files for Standard game mode only. After it finishes it outputs the results in a "CSV" (comma,separated,values) file in the same directory as the .exe

Table of Contents

  1. How does it work
  2. How to install
  3. How to use it
  4. How to load results.csv in Excel
  5. How to analyze the data in Excel
  6. To Do
  7. F.A.Q

How does it work

It assumes every map is in maped 1/4 and calculates streams/jumps and other patterns aswel as some ratios based on them (Jumps are asumed every second beat and i will be refering to it as 1/2). The values for the following 1/4 and 1/2 sections are in % notes of the map, not in time.

  • For 1/4 patterns we assume the circles are overlapping or up to 16 pixels edge to edge.
  • For 1/2 patterns we asume the edge to edge space is higher than 110 pixels
  1. 1\4 patterns:
    • Dobules/Triples/Quads/Bursts/Streams/DeathStreams
    • Bursts: 3-12 includes Triples and Quads
    • Streams: 13-32
    • DeathStreams: 33+
  2. 1\2 patterns:
    • ShortJumps/MidJumps/LongJumps
    • ShortJumps: 3-12
    • MidJumps: 13-32
    • LongJumps: 33+
  3. SI -> Stream index (how streamy the map is minus jumps)
  4. JI -> Jump index (how jumpy the map is minus streams)
  5. FCDBI -> Finger Control Double Bursts Index (experimental)
  6. Additionals stats like 99% acc PP for NM/DT/HR aswel as Stars for said mods and others... wont list em all

How to install

  1. Click on releases and download the latest version.
  2. Unzip into a folder of your choice.

How to use it

  1. Open the SimpleBeatmapAnalyzer.exe
  2. Paste the Osu Songs path (example: D:\osu\Songs) and click Enter
  3. Wait for it to finish and save the data in results.csv
  4. Open the results.csv in Excel or any other CSV reader/analyzer
  5. After you find the map you like simply copy the MapID and paste it in the Osu search ingame

How to load results.csv in Excel

Method 1

  1. Open a new excel document.
  2. Chose the menu Data and from there click From Text/CSV
  3. Select the results.csv and click Open
  4. After then on the first drop down menu select 65001: Unicode (UTF-8) if its not auto selected
  5. Make sure the delimiter is Comma and press Load

Method 2

  1. If in windows your default delimiter is "," and not "." open the csv with Excel
  2. Chose the menu Insert and from there click Table
  3. It should auto detect the scope of your table, if not manualy select it
  4. Enable My table has headers checkbox and press Ok

How to analyze the data in Excel

Example 1: Most Streamy 7* Beatmaps from 210 to 220 BPM with more than 20% Bursts

  1. Chose the menu Data and enable Filter if its not enabled.
    • On the clomns you gonna see a drop down arrow
  2. Click the arrow on BPM->Number filters->Between..
    • On the first enter 210 and on the second 220
  3. Click the arrow on Stars->Number filters->Between..
    • On the first enter 7 and on the second 8
  4. Click the arrow on Bursts->Number filters->Greater Than..
    • On the first enter 20
  5. Click the arrow on SI->Sort Largest to Smallest

Example 2: Most Jumpy 6* DT Beatmaps with no Streams and Deathstreams that are 10.33 AR

  1. Chose the menu Data and enable Filter if its not enabled.
    • On the clomns you gonna see a drop down arrow
  2. Click the arrow on DT_Stars->Number filters->Between..
    • On the first enter 6 and on the second 7
  3. Click the arrow on Streams->Number filters->Equals..
    • On the first enter 0
  4. Click the arrow on DeathStreams->Number filters->Equals..
    • On the first enter 0
  5. Click the arrow on DT_AR->Number filters->Equals..
    • On the first enter 10.33
  6. Click the arrow on JI->Sort Largest to Smallest

To Do:

  1. Create a column config file. v0.9.1
  2. Create a options config file.
  3. Add counter for cut streams
  4. Calculate AVG jump Spacing and AVG jump Distance v0.9.1
  5. Option to be able to generate Osu links and Osu Direct links
  6. Expose variables as the stream distance and jump distance for editing in the config
  7. Maybe add optinal support for 1/3 or 1/6th or other uncomon Snap Divisors (prob wont)
  8. Figure out a way to have an indicator if the map is ranked/loved/qualified/graveyarded
    • That doesnt require everyone to use thier APIv1 key.
  9. Make it so you need to compute once the map and not every time you run the program v0.9.1
  10. ~~Include 100+ note stream counter ~~ v0.9.1
  11. Make Longest stream counter v0.9.1
  12. [] Long term idea - Create a faster osu Standard only beatmap parser.


  1. Why does it run slow ?
    • The program needs to search for all your ".osu" files and then parse all of them to calculate alot of metrics. Most of the time is taken by ROSU-PP to calculate difficulty and pp for the maps aswel as reading from the disc and parsing. This program scales very well with fast SSD storage and alot of cores (on my r5 3600x with 860Evo ssd its 2500 maps per second)
  2. When i load the data in Excel the numeric columns like Stars are text ?
    • This can happen for many reasons one being wrong default delimiter in windows. Floating point numbers would expect "," instead of "." . To fix it i know two ways:
      • Language Settings -> Region -> Regional format (English(Europe) works). And then reset Excel.
      • Or in Excel you can mark the column click Home around the middle there is a drop down menu usualy writen General Switch to: Number then go to Data and click Text to Columns (should be somewhere on the right)


ROSU-PP - Beatmap parsing and Difficulty/PP calculations



Fixed Bugs:


back to the top


~159K SLoC