Open-source project
bemusic/bemuse avatar
bemusic/bemuse

Bemuse is a browser rhythm game where the audio latency calibration is a feature

⬤▗▚▚▚ Web-based online rhythm action game. Based on HTML5 technologies, React, Redux and Pixi.js.

1,253 stars164 forksTypeScriptAGPL-3.0

At a glance

What is it?
Bemuse plays BMS format songs in a browser, with a seven-key keyboard mode and a BMS mode that adds a turntable for IIDX and MIDI controllers. The repository is a Rush monorepo whose npm sub-projects are the BMS and bmson parsers and the tools for running your own music server, and the game itself needs Google Chrome.
Who is it for?
Adopt Bemuse if you want to play or host BMS format music in a browser, since the parsers and the self-hosted music server are published separately from the game. Skip it if you want a native rhythm game or a modern chart format, since BMS is its format.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 15 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

BMS is the format, and the song supply is community-run

Bemuse is an open source, online, web-based rhythm game, and the format is the first thing to understand about it: it plays songs in BMS format.

The README points to an introduction video for BMS and links to a search site for finding songs. What matters for adoption is supply. The README says there are over 5,000 songs published in BMS format by the community worldwide, and links to a search site to find them.

So the game ships without content and the content comes from a scene that predates it. That is a normal arrangement for this genre and it has a practical consequence: the library is only as good as its availability, and nothing in this repository controls that.

The other content path is local. You can play custom songs by dragging a folder containing BMS files into the music selection screen, which means you can test your own charts without uploading anything.

Two things the README is upfront about. It recommends playing on Google Chrome. And the online ranking exists, so there is an internet leaderboard to compete on, alongside a party mode for playing with friends that helps everyone start at the exact same time.

The feature list also mentions an insane tutorial, which is the joke every rhythm game makes and which is usually true.

Two input modes, seven keys and a turntable

Bemuse offers two ways to play, and the difference is the controller.

Keyboard mode is seven keys. You play along with your keyboard, each note has its own sound, and the README describes it as fully key-sounded: the music is affected by your gameplay.

That last point is worth understanding because it is unusual. The audio is synthesised per note rather than being a backing track you listen to. Which means the music you hear is the result of your playing, and missing notes genuinely changes what the track sounds like.

BMS mode is the seven keys plus a turntable, played with an IIDX controller or a MIDI controller. That is the authentic hardware arrangement for this format, and if you do not have one, keyboard mode is the fallback.

Difficulty is per song rather than a global setting, with multiple difficulties to accommodate player skill levels. Scoring uses a grading system where mastering the song earns the S grade, and the README names the threshold: a score over 500000.

Presentation options are unusually thorough, which is what separates a rhythm game from a chart viewer. You can adjust the speed of the notes to make them easier to read, and the README is careful to say this does not change the speed of the song, only how dense the notes are on screen. You can adjust the play area size, position the note panel on either side or at the centre, and put the turntable left or right in BMS mode. Some songs have 720p background animation.

Audio latency calibration is the feature that separates this

One bullet in the feature list carries more weight than any other, and it is easy to skim past.

Audio latency compensation. Some systems have audio latency, and Bemuse contains a calibration system to compensate for it.

This matters more than it sounds. Rhythm games judge timing, and the gap between the sound leaving your speakers and the sound reaching your ears, plus the gap between your input and the game sampling it, is a fixed offset per machine. On a laptop with Bluetooth audio that offset can be large enough to make every note feel early or late.

Every serious rhythm game has some form of this, and most players never look at the setting because they assume they are bad at the game. A calibration system moves the problem from the player to a one-time measurement.

The related feature is the early and late indicator, which tells you whether you pressed a note too early or too late. That is diagnostic feedback, and it is only useful if you know your offset, which is what calibration gives you.

Together those two features are the difference between a game that feels unfair and one that feels precise. If you are evaluating a browser rhythm game, check that it has both before you judge the gameplay.

Rush manages the build, and the parsers ship separately

The development setup uses Microsoft Rush rather than npm workspaces, which is a notable choice for a JavaScript project.

sh
# Install Rush
npm install --global @microsoft/rush

# Clone Bemuse
git clone https://github.com/bemusic/bemuse.git

# Enter the main repository
cd bemuse

# Install the dependencies
rush update

# Prepare all sub-projects
rush build --to-except bemuse

# Start development server
rush dev

The command `rush build --to-except bemuse` prepares the sub-projects other than the game itself.

The reason for Rush is the sub-projects table, which lists four packages published to npm independently of the game.

`bms` is the JavaScript BMS parser. `bmson` is the JavaScript bmson parser. `bemuse-tools` is for hosting your own music server, with documentation linked. And `bemuse-indexer` is a library for scanning a directory for BMS and bmson files.

That is a genuinely reusable set. If you are building tooling around BMS charts rather than a game, the parser and the indexer are the parts you want, and they are not coupled to the game.

The repository root confirms the structure with `rush.json`, `packages/`, `changelog/`, `common/`, `e2e/`, `bemuse/` for the app itself, `website/` for the documentation site, plus a `.devcontainer/`, a `.gitpod.yml`, a `.semgrep.yml` and a `.sonarcloud.properties`.

The tooling signals are good: CircleCI for builds, Codecov for coverage, SonarCloud for the quality gate and maintainability rating, and Prettier and ESLint for formatting.

One caveat is stated for developers: online ranking features are not available, so a local build does not have the leaderboard.

Editorial conclusion

Adopt Bemuse if you want to play or host BMS format music in a browser, since the parsers and the self-hosted music server are published separately from the game. Skip it if you want a native rhythm game or a modern chart format, since BMS is its format. Verify first that Chrome is acceptable in your environment, because the README recommends it and an offline ranking is not available in a local development setup.

Frequently asked questions

What file format does Bemuse play?

BMS format, with a separate bmson parser included for the JSON version of the same chart format. The README says over 5,000 BMS songs are published by the community, and you can also drag a folder of BMS files into the game to play custom songs.

How do I set up a development environment for Bemuse?

Install Node.js and Rush with `npm install --global @microsoft/rush`, clone the repository, then run `rush update`, `rush build --to-except bemuse` to build everything except the game, and `rush dev` to start the development server. The Developer Guide is linked from the README.

What controllers does Bemuse support?

Keyboard mode uses seven keys. BMS mode adds a turntable and supports an IIDX controller or a MIDI controller. The README also recommends playing in Google Chrome and notes that online ranking features are not available in a local development setup.

Official sources

  1. bemusic/bemuse on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/bemusic-bemuse.svg)](https://hysenlabs.com/projects/bemusic-bemuse)

Was this useful?