Local beatmap analysis tool for .osu files built with React, TypeScript, and Vite.
It is designed for comparing map revisions, inspecting strain over time, and checking mapper-oriented timeline stats without uploading anything to an external service.
- Upload a local
.osufile and inspect it in the browser - Compare the current map against the previously loaded map
- View difficulty strain timelines under shared scaling
- View mapper stats over time: object density, circles, sliders, timing changes, inherited points
- Use a built-in PP calculator for
osu!standard - Toggle
stable/lazerPP behavior - Switch chart layout between
SplitandStack - Persist common UI preferences: smoothing, layout mode, and PP ruleset selection
Primary analysis view.
- Uses
rosu-pp-jsdifficulty calculation - Shared axes between current and previous map
- Smoothing is adjustable and persisted
- Supports horizontal and vertical comparison layouts
Live PP calculator for osu!standard.
- Supports
stableandlazer - Includes score-state controls such as misses, 100s, 50s, combo, slider ends, and slider ticks
- Displays PP, stars, AR, OD, CS, and HP
Secondary comparison view for mapper context.
- Fixed-window timeline analysis
- Compares density and object mix between current and previous map
- Includes timing-point activity overlays
- Starts collapsed by default
- React 19
- TypeScript
- Vite
- Plotly
osu-parsersrosu-pp-js
- Node.js 20+ recommended
- npm
npm installnpm run devnpm run buildnpm run lintnpm run preview- Start the app
- Upload a local
.osufile - Upload another version of the same map to compare against the previous load
- Use the chart layout toggle to switch between
SplitandStack - Use the performance panel for PP checks
- No backend is required
- Analysis happens locally in the browser
- The PP calculator is currently configured for
osu!standard - The current map is always compared against the immediately previous upload
rosu-pp-jsis loaded via the web WASM build
src/
analysis/ timeline analysis builders
components/ shared UI and Plotly wrapper
difficulty/ difficulty and strain calculation logic
features/ app-facing feature panels
lib/ small helpers and persistence utilities
osu/ beatmap parsing and normalization
performance/ PP preview calculation
types/ shared app types
- Only one previous revision is stored for comparison
- Some controls and displays are currently tuned specifically for standard mode
- Large Plotly bundles make the production JS bundle heavy
rosu-pp-js: difficulty and performance calculationosu-parsers:.osuparsing- Plotly: interactive chart rendering