No description
				
			
		| .vscode | ||
| genres | ||
| libs/rust | ||
| metadata | ||
| schema | ||
| translations | ||
| .editorconfig | ||
| .env.example | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .prettierrc | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
| requirements.txt | ||
Spotify Genrebase
This repository is an attempt to collect information about the currently 6271 genres on Spotify. This includes localized names, description texts, countries, languages and a simple hierarchical structure.
This project aims to provide the necessary data for the following use cases:
- Display an artist's genres as served by the Spotify API using pretty, localized names
- Display all genres as a tree for easy navigation
- Show the user relevant genres depending on their configured locale
- Flatten genres into a more simple structure for organization (e.g.
symphonic melodic death metal->metal)
Package format
Genre metadata
Path: genres.json
{
  "indie rock": {
    "parent": "rock",
    "language": "en",
    "country": "DE",
    "region": "DH",
    "rank": 91,
    "playlists": {
      "2018": "4hEtcsHM3c35tEuDzIpbPf",
      "2019": "7JdvwjoMsTgzdxSuEPQx2P",
      "2020": "3Zcsc2oJjZCKMTXdgyx8jh",
      "2021": "2vnNPYH27nCaClMbPYdJWg",
      "2022": "4IvGeVlcJB2ZcrTNtkpv8m",
      "2023": "0Rwl2tuvaiGbHTdQ5YxXHN",
      "edge": "1Xf43rER49rVtWjinjP5fw",
      "intro": "57LVDJMvyx5crhWfpFQfgJ",
      "pulse": "6zj2ZyaP4WLzE5AhilyeX0",
      "sound": "4XXr357Jej7eUBh7XPK8hb"
    },
    "metagenre": false,
    "deprecated": false
  }
}
Genre tree
Path: tree/tree.{lang}.json
[
  {
    "id": "singer-songwriter",
    "name": "Singer-Songwriter",
    "rank": 48,
    "playlists": {
      "sound": "6gD9fCYGxsT9A8t3BHDVuj"
    },
    "children": [
      {
        "id": "scottish singer-songwriter",
        "name": "Schottischer Singer-Songwriter",
        "country": "UK",
        "rank": 1117,
        "playlists": {
          "sound": "2r6lIp87MMXvjAfJRg7Rgo"
        }
      }
    ]
  }
]
Translations
Path: lang/{lang}.json
{
  "<ID>": "Name",
  "indie rock": "Indie rock"
}
Development
Update genre metadata
# Update genres from everynoise.com (updates everynoise_genres.json)
python genres/get_everynoise.py
# Write updated genres to metadata files
python genres/genres_to_meta.py genres2meta
npx prettier -w metadata/*
# Annotate new genres (add parent, country, language)
# Validate genre metadata
python genres/genres_to_meta.py validate
# Update _main translation
python genres/genres_to_meta.py maketl
# Scrape playlist IDs
python genres/genres_to_meta.py scrapePlaylists
python genres/genres_to_meta.py scrapePlaylistsYear --year 2023
npx prettier -w metadata/*
Create translation
python genres/genres_to_meta.py newtl --file translations/xy.json