BMS Torrent

Goals

The primary goal of this project is to offer a torrent of uncompressed BMS charts, allowing for partial downloads & easy contribution by seeding existing BMS folders. A secondary goal of this project is to offer a hosted index of this torrent mapping md5 & sha256 to the path of the chart in the torrent, allowing for quick discovery, partial downloads and potential future integrations with clients.

What about the Big Sister BMS Project (BSBP)?

The BSBP is an amazing resource! However, the bandwidth and storage costs are a potential burden, and relying on donations to cover costs may be unsustainable in the long term.

A generalised public torrent, uncompressed, allows for longer term preservation of BMS charts, allowing for users to seed directly from their active BMS folder (Assuming they follow a flat directory structure).

This project is not a replacement, or competitor, to the BSBP!

Benefits

By distributing charts via BitTorrent, users can quickly and easily pull specific charts & updates in a distributed manner without relying on a 3rd party to host and bear the cost for serving these files.

New versions of the core .torrent file can be distributed which, through most torrent clients, will only download changed &/ new files. Allowing for quick library updates.

Methodology

This projects core will consist of a portable & easily runnable script which generates both the torrent and an index given a path.

This script will ideally be run on an existing folder containing all charts in popular and common tables.

node generate-torrent.js -- /path/to/folder # Language not set in stone!
ls /out
bms-2025-01-01.torrent    bms-2025-01-01.json 

This torrent can then be distributed by the user who generated it.

Ideally an initial centralised torrent will be created and distributed alongside the index, This simplifies onboarding of new players and ensures a high seed-count for users when downloading. A centralised distributer also allows easier updates to the core torrent when a new version is released with notifications provided to seeders via a chat service1.

Torrents are tagged with their creation date to facilitate easier discussions with people wanting to update &/ check if they are using the latest version.

Foo: "Hey whats the latest torrent"
Bar: "2025-01-01 is the latest right now"
Foo: "Ah I'm behind, can you send the file or magnet link through?"
Bar: "Here you go: <attached file>"

In theory users could seed multiple versions of the torrent. However, there is a small chance of conflicting files if content of a distributed .bms file is changed, without changing the filename.

Folder Structure

Folder structure may be a contentious topic, with some users potentially wanting to merge the contents of the torrent with their existing filesystem & collection of BMS.

A flat hierarchy makes the most sense for simplicity: /root/<chart-name>/<chart>.<extension>

However some people may organise their collections in different ways. This is worth investigating to discover if there are any better ways to organise the torrent.

File formats

Some charts are distributed wth multiple versions. Some with and without videos, .wav & .mp3, etc.

I believe this torrent should distribute "the most correct" version of the chart, which may be a divisive topic. This means that the if a no video version is offered alongside a video version, this torrent will distribute the version with the video.

Regarding audio formats, it's worth investigating and discussing with players. The format .wav makes sense, however some charts are distributed "originally" with massive uncompressed .flac sounds. This may however, be a non-issue in practice.

The Index

Assume the torrent is laid out in the following way:

bms
└ chart-name
  ├ chart-normal.bms
  ├ chart-hyper.bms
  ├ chart-another.bms
  ├ hitsound.wav
  └ video.mp4

Provide a JSON file &/ HTTP endpoint to convert the sha of chart-normal.bms to a path:

GET /path/bf6bcb1370fe4956ceb5ea436bdb63bb HTTP/1.1
content-type: application/json

{
	"path": "/bms/chart-name"
}
{
	"bf6bcb1370fe4956ceb5ea436bdb63bb": "/bms/chart-name",
	"f4d1d4c7bbfa6007835aaab6bfe11435": "/bms/chart-name",
	"911dc9e1f0549ca12990892e113d255b": "/bms/chart-name"
}

A standardised index file can allow for a potential future integration with popular clients, allowing them to integrate with either an external (or internal) bitTorrent client. Allowing charts to be downloaded on the fly.

Footnotes

  1. A custom tracker would potentially allow notifying via the torrent client, however this is potentially out of scope for this initial simple project. RSS Feeds, Discord announcements, Word of mouth, can facilitate update notifications for now.



This page was originally published 20 Jun 2025

Updated 120 days ago (20 Jun 2025)