Roxysu

Local-first practice analytics for osu!lazer

Index your play history, search every score, track mastery, and build smart collections — all offline on your machine.

Roxysu practice library with score distribution chart and map cards

Why Roxysu

Practice tooling that stays on your PC

Built around read-only lazer access, one query language, and analytics that help you decide what to play next.

Local-only

Your scores never leave your machine. No cloud account required.

Read-only by default

Realm sync is read-only. Optional collection sync backs up client.realm first.

Everything searchable

One DSL powers practice search, collections, and global find.

Analytics over browsing

Mastery, sessions, retries, and skill trends — not just a score dump.

Features

Everything you need between plays

From library search to live session recommendations — the same UI whether you run via Bun or the desktop app.

Practice library

Browse every map you’ve touched as practice cards — play count, best accuracy, misses, PP, mastery, and last played.

  • Plain text or query-language filters
  • Click distribution bars to refine the list
  • Sort by last played, accuracy, mastery, stars, and more
Practice page with best-score distribution and map grid

Practice profiles

Per-beatmap deep dives with cover art, mastery, Sunny dan estimates, pattern analysis, and recent sessions on that map.

  • 7K density profile and pattern weights
  • Copy a search string for use in-game
  • Preview and open maps from one place
Beatmap practice profile with mastery, Sunny dan, and density chart

Sessions & Up Next

Scores auto-group into sessions by inactivity. Open the live current session hub — updated as new plays land — and pull suggestions from query filters or 7K recommendations.

  • Live current-session hub over SSE
  • Up Next accuracy / staleness filters
  • 7K Push / Consistency / Deficit picks
Current session page with map suggestions and recent plays

Smart collections

Collections store query strings, not static lists — they stay current as your library grows. Sync them into lazer as !Roxysu-prefixed collections when you’re ready.

  • Create, edit, and paginate match results
  • Close lazer, then Sync to osu!lazer
  • Automatic client.realm backup before write
Collections page with smart query collections and sync button

Stats & skill trends

See Push, Accuracy, and Consistency estimates, skill evolution over time, weekly activity, and how you actually play sessions.

  • Top-N and timeframe filters
  • Rice / LN / FLN skillset mix
  • Grade and activity breakdowns
Stats page with current skill cards and skill evolution chart

Replay analysis

Rewatch scores with timing histograms, miss patterns, and column-level feedback — useful when a PB almost lands.

  • Early / late timing distribution
  • Miss tags for jack, chord, stream
  • Playback rate, scroll, and seek controls
Replay analysis with notefield, timing histogram, and miss list

Download maps

Search online with the same query language as Practice, hide sets you already own, then download missing .osz files — one at a time or in bulk — and open them in osu!lazer.

  • Count and batch-download every missing match
  • Paste beatmapset IDs to check what you still need
  • Search & downloads via mirror.hinamizawa.ai
Download maps page with online search, batch download, and beatmap cards

Query language

One DSL for search, collections, and Up Next

Plain text hits titles and artists. Field filters, ranges, and boolean operators power everything else.

mode:mania stars:5..6 Mania maps in a star band
key=7 ln<10 7K with low LN percentage
acc:90..93 NOT played:last14d Stale maps in an accuracy window
dan:"Regular 4" OR sunny:5..6 Sunny dan labels and rework stars

More of the UI

Sessions, previews, patterns, skins

Get started

Pick a path

Install the Windows app, run the Bun dev server from source, or use the Nix flake on Linux/NixOS. You’ll need an osu!lazer install with local play history either way.

Windows

Download the desktop installer

Grab the packaged Electron app — no Bun or Node required. Launch it after install and wait for the first realm sync.

From source

Start the Bun dev server

Needs Bun and Node.js LTS. Starts the server on port 4321 plus the continuous realm sync loop.

  1. Clone the repository and install dependencies.
  2. Start the server + realm sync with bun run dev.
  3. Open http://localhost:4321/ and wait for the first sync.
$ git clone https://github.com/Yon-Luc/Roxysu.git
$ cd Roxysu
$ bun install
$ bun run dev
# → http://localhost:4321/

Env vars and Windows native-build notes are in the README.

Nix / NixOS

Run or install the flake

Needs Nix with flakes enabled (nix-command + flakes). Targets x86_64-linux.

One-shot from GitHub

No clone required — Nix fetches the repo flake and runs the packaged desktop app:

$ nix run github:Yon-Luc/Roxysu
# pin a commit or tag:
$ nix run github:Yon-Luc/Roxysu/v0.0.1

Add to a NixOS / home-manager flake

Wire Roxysu as an input, then put the package on your system or user profile:

# flake.nix
{
  inputs.roxysu.url = "github:Yon-Luc/Roxysu";

  outputs = { nixpkgs, roxysu, ... }: {
    # NixOS:
    nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [{
        environment.systemPackages = [
          roxysu.packages.x86_64-linux.roxysu
        ];
      }];
    };
  };
}

Home Manager: add roxysu.packages.${pkgs.system}.roxysu to home.packages the same way. For hacking, clone and use nix develop (Bun + Node toolchain) instead of the packaged app.