{"id":18377888,"url":"https://github.com/florczakraf/stepmania-chart-db-generator","last_synced_at":"2025-04-11T05:57:15.157Z","repository":{"id":85584828,"uuid":"502663062","full_name":"florczakraf/stepmania-chart-db-generator","owner":"florczakraf","description":"Generate filesystem-based database of stepmania charts based on their hashes","archived":false,"fork":false,"pushed_at":"2025-03-09T13:54:22.000Z","size":75,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T05:57:11.921Z","etag":null,"topics":["boogiestats","groovestats","itgmania","simply-love","stepmania"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/florczakraf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-12T16:03:52.000Z","updated_at":"2025-01-19T00:01:21.000Z","dependencies_parsed_at":"2024-06-09T21:33:11.077Z","dependency_job_id":"66175664-8a7e-4b05-8732-b5dec3d383ba","html_url":"https://github.com/florczakraf/stepmania-chart-db-generator","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/florczakraf%2Fstepmania-chart-db-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/florczakraf%2Fstepmania-chart-db-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/florczakraf%2Fstepmania-chart-db-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/florczakraf%2Fstepmania-chart-db-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/florczakraf","download_url":"https://codeload.github.com/florczakraf/stepmania-chart-db-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248351406,"owners_count":21089271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boogiestats","groovestats","itgmania","simply-love","stepmania"],"created_at":"2024-11-06T00:29:34.851Z","updated_at":"2025-04-11T05:57:15.131Z","avatar_url":"https://github.com/florczakraf.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StepMania Chart DB Generator\n\n## About\nThis project allows generating a simple filesystem-based database\nof StepMania charts. The database is indexed by the chart hash v3 (as\ndefined by [Simply Love](https://github.com/Simply-Love/Simply-Love-SM5)\ntheme).\n\n## DB Layout\nGeneral layout:\n```\n\u003cdb\u003e/\n  metadata.json\n  charts/\n    00/\n      3afbec6280c8b0.json\n      ...\n    ...\n  packs/\n    pack name.json\n    other pack.json\n    ...\n```\n\n### `metadata.json`\n```\n{\n  \"last_update\": \"2024-10-16T11:58:12.602603+00:00\",\n  \"num_charts\": 3166,\n  \"num_packs\": 10\n}\n```\n`last_update` is expressed in ISO 8601 format.\n\n### `charts`\nThe `\u003cdb\u003e/charts` directory consists of two-level tree:\n```\ndb/\n  00/\n    008e3f43b2eb91.json\n    00c321a2227e2b.json\n    ...\n  01/\n    028a44f02fc616.json\n    ...\n  ...\n  ff/\n    ...\n    fd5865bffd6fa5.json\n```\nthat together form a full hash of the chart. Json fields are self-explanatory.\nHere's an example of a produced json file:\n```json\n{\n  \"artist\": \"CanBlaster\",\n  \"artisttranslit\": \"\",\n  \"diff\": \"Easy\",\n  \"diff_number\": 7,\n  \"diffs\": [\n    \"023afbec6280c8b0\",\n    \"043f62c22e303df9\",\n    \"08b5de7c9b62c2de\",\n    \"277087f060b667cd\",\n    \"61ef33cf4fd06dbd\",\n    \"62962dafbf57c92f\",\n    \"dd66127e808ae70d\",\n    \"ed158967ce6bff8f\",\n    \"fa23868b76969788\"\n  ],\n  \"hash\": \"62962dafbf57c92f\",\n  \"pack_name\": \"ITG Series\",\n  \"packs\": [\n    \"ITG Series\",\n    \"In The Groove 3\",\n    \"itg3\"\n  ],\n  \"steps_type\": \"dance-single\",\n  \"subtitle\": \"Hardkore\",\n  \"subtitletranslit\": \"\",\n  \"title\": \"Disconnected\",\n  \"titletranslit\": \"\"\n}\n```\n`artisttranslit`, `subtitle`, `subtitletranslit`,\n`titletranslit` can be empty strings.\n\n`diffs` are a list of other diffs seen next to this particular chart in a single\nsimfile. It's possible that a single chart exists in multiple packs, thus there\ncan be many different versions of their \"siblings\".\n\nGenerator assumes that the first occurrence of the chart is the \"canonical\" one\nto not change the artist, title, etc. for every pack that contains it later in\nthe parsing process. This allows to perform manual tweaks to the database, for\nexample removing block difficulty from the title that's been added for a\ntournament pack.\n\n### `packs`\nEach pack has a file in `\u003cdb\u003e/packs` directory that contains a list of chart\nhashes within that packs, for example:\n```\n$ cat \"db_v2/packs/Yhono Originals.json\"\n[\"b395e84a3a864b96\", \"a188216a0bc0b837\", \"4526ddf1c2e112e6\", \"dd6c5f9c0c6496ef\", \"96abb92df1877371\"]\n```\n\n## Usage\n```\n$ poetry install\n$ poetry run sm-db-gen --help\n$ poetry run sm-db-gen --workers 12 --db /output/db_v2 /path/to/Songs/ /path/to/other/Songs\n```\n\nThe above command will look for all `.sm` and `.ssc` files in the provided\ndirectory trees and process them in 12 parallel threads. You might want to\ntweak number of workers depending on the type of disk and number of CPU cores\nyou have. On my machine it processed over 125k simfiles in 5 minutes where\ncharts were on an HDD and db was being saved to an SSD, 4c/4t i5-4460 CPU.\n\n## Dev\n```\n$ poetry install\n$ poetry shell\n$ pre-commit\n$ pre-commit run -a\n```\n\n## License\nThe project is licensed under GNU Affero General Public License v3.0 or later.\n\n## Thanks\nHuge thanks to [Ash Garcia](https://github.com/garcia) for creating\n[simfile](https://github.com/garcia/simfile) library that made this project\npossible with fewer headaches (but the content created over the decades\nis wild -- see the parsing workarounds ;).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflorczakraf%2Fstepmania-chart-db-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflorczakraf%2Fstepmania-chart-db-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflorczakraf%2Fstepmania-chart-db-generator/lists"}