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
-
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. ↩