Skip to content
/ ruso Public

A cross-platform CLI and GUI application to easily modify osu! beatmap parameters.

License

Notifications You must be signed in to change notification settings

Cyanistic/ruso

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A cross-platform CLI and GUI application to easily modify osu! beatmap parameters. (osu trainer clone)

FeaturesGetting StartedInstallationDependencies

Preview

Features

  • Change the approach rate, circle size, hp drain, overall difficulty, and playback rate of any osu! beatmap
    • Each field is populated upon loading a new map
      • Fields can be locked to prevent this behavior on a per-field basis
  • AR and OD scaling
  • Support for mp3, ogg, and wav audio formats
  • Customize the playback rate of an audio file while keeping its pitch intact (only works for mp3 and wav formats)
  • Light, Dark, osu!, and custom color schemes
  • Auto and manual map selection modes
    • Manually choose maps to modify using the file picker
    • Automatically choose maps to modify based on the currently chosen map inside of a running osu! instance (requires gosumemory to be running)
  • Tag generated maps with the "ruso-map" tag to easily find them inside osu!
  • Calculate space used up by all generated maps
  • Quickly remove all generated maps and audio files to free up unused space
  • Generate .osz files for quickly loading maps into osu!
  • Run gosumemory on startup for seamless auto select integration

Upcoming Features

  • No dependence on gosumemory for auto mode
  • Fancy animations/Improved UI

Getting Started

  1. Install ruso using the installation guide for your OS.
  2. Run ruso for the first time to initialize and create important files.
GUI users

Enter the settings tab and set your osu! songs path as well as the path of your gosumemory executable if you plan to use auto mode.

CLI users

Run ruso --help or check out the usage section for help info to get started.

Note that mp3 files take approximately 1s to process for every 20s of audio. If ruso appears to be hanging while generating a map just give it a few seconds and it should finish up.

Installation

Windows

If you prefer a standalone binary (recommended), download the latest release of ruso-x86_64-pc-windows-msvc.exe from the releases page.

If you prefer an installer, download the latest release of ruso_x.x.x_x64-setup.exe from the releases page.

macOS

Download the latest release for your respective architecture from the releases page.

Architecture File
Apple Silicon ruso-aarch64-apple-darwin
Intel ruso-x86_64-apple-darwin
Linux

Make sure you've installed the necessary dependencies.

Distribution Method
Debian ruso_x.x.x_amd64.deb from releases
Arch Linux (AUR) yay -S ruso-bin (not working yet)
Any (Recommended if not listed) ruso-x86_64-unknown-linux-gnu from releases
Any ruso_x.x.x_amd64.AppImage from releases

Dependencies

WebkitGTK (Linux only)

Required by GUI to draw the main window

Distribution Method
Debian sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev
Arch Linux sudo pacman -S webkit2gtk-4.1 gtk3 libappindicator-gtk3
Fedora/RHEL sudo dnf install webkit2gtk4.1-devel libappindicator-gtk3-devel
openSUSE sudo zypper install webkit2gtk3-soup2-devel libappindicator3-1
Gentoo sudo emerge --ask net-libs/webkit-gtk:4.1 dev-libs/libappindicator
Void sudo xbps-install -S libwebkit2gtk41 gtk+3-devel libappindicator
  • gosumemory (optional) - Used to get map data from a running osu instance when using auto mode

All other dependencies are listed in the Cargo.toml file and baked into the binary, no need to worry about installing them.

Theming

Ruso offers the Light, Dark, and osu! themes out of the box.

Basic custom theming is also supported by modifying the color variables in the automatically generated custom.css file. This file will be in your respective OS' configuration directory for ruso.

Operating System Path Example
Windows {FOLDERID_RoamingAppData}\ruso C:\Users\Alice\AppData\Roaming\ruso
macOS $HOME/Library/Application Support/ruso /Users/Alice/Library/Application Support/ruso
Linux $XDG_CONFIG_HOME/ruso or $HOME/.config/ruso /home/alice/.config/ruso

CLI Usage

Paths in this example are in Linux format but will be formatted for your respective OS when running ruso --help.

Generates osu! maps based on given args.
Running with no arguments runs the GUI version.
Usage: ruso [OPTIONS]

OPTIONS:

Options that can be enabled or disabled with (-/+) will use their respective values in '$HOME/.config/ruso/settings.json' if left unspecified.

  -h, --help                      Print the help information and exit.
  -V, --version                   Print version and exit.
  -a, --approach-rate      [AR]   The approach rate of the map. Will remain unchanged if not provided.
  -/+A                            Enable (+A) or disable (-A) approach scaling with rate. Scaling will not work if '-a' is specified.
  -b, --bpm                [BPM]  The new bpm of the map. This will override '--rate' if provided.
  -c, --circle-size        [CS]   The circle size of the map. Will remain unchanged if not provided.
  -C, --clean                     Remove ALL maps and audio files generated by ruso and exit.
  -d, --hp-drain           [HP]   The hp drain of the map. Will remain unchanged if not provided.
  -/+f                            Enable (+f) or disable (-f) forcing the generation of audio files even if they already exist.
  -g, --gosumemory                Spawn gosumemory as a child process.
                                  This will use the paths provided in '$HOME/.config/ruso/settings.json' as the gosumemory and osu! songs path respectively.
  -o, --overall-difficulty [OD]   The overall difficulty of the map. Will remain unchanged if not provided.
  -/+O                            Enable (+O) or disable (-O) overall difficulty with rate. Scaling will not work if '-o' is specified.
  -p, --path               [PATH] The path to the osu! map.
                                  This can be a regular path or a path the osu! songs path provided in '$HOME/.config/ruso/settings.json' as the root.
                                  This is inferred, and the former will take precedence over the latter.
                                  If this is not provided, ruso will attempt to connect to a running gosumemory instance with the websocket url provided in '$HOME/.config/ruso/settings.json'.
  -/+P                            Enable (+P) or disable (-P) the rate of a song affecting its pitch.
  -r, --rate               [RATE] The playback rate (or speed) of the map.
                                  This will speed up the .osu file and the corresponding audio file.
  -u, --used-space                Print the amount of space used by maps generated by ruso in bytes and exit.
  -/+z                            Enable (+z) or disable (-z) generation of .osz files.

Building

You can either build ruso into a standalone binary or bundle it into a self-contained package.

Building (Recommended)

Building ruso requires an up-to-date installation of cargo and the dependencies.

  1. Clone the repo and cd into it.
git clone https://github.com/Cyanistic/ruso.git
cd ruso
  1. Use cargo to build the application.
cargo build --release

That's it! The build artifacts will be in target/release.

Bundling

Building ruso requires an up-to-date installation of cargo, the Dioxus CLI and the dependencies.

  1. Clone the repo and cd into it.
git clone https://github.com/Cyanistic/ruso.git
cd ruso
  1. Use the Dioxus CLI to bundle the application for your platform.
dx bundle --release

That's it! The bundled build artifacts of the application will be in dist/bundle.

Suggestions/Criticisms

If you have any suggestions or criticisms you would like to share please post them in the discussions page as they are greatly appreciated.

Inspiration/Thanks

  • The original osu-trainer that inspired me to make a cross-platform version with more features
  • libosu for making it easy to parse beatmaps (although I did have to add mania support myself)