# pysspm-rhythia
The official python library dedicated to reading, writing, and modifying the SSPM file format from the video game "Rhythia".
> ***Note: This is V2 of `PYSSPM`. This version is a complete rewrite of the original V1, with more "support" and type hinting***
## SSPM libray information
The main library includes these features:
> 1. Reading .SSPM files
> 2. Modifying SSPM data
> 3. Writing .SSPM files
Extras:
> 1. Difficulty Calculation (Not implemented in V2.0)
> 2. Note Classification (Not implmented in V2.0)
## How to install/use
To install the library, run:
```bash
pip install pysspm-rythia
```
to start using the library, create a python script and load up pysspm.
```python
from pysspm_rhythia import read_sspm
# Example of loading a SSPMfile
sspm = read_sspm("*.sspm")
# Example of turning it into a roblox sound space file
with open("output.txt", "w") as f:
f.write(sspm.NOTES2TEXT())
```
> *Functionality does not end there. When reading files, you have full access to all the metadata, and other information stored in the variables.*
**Some common variables you will find are:**
1. `cover_bytes` the byteform of the image if cover was found
2. `audio_bytes` the byteform of the audio in `.mp3` form if audio was found
3. `header`: {"Signature": ..., "Version": ...}
4. `hash`: a SHA-1 hash of the markers (notes) in the map
5. `map_id`: A unique combination using the mappers and map name*
6. `mappers`: a list containing each mapper.
7. `map_name`: The name given to the map.
8. `song_name`: The original name of the audio before imported. Usually left as artist name - song name
9. `custom_values`: NOT IMPLEMENTED | will return a dictionary of found custom blocks.
10. `quantum`: Determins if the level contains ANY float value notes.
11. `notes`: A list of tuples containing all notes. | Example of what it Notes is: `[(x, y, ms), (x, y, ms), (x, y, ms) . . .]`
```python
from pysspm_rhythia import read_sspm, write_sspm
# Example of loading a SSPMfile
sspm = read_sspm("*.sspm")
# changing the decal to be a different image
if sspm.has_cover():
sspm.add_cover() # takes location OR bytes
with open("cover.png", 'rb') as f: # alternate method
sspm.cover_bytes = f.read() # reading the BYTES of the image
# Finally save the sspm file with the newly configured settings
sspm.write('sspmFile.sspm')
# alternatively:
write_sspm(sspm, 'sspmFile.sspm') # takes a pre-configured sspm object
```
you can modify metadata information within sspm with ease
```py
from pysspm_rhythia import read_sspm, write_sspm
sspm = read_sspm("*.sspm")
sspm.mappers.extend('DigitalDemon') # adding another mapper to the mapper list
sspm.write('SSPMFile.sspm')
```
## Advanced guide (W.I.P)
This shows the more advanced things you can do by giving examples of custom written code.
```python
# Not implemented yet...
# Support for custom blocks and AI tagging coming soon..
```
*More advanced documentation will be added in the near future...*
## Function Documentation
A in-depth list of things you can do with this library
WIP FOR V2
## Roadmap (May get completed)
TODO LIST FOR V2: (In order of priority)
- Refactor codebase (~40% done) ⛔
- Add typing support for library ✅
- add proper documentation on github ✅
- add proper documentation in code ✅
- add loading of sspmV2 ✅
- add support for creating sspmV2 ✅
- add support for sspmv1 loading 🔴 (Use Pre-V2.0.0 release to use this for now)
- add custom block support in loading
- Drop numpy dependency
- Implement Extras difficulty calculation (Obsiids method, rhythia-online starCalculation)
- Support for Pheonix/Nova Filetype (When I get my hands on the data structure)
Made with 💖 by DigitalDemon (David Jed)
> Documentation last updated: `2025-07-22` | `V2.0.0`
Raw data
{
"_id": null,
"home_page": null,
"name": "pysspm-rhythia",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "Rhythia, Sound space, SSPM, Rhythm game, pysspm-rhythia, pysspm, nova, phoenyx, SS+M, sspm",
"author": null,
"author_email": "David Jedlovsky <Dev.DavidJed@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/c3/a1/f6374d530c774df2aa330bec8da2ce07100bb6d95df72f4f93f5ff99122b/pysspm-rhythia-2.0.0.tar.gz",
"platform": null,
"description": "# pysspm-rhythia\r\n\r\nThe official python library dedicated to reading, writing, and modifying the SSPM file format from the video game \"Rhythia\".\r\n\r\n> ***Note: This is V2 of `PYSSPM`. This version is a complete rewrite of the original V1, with more \"support\" and type hinting***\r\n\r\n## SSPM libray information\r\n\r\nThe main library includes these features:\r\n\r\n> 1. Reading .SSPM files\r\n> 2. Modifying SSPM data\r\n> 3. Writing .SSPM files\r\n\r\nExtras:\r\n\r\n> 1. Difficulty Calculation (Not implemented in V2.0)\r\n> 2. Note Classification (Not implmented in V2.0)\r\n\r\n## How to install/use\r\n\r\nTo install the library, run:\r\n\r\n```bash\r\npip install pysspm-rythia\r\n```\r\n\r\nto start using the library, create a python script and load up pysspm.\r\n\r\n```python\r\nfrom pysspm_rhythia import read_sspm\r\n\r\n\r\n# Example of loading a SSPMfile\r\nsspm = read_sspm(\"*.sspm\")\r\n\r\n# Example of turning it into a roblox sound space file\r\n\r\nwith open(\"output.txt\", \"w\") as f:\r\n f.write(sspm.NOTES2TEXT())\r\n\r\n```\r\n\r\n> *Functionality does not end there. When reading files, you have full access to all the metadata, and other information stored in the variables.*\r\n\r\n**Some common variables you will find are:**\r\n\r\n1. `cover_bytes` the byteform of the image if cover was found\r\n2. `audio_bytes` the byteform of the audio in `.mp3` form if audio was found\r\n3. `header`: {\"Signature\": ..., \"Version\": ...}\r\n4. `hash`: a SHA-1 hash of the markers (notes) in the map\r\n5. `map_id`: A unique combination using the mappers and map name*\r\n6. `mappers`: a list containing each mapper.\r\n7. `map_name`: The name given to the map.\r\n8. `song_name`: The original name of the audio before imported. Usually left as artist name - song name\r\n9. `custom_values`: NOT IMPLEMENTED | will return a dictionary of found custom blocks.\r\n10. `quantum`: Determins if the level contains ANY float value notes.\r\n11. `notes`: A list of tuples containing all notes. | Example of what it Notes is: `[(x, y, ms), (x, y, ms), (x, y, ms) . . .]`\r\n\r\n```python\r\nfrom pysspm_rhythia import read_sspm, write_sspm\r\n\r\n# Example of loading a SSPMfile\r\nsspm = read_sspm(\"*.sspm\")\r\n\r\n# changing the decal to be a different image\r\nif sspm.has_cover():\r\n sspm.add_cover() # takes location OR bytes\r\n\r\n with open(\"cover.png\", 'rb') as f: # alternate method\r\n sspm.cover_bytes = f.read() # reading the BYTES of the image\r\n\r\n# Finally save the sspm file with the newly configured settings\r\nsspm.write('sspmFile.sspm')\r\n\r\n# alternatively:\r\nwrite_sspm(sspm, 'sspmFile.sspm') # takes a pre-configured sspm object\r\n\r\n```\r\n\r\nyou can modify metadata information within sspm with ease\r\n\r\n```py\r\nfrom pysspm_rhythia import read_sspm, write_sspm\r\n\r\nsspm = read_sspm(\"*.sspm\")\r\n\r\nsspm.mappers.extend('DigitalDemon') # adding another mapper to the mapper list\r\nsspm.write('SSPMFile.sspm')\r\n\r\n```\r\n\r\n## Advanced guide (W.I.P)\r\n\r\nThis shows the more advanced things you can do by giving examples of custom written code.\r\n\r\n```python\r\n\r\n# Not implemented yet...\r\n# Support for custom blocks and AI tagging coming soon..\r\n\r\n```\r\n\r\n*More advanced documentation will be added in the near future...*\r\n\r\n## Function Documentation\r\n\r\nA in-depth list of things you can do with this library\r\n\r\nWIP FOR V2\r\n\r\n## Roadmap (May get completed)\r\n\r\nTODO LIST FOR V2: (In order of priority)\r\n\r\n- Refactor codebase (~40% done) \u26d4\r\n- Add typing support for library \u2705\r\n- add proper documentation on github \u2705\r\n- add proper documentation in code \u2705\r\n- add loading of sspmV2 \u2705\r\n- add support for creating sspmV2 \u2705\r\n- add support for sspmv1 loading \ud83d\udd34 (Use Pre-V2.0.0 release to use this for now)\r\n- add custom block support in loading\r\n- Drop numpy dependency\r\n- Implement Extras difficulty calculation (Obsiids method, rhythia-online starCalculation)\r\n- Support for Pheonix/Nova Filetype (When I get my hands on the data structure)\r\n\r\nMade with \ud83d\udc96 by DigitalDemon (David Jed)\r\n\r\n> Documentation last updated: `2025-07-22` | `V2.0.0`\r\n",
"bugtrack_url": null,
"license": "LGPL-3.0",
"summary": "A Python library dedicated to reading, writing, and modifying the Rhythia SSPM (.sspm) file format",
"version": "2.0.0",
"project_urls": {
"Homepage": "https://github.com/David-Jed/pysspm",
"Issues": "https://github.com/David-Jed/pysspm/issues"
},
"split_keywords": [
"rhythia",
" sound space",
" sspm",
" rhythm game",
" pysspm-rhythia",
" pysspm",
" nova",
" phoenyx",
" ss+m",
" sspm"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6f583efda733095bffd7f7d10229915c3dff9f34d32bf283496d04f3e0133fa5",
"md5": "96dee8ca84994911cdbf8b45001bd8f8",
"sha256": "3b80ff18b1753dc3f0b911d37e1001abf17d637b6d9b55b9109fc14766e89bf0"
},
"downloads": -1,
"filename": "pysspm_rhythia-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "96dee8ca84994911cdbf8b45001bd8f8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 25769,
"upload_time": "2025-07-28T07:29:13",
"upload_time_iso_8601": "2025-07-28T07:29:13.597552Z",
"url": "https://files.pythonhosted.org/packages/6f/58/3efda733095bffd7f7d10229915c3dff9f34d32bf283496d04f3e0133fa5/pysspm_rhythia-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c3a1f6374d530c774df2aa330bec8da2ce07100bb6d95df72f4f93f5ff99122b",
"md5": "fec5b0279e6ab1b9c8821e83e4b31e74",
"sha256": "704dcf27acb5de360ed439b0112521c58ddcdc489ad1adc06e63cc130446cec8"
},
"downloads": -1,
"filename": "pysspm-rhythia-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "fec5b0279e6ab1b9c8821e83e4b31e74",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 26070,
"upload_time": "2025-07-28T07:29:14",
"upload_time_iso_8601": "2025-07-28T07:29:14.428931Z",
"url": "https://files.pythonhosted.org/packages/c3/a1/f6374d530c774df2aa330bec8da2ce07100bb6d95df72f4f93f5ff99122b/pysspm-rhythia-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-28 07:29:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "David-Jed",
"github_project": "pysspm",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pysspm-rhythia"
}