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