From b0572d46e8b8d0f750598e262439141d17e3ad65 Mon Sep 17 00:00:00 2001 From: Marvin Schenkel Date: Mon, 23 Feb 2026 19:10:13 +0100 Subject: [PATCH] Add genre icons and SVG handling to imageproxy (#3223) * Add genre icons and SVG handling to imageproxy * Cleanup --- music_assistant/constants.py | 3 +- music_assistant/controllers/media/genres.py | 29 +- music_assistant/controllers/metadata.py | 33 +- music_assistant/controllers/music.py | 6 +- music_assistant/helpers/images.py | 4 +- .../helpers/resources/genres/afrobeats.svg | 111 +++++ .../helpers/resources/genres/ambient.svg | 62 +++ .../genres/anime_and_video_game_music.svg | 103 +++++ .../helpers/resources/genres/asian_music.svg | 121 ++++++ .../helpers/resources/genres/bluegrass.svg | 157 +++++++ .../helpers/resources/genres/blues.svg | 146 +++++++ .../resources/genres/brazilian_music.svg | 160 +++++++ .../helpers/resources/genres/chanson.svg | 158 +++++++ .../resources/genres/childrens_music.svg | 95 +++++ .../resources/genres/christmas_music.svg | 114 +++++ .../helpers/resources/genres/church_music.svg | 100 +++++ .../helpers/resources/genres/classical.svg | 82 ++++ .../helpers/resources/genres/comedy.svg | 68 +++ .../helpers/resources/genres/country.svg | 79 ++++ .../helpers/resources/genres/dance.svg | 189 +++++++++ .../helpers/resources/genres/dark_ambient.svg | 74 ++++ .../helpers/resources/genres/dark_wave.svg | 86 ++++ .../helpers/resources/genres/disco.svg | 168 ++++++++ .../helpers/resources/genres/electronic.svg | 67 +++ .../helpers/resources/genres/experimental.svg | 79 ++++ .../resources/genres/field_recording.svg | 67 +++ .../helpers/resources/genres/folk.svg | 93 +++++ .../helpers/resources/genres/funk.svg | 146 +++++++ .../helpers/resources/genres/gangsta_rap.svg | 203 +++++++++ .../resources/{ => genres}/genre_mapping.json | 0 .../helpers/resources/genres/gospel.svg | 155 +++++++ .../helpers/resources/genres/hip_hop.svg | 175 ++++++++ .../resources/genres/indian_classical.svg | 389 ++++++++++++++++++ .../helpers/resources/genres/industrial.svg | 157 +++++++ .../helpers/resources/genres/jazz.svg | 157 +++++++ .../helpers/resources/genres/klezmer.svg | 172 ++++++++ .../helpers/resources/genres/latin.svg | 190 +++++++++ .../resources/genres/marching_band.svg | 137 ++++++ .../helpers/resources/genres/metal.svg | 180 ++++++++ .../resources/genres/middle_eastern_music.svg | 203 +++++++++ .../helpers/resources/genres/musical.svg | 171 ++++++++ .../helpers/resources/genres/new_age.svg | 138 +++++++ .../helpers/resources/genres/poetry.svg | 87 ++++ .../helpers/resources/genres/polka.svg | 188 +++++++++ .../helpers/resources/genres/pop.svg | 175 ++++++++ .../helpers/resources/genres/psychedelic.svg | 286 +++++++++++++ .../helpers/resources/genres/punk.svg | 196 +++++++++ .../helpers/resources/genres/r_b.svg | 101 +++++ .../helpers/resources/genres/ragtime.svg | 96 +++++ .../helpers/resources/genres/rai.svg | 105 +++++ .../helpers/resources/genres/reggae.svg | 141 +++++++ .../helpers/resources/genres/reggaeton.svg | 160 +++++++ .../helpers/resources/genres/rock.svg | 95 +++++ .../helpers/resources/genres/salsa.svg | 209 ++++++++++ .../resources/genres/singer_songwriter.svg | 103 +++++ .../helpers/resources/genres/ska.svg | 187 +++++++++ .../helpers/resources/genres/soul.svg | 109 +++++ .../resources/genres/sound_effects.svg | 95 +++++ .../helpers/resources/genres/soundtrack.svg | 193 +++++++++ .../helpers/resources/genres/spoken_word.svg | 114 +++++ .../helpers/resources/genres/swing.svg | 152 +++++++ .../helpers/resources/genres/tango.svg | 189 +++++++++ .../helpers/resources/genres/trap.svg | 221 ++++++++++ .../helpers/resources/genres/waltz.svg | 169 ++++++++ .../helpers/resources/genres/wellness.svg | 86 ++++ pyproject.toml | 2 +- 66 files changed, 8474 insertions(+), 12 deletions(-) create mode 100644 music_assistant/helpers/resources/genres/afrobeats.svg create mode 100644 music_assistant/helpers/resources/genres/ambient.svg create mode 100644 music_assistant/helpers/resources/genres/anime_and_video_game_music.svg create mode 100644 music_assistant/helpers/resources/genres/asian_music.svg create mode 100644 music_assistant/helpers/resources/genres/bluegrass.svg create mode 100644 music_assistant/helpers/resources/genres/blues.svg create mode 100644 music_assistant/helpers/resources/genres/brazilian_music.svg create mode 100644 music_assistant/helpers/resources/genres/chanson.svg create mode 100644 music_assistant/helpers/resources/genres/childrens_music.svg create mode 100644 music_assistant/helpers/resources/genres/christmas_music.svg create mode 100644 music_assistant/helpers/resources/genres/church_music.svg create mode 100644 music_assistant/helpers/resources/genres/classical.svg create mode 100644 music_assistant/helpers/resources/genres/comedy.svg create mode 100644 music_assistant/helpers/resources/genres/country.svg create mode 100644 music_assistant/helpers/resources/genres/dance.svg create mode 100644 music_assistant/helpers/resources/genres/dark_ambient.svg create mode 100644 music_assistant/helpers/resources/genres/dark_wave.svg create mode 100644 music_assistant/helpers/resources/genres/disco.svg create mode 100644 music_assistant/helpers/resources/genres/electronic.svg create mode 100644 music_assistant/helpers/resources/genres/experimental.svg create mode 100644 music_assistant/helpers/resources/genres/field_recording.svg create mode 100644 music_assistant/helpers/resources/genres/folk.svg create mode 100644 music_assistant/helpers/resources/genres/funk.svg create mode 100644 music_assistant/helpers/resources/genres/gangsta_rap.svg rename music_assistant/helpers/resources/{ => genres}/genre_mapping.json (100%) create mode 100644 music_assistant/helpers/resources/genres/gospel.svg create mode 100644 music_assistant/helpers/resources/genres/hip_hop.svg create mode 100644 music_assistant/helpers/resources/genres/indian_classical.svg create mode 100644 music_assistant/helpers/resources/genres/industrial.svg create mode 100644 music_assistant/helpers/resources/genres/jazz.svg create mode 100644 music_assistant/helpers/resources/genres/klezmer.svg create mode 100644 music_assistant/helpers/resources/genres/latin.svg create mode 100644 music_assistant/helpers/resources/genres/marching_band.svg create mode 100644 music_assistant/helpers/resources/genres/metal.svg create mode 100644 music_assistant/helpers/resources/genres/middle_eastern_music.svg create mode 100644 music_assistant/helpers/resources/genres/musical.svg create mode 100644 music_assistant/helpers/resources/genres/new_age.svg create mode 100644 music_assistant/helpers/resources/genres/poetry.svg create mode 100644 music_assistant/helpers/resources/genres/polka.svg create mode 100644 music_assistant/helpers/resources/genres/pop.svg create mode 100644 music_assistant/helpers/resources/genres/psychedelic.svg create mode 100644 music_assistant/helpers/resources/genres/punk.svg create mode 100644 music_assistant/helpers/resources/genres/r_b.svg create mode 100644 music_assistant/helpers/resources/genres/ragtime.svg create mode 100644 music_assistant/helpers/resources/genres/rai.svg create mode 100644 music_assistant/helpers/resources/genres/reggae.svg create mode 100644 music_assistant/helpers/resources/genres/reggaeton.svg create mode 100644 music_assistant/helpers/resources/genres/rock.svg create mode 100644 music_assistant/helpers/resources/genres/salsa.svg create mode 100644 music_assistant/helpers/resources/genres/singer_songwriter.svg create mode 100644 music_assistant/helpers/resources/genres/ska.svg create mode 100644 music_assistant/helpers/resources/genres/soul.svg create mode 100644 music_assistant/helpers/resources/genres/sound_effects.svg create mode 100644 music_assistant/helpers/resources/genres/soundtrack.svg create mode 100644 music_assistant/helpers/resources/genres/spoken_word.svg create mode 100644 music_assistant/helpers/resources/genres/swing.svg create mode 100644 music_assistant/helpers/resources/genres/tango.svg create mode 100644 music_assistant/helpers/resources/genres/trap.svg create mode 100644 music_assistant/helpers/resources/genres/waltz.svg create mode 100644 music_assistant/helpers/resources/genres/wellness.svg diff --git a/music_assistant/constants.py b/music_assistant/constants.py index 88061829..ee908258 100644 --- a/music_assistant/constants.py +++ b/music_assistant/constants.py @@ -53,7 +53,8 @@ VARIOUS_ARTISTS_MBID: Final[str] = "89ad4ac3-39f7-470e-963a-56509c546377" RESOURCES_DIR: Final[pathlib.Path] = ( pathlib.Path(__file__).parent.resolve().joinpath("helpers/resources") ) -GENRE_MAPPING_FILE: Final[pathlib.Path] = RESOURCES_DIR.joinpath("genre_mapping.json") +GENRE_ICONS_DIR: Final[pathlib.Path] = RESOURCES_DIR.joinpath("genres") +GENRE_MAPPING_FILE: Final[pathlib.Path] = GENRE_ICONS_DIR.joinpath("genre_mapping.json") ANNOUNCE_ALERT_FILE: Final[str] = str(RESOURCES_DIR.joinpath("announce.mp3")) SILENCE_FILE: Final[str] = str(RESOURCES_DIR.joinpath("silence.mp3")) diff --git a/music_assistant/controllers/media/genres.py b/music_assistant/controllers/media/genres.py index b0ff61d1..1c601012 100644 --- a/music_assistant/controllers/media/genres.py +++ b/music_assistant/controllers/media/genres.py @@ -8,11 +8,13 @@ import logging import time from typing import TYPE_CHECKING, Any -from music_assistant_models.enums import EventType, MediaType +from music_assistant_models.enums import EventType, ImageType, MediaType from music_assistant_models.media_items import ( Album, Artist, Genre, + MediaItemImage, + MediaItemMetadata, RecommendationFolder, Track, ) @@ -29,6 +31,7 @@ from music_assistant.constants import ( DB_TABLE_RADIOS, DB_TABLE_TRACKS, DEFAULT_GENRE_MAPPING, + GENRE_ICONS_DIR, ) from music_assistant.helpers.compare import create_safe_string from music_assistant.helpers.database import UNSET @@ -131,6 +134,24 @@ class GenreController(MediaControllerBase[Genre]): # Run genre mapping scanner after library sync completes self.mass.subscribe(self._on_sync_tasks_updated, EventType.SYNC_TASKS_UPDATED) + @staticmethod + def _get_genre_icon_metadata(translation_key: str | None) -> MediaItemMetadata | None: + """Build metadata with genre icon image if an SVG exists for the translation key. + + :param translation_key: The genre's translation key (matches SVG filename). + """ + if not translation_key: + return None + icon_path = GENRE_ICONS_DIR / f"{translation_key}.svg" + if not icon_path.is_file(): + return None + image = MediaItemImage( + type=ImageType.THUMB, + path=str(icon_path), + provider="builtin", + ) + return MediaItemMetadata(images=UniqueList([image])) + @staticmethod def _dedup_aliases(existing: list[str], new: list[str]) -> list[str]: """Merge alias lists, deduplicating by normalized form (create_safe_string). @@ -489,15 +510,17 @@ class GenreController(MediaControllerBase[Genre]): continue # Create new genre + translation_key = entry.get("translation_key") + icon_metadata = self._get_genre_icon_metadata(translation_key) genre_id = await self.mass.music.database.insert( DB_TABLE_GENRES, { "name": name_value, "sort_name": sort_name, - "translation_key": entry.get("translation_key"), + "translation_key": translation_key, "description": None, "favorite": 0, - "metadata": serialize_to_json({}), + "metadata": serialize_to_json(icon_metadata.to_dict() if icon_metadata else {}), "external_ids": serialize_to_json(set()), "genre_aliases": serialize_to_json(all_aliases), "play_count": 0, diff --git a/music_assistant/controllers/metadata.py b/music_assistant/controllers/metadata.py index 39295885..a22623e8 100644 --- a/music_assistant/controllers/metadata.py +++ b/music_assistant/controllers/metadata.py @@ -6,6 +6,7 @@ import asyncio import collections import logging import os +import pathlib import random import urllib.parse from base64 import b64encode @@ -51,7 +52,7 @@ from music_assistant.constants import ( ) from music_assistant.helpers.api import api_command from music_assistant.helpers.compare import compare_strings -from music_assistant.helpers.images import create_collage, get_image_thumb +from music_assistant.helpers.images import create_collage, get_image_data, get_image_thumb from music_assistant.helpers.security import is_safe_path from music_assistant.helpers.throttle_retry import Throttler from music_assistant.models.core_controller import CoreController @@ -64,6 +65,18 @@ if TYPE_CHECKING: from music_assistant.models.metadata_provider import MetadataProvider from music_assistant.providers.musicbrainz import MusicbrainzProvider + +def _detect_image_format(path: str) -> str: + """Detect image format from file path extension, defaulting to jpg.""" + match pathlib.PurePath(path).suffix.lower(): + case ".svg": + return "svg" + case ".png": + return "png" + case _: + return "jpg" + + LOCALES = { "af_ZA": "African", "ar_AE": "Arabic (United Arab Emirates)", @@ -404,7 +417,10 @@ class MetaDataController(CoreController): ) -> str: """Get (proxied) URL for MediaItemImage.""" if image_format is None: - image_format = "png" if image.path.lower().endswith(".png") else "jpg" + image_format = _detect_image_format(image.path) + if image_format == "svg": + # SVGs don't need resizing + size = 0 if not image.remotely_accessible or prefer_proxy or size: # return imageproxy url for images that need to be resolved # the original path is double encoded @@ -430,13 +446,19 @@ class MetaDataController(CoreController): if not self.mass.get_provider(provider) and not path.startswith("http"): raise ProviderUnavailableError if image_format is None: - image_format = "png" if path.lower().endswith(".png") else "jpg" + image_format = _detect_image_format(path) if provider == "builtin" and path.startswith("/collage/"): # special case for collage images collage_rel = path.split("/collage/")[-1] if not is_safe_path(collage_rel): raise FileNotFoundError("Invalid collage path") path = os.path.join(self._collage_images_dir, collage_rel) + if image_format == "svg": + svg_bytes = await get_image_data(self.mass, path, provider) + if base64: + enc_image = b64encode(svg_bytes).decode() + return f"data:image/svg+xml;base64,{enc_image}" + return svg_bytes thumbnail_bytes = await get_image_thumb( self.mass, path, size=size, provider=provider, image_format=image_format ) @@ -455,7 +477,7 @@ class MetaDataController(CoreController): size = int(request.query.get("size", "0")) image_format = request.query.get("fmt", None) if image_format is None: - image_format = "png" if path.lower().endswith(".png") else "jpg" + image_format = _detect_image_format(path) if not self.mass.get_provider(provider) and not path.startswith("http"): return web.Response(status=404) if "%" in path: @@ -467,10 +489,11 @@ class MetaDataController(CoreController): ) # we set the cache header to 1 year (forever) # assuming that images do not/rarely change + content_type = "image/svg+xml" if image_format == "svg" else f"image/{image_format}" return web.Response( body=image_data, headers={"Cache-Control": "max-age=31536000", "Access-Control-Allow-Origin": "*"}, - content_type=f"image/{image_format}", + content_type=content_type, ) except Exception as err: # broadly catch all exceptions here to ensure we dont crash the request handler diff --git a/music_assistant/controllers/music.py b/music_assistant/controllers/music.py index 03e833a9..82b813bc 100644 --- a/music_assistant/controllers/music.py +++ b/music_assistant/controllers/music.py @@ -2306,13 +2306,17 @@ class MusicController(CoreController): if search_name in genre_cache: return genre_cache[search_name] aliases_json = serialize_to_json(aliases or [name]) + icon_metadata = GenreController._get_genre_icon_metadata(translation_key) + metadata_json = ( + serialize_to_json(icon_metadata.to_dict()) if icon_metadata else empty_metadata + ) row_id = await db.execute_insert( genre_insert_sql, ( name, sort_name, translation_key, - empty_metadata, + metadata_json, empty_external_ids, aliases_json, search_name, diff --git a/music_assistant/helpers/images.py b/music_assistant/helpers/images.py index 90e5058e..2670705c 100644 --- a/music_assistant/helpers/images.py +++ b/music_assistant/helpers/images.py @@ -88,7 +88,9 @@ async def get_image_data(mass: MusicAssistant, path_or_url: str, provider: str) if path_or_url.startswith("data:image"): return b64decode(path_or_url.split(",")[-1]) # handle FILE location (of type image) - if path_or_url.endswith(("jpg", "JPG", "png", "PNG", "jpeg")) and is_safe_path(path_or_url): + if path_or_url.endswith(("jpg", "JPG", "png", "PNG", "jpeg", "svg", "SVG")) and is_safe_path( + path_or_url + ): if await asyncio.to_thread(os.path.isfile, path_or_url): async with aiofiles.open(path_or_url, "rb") as _file: return cast("bytes", await _file.read()) diff --git a/music_assistant/helpers/resources/genres/afrobeats.svg b/music_assistant/helpers/resources/genres/afrobeats.svg new file mode 100644 index 00000000..c9de9d34 --- /dev/null +++ b/music_assistant/helpers/resources/genres/afrobeats.svg @@ -0,0 +1,111 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/ambient.svg b/music_assistant/helpers/resources/genres/ambient.svg new file mode 100644 index 00000000..d7f5586e --- /dev/null +++ b/music_assistant/helpers/resources/genres/ambient.svg @@ -0,0 +1,62 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/anime_and_video_game_music.svg b/music_assistant/helpers/resources/genres/anime_and_video_game_music.svg new file mode 100644 index 00000000..a369d755 --- /dev/null +++ b/music_assistant/helpers/resources/genres/anime_and_video_game_music.svg @@ -0,0 +1,103 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/asian_music.svg b/music_assistant/helpers/resources/genres/asian_music.svg new file mode 100644 index 00000000..079c4793 --- /dev/null +++ b/music_assistant/helpers/resources/genres/asian_music.svg @@ -0,0 +1,121 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/bluegrass.svg b/music_assistant/helpers/resources/genres/bluegrass.svg new file mode 100644 index 00000000..9b81e90a --- /dev/null +++ b/music_assistant/helpers/resources/genres/bluegrass.svg @@ -0,0 +1,157 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/blues.svg b/music_assistant/helpers/resources/genres/blues.svg new file mode 100644 index 00000000..c0d2ee0c --- /dev/null +++ b/music_assistant/helpers/resources/genres/blues.svg @@ -0,0 +1,146 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/brazilian_music.svg b/music_assistant/helpers/resources/genres/brazilian_music.svg new file mode 100644 index 00000000..847312bf --- /dev/null +++ b/music_assistant/helpers/resources/genres/brazilian_music.svg @@ -0,0 +1,160 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/chanson.svg b/music_assistant/helpers/resources/genres/chanson.svg new file mode 100644 index 00000000..c3692eb7 --- /dev/null +++ b/music_assistant/helpers/resources/genres/chanson.svg @@ -0,0 +1,158 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/childrens_music.svg b/music_assistant/helpers/resources/genres/childrens_music.svg new file mode 100644 index 00000000..88a99839 --- /dev/null +++ b/music_assistant/helpers/resources/genres/childrens_music.svg @@ -0,0 +1,95 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/christmas_music.svg b/music_assistant/helpers/resources/genres/christmas_music.svg new file mode 100644 index 00000000..b667479d --- /dev/null +++ b/music_assistant/helpers/resources/genres/christmas_music.svg @@ -0,0 +1,114 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/church_music.svg b/music_assistant/helpers/resources/genres/church_music.svg new file mode 100644 index 00000000..85a99224 --- /dev/null +++ b/music_assistant/helpers/resources/genres/church_music.svg @@ -0,0 +1,100 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/classical.svg b/music_assistant/helpers/resources/genres/classical.svg new file mode 100644 index 00000000..65a78364 --- /dev/null +++ b/music_assistant/helpers/resources/genres/classical.svg @@ -0,0 +1,82 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/comedy.svg b/music_assistant/helpers/resources/genres/comedy.svg new file mode 100644 index 00000000..cfb053ce --- /dev/null +++ b/music_assistant/helpers/resources/genres/comedy.svg @@ -0,0 +1,68 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/country.svg b/music_assistant/helpers/resources/genres/country.svg new file mode 100644 index 00000000..ff1bd78f --- /dev/null +++ b/music_assistant/helpers/resources/genres/country.svg @@ -0,0 +1,79 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/dance.svg b/music_assistant/helpers/resources/genres/dance.svg new file mode 100644 index 00000000..ccd53442 --- /dev/null +++ b/music_assistant/helpers/resources/genres/dance.svg @@ -0,0 +1,189 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/dark_ambient.svg b/music_assistant/helpers/resources/genres/dark_ambient.svg new file mode 100644 index 00000000..e89ee757 --- /dev/null +++ b/music_assistant/helpers/resources/genres/dark_ambient.svg @@ -0,0 +1,74 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/dark_wave.svg b/music_assistant/helpers/resources/genres/dark_wave.svg new file mode 100644 index 00000000..7f5f58e3 --- /dev/null +++ b/music_assistant/helpers/resources/genres/dark_wave.svg @@ -0,0 +1,86 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/disco.svg b/music_assistant/helpers/resources/genres/disco.svg new file mode 100644 index 00000000..a882beb7 --- /dev/null +++ b/music_assistant/helpers/resources/genres/disco.svg @@ -0,0 +1,168 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/electronic.svg b/music_assistant/helpers/resources/genres/electronic.svg new file mode 100644 index 00000000..8e431394 --- /dev/null +++ b/music_assistant/helpers/resources/genres/electronic.svg @@ -0,0 +1,67 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + diff --git a/music_assistant/helpers/resources/genres/experimental.svg b/music_assistant/helpers/resources/genres/experimental.svg new file mode 100644 index 00000000..4482ebc4 --- /dev/null +++ b/music_assistant/helpers/resources/genres/experimental.svg @@ -0,0 +1,79 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/field_recording.svg b/music_assistant/helpers/resources/genres/field_recording.svg new file mode 100644 index 00000000..bcd0982e --- /dev/null +++ b/music_assistant/helpers/resources/genres/field_recording.svg @@ -0,0 +1,67 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/folk.svg b/music_assistant/helpers/resources/genres/folk.svg new file mode 100644 index 00000000..5994097d --- /dev/null +++ b/music_assistant/helpers/resources/genres/folk.svg @@ -0,0 +1,93 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/funk.svg b/music_assistant/helpers/resources/genres/funk.svg new file mode 100644 index 00000000..3638d0ff --- /dev/null +++ b/music_assistant/helpers/resources/genres/funk.svg @@ -0,0 +1,146 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/gangsta_rap.svg b/music_assistant/helpers/resources/genres/gangsta_rap.svg new file mode 100644 index 00000000..8f4f696c --- /dev/null +++ b/music_assistant/helpers/resources/genres/gangsta_rap.svg @@ -0,0 +1,203 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genre_mapping.json b/music_assistant/helpers/resources/genres/genre_mapping.json similarity index 100% rename from music_assistant/helpers/resources/genre_mapping.json rename to music_assistant/helpers/resources/genres/genre_mapping.json diff --git a/music_assistant/helpers/resources/genres/gospel.svg b/music_assistant/helpers/resources/genres/gospel.svg new file mode 100644 index 00000000..52cbd896 --- /dev/null +++ b/music_assistant/helpers/resources/genres/gospel.svg @@ -0,0 +1,155 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/hip_hop.svg b/music_assistant/helpers/resources/genres/hip_hop.svg new file mode 100644 index 00000000..8eee8eaf --- /dev/null +++ b/music_assistant/helpers/resources/genres/hip_hop.svg @@ -0,0 +1,175 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/indian_classical.svg b/music_assistant/helpers/resources/genres/indian_classical.svg new file mode 100644 index 00000000..9a32d71e --- /dev/null +++ b/music_assistant/helpers/resources/genres/indian_classical.svg @@ -0,0 +1,389 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/industrial.svg b/music_assistant/helpers/resources/genres/industrial.svg new file mode 100644 index 00000000..33fc4254 --- /dev/null +++ b/music_assistant/helpers/resources/genres/industrial.svg @@ -0,0 +1,157 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/jazz.svg b/music_assistant/helpers/resources/genres/jazz.svg new file mode 100644 index 00000000..e321a634 --- /dev/null +++ b/music_assistant/helpers/resources/genres/jazz.svg @@ -0,0 +1,157 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/klezmer.svg b/music_assistant/helpers/resources/genres/klezmer.svg new file mode 100644 index 00000000..2d1333fe --- /dev/null +++ b/music_assistant/helpers/resources/genres/klezmer.svg @@ -0,0 +1,172 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/latin.svg b/music_assistant/helpers/resources/genres/latin.svg new file mode 100644 index 00000000..c1889329 --- /dev/null +++ b/music_assistant/helpers/resources/genres/latin.svg @@ -0,0 +1,190 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/marching_band.svg b/music_assistant/helpers/resources/genres/marching_band.svg new file mode 100644 index 00000000..90216758 --- /dev/null +++ b/music_assistant/helpers/resources/genres/marching_band.svg @@ -0,0 +1,137 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/metal.svg b/music_assistant/helpers/resources/genres/metal.svg new file mode 100644 index 00000000..1ba6cf37 --- /dev/null +++ b/music_assistant/helpers/resources/genres/metal.svg @@ -0,0 +1,180 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/middle_eastern_music.svg b/music_assistant/helpers/resources/genres/middle_eastern_music.svg new file mode 100644 index 00000000..7e18ceaf --- /dev/null +++ b/music_assistant/helpers/resources/genres/middle_eastern_music.svg @@ -0,0 +1,203 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/musical.svg b/music_assistant/helpers/resources/genres/musical.svg new file mode 100644 index 00000000..1d9cf7c3 --- /dev/null +++ b/music_assistant/helpers/resources/genres/musical.svg @@ -0,0 +1,171 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/new_age.svg b/music_assistant/helpers/resources/genres/new_age.svg new file mode 100644 index 00000000..3384d9d2 --- /dev/null +++ b/music_assistant/helpers/resources/genres/new_age.svg @@ -0,0 +1,138 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/poetry.svg b/music_assistant/helpers/resources/genres/poetry.svg new file mode 100644 index 00000000..7d1f5293 --- /dev/null +++ b/music_assistant/helpers/resources/genres/poetry.svg @@ -0,0 +1,87 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/polka.svg b/music_assistant/helpers/resources/genres/polka.svg new file mode 100644 index 00000000..6dcb891b --- /dev/null +++ b/music_assistant/helpers/resources/genres/polka.svg @@ -0,0 +1,188 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/pop.svg b/music_assistant/helpers/resources/genres/pop.svg new file mode 100644 index 00000000..be4a4ab7 --- /dev/null +++ b/music_assistant/helpers/resources/genres/pop.svg @@ -0,0 +1,175 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/psychedelic.svg b/music_assistant/helpers/resources/genres/psychedelic.svg new file mode 100644 index 00000000..2b4463ee --- /dev/null +++ b/music_assistant/helpers/resources/genres/psychedelic.svg @@ -0,0 +1,286 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/punk.svg b/music_assistant/helpers/resources/genres/punk.svg new file mode 100644 index 00000000..1a1188dd --- /dev/null +++ b/music_assistant/helpers/resources/genres/punk.svg @@ -0,0 +1,196 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/r_b.svg b/music_assistant/helpers/resources/genres/r_b.svg new file mode 100644 index 00000000..2eb4d91d --- /dev/null +++ b/music_assistant/helpers/resources/genres/r_b.svg @@ -0,0 +1,101 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/ragtime.svg b/music_assistant/helpers/resources/genres/ragtime.svg new file mode 100644 index 00000000..bcea2c5c --- /dev/null +++ b/music_assistant/helpers/resources/genres/ragtime.svg @@ -0,0 +1,96 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/rai.svg b/music_assistant/helpers/resources/genres/rai.svg new file mode 100644 index 00000000..49e47e9c --- /dev/null +++ b/music_assistant/helpers/resources/genres/rai.svg @@ -0,0 +1,105 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/reggae.svg b/music_assistant/helpers/resources/genres/reggae.svg new file mode 100644 index 00000000..01bfb2d8 --- /dev/null +++ b/music_assistant/helpers/resources/genres/reggae.svg @@ -0,0 +1,141 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/reggaeton.svg b/music_assistant/helpers/resources/genres/reggaeton.svg new file mode 100644 index 00000000..e70afa34 --- /dev/null +++ b/music_assistant/helpers/resources/genres/reggaeton.svg @@ -0,0 +1,160 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/rock.svg b/music_assistant/helpers/resources/genres/rock.svg new file mode 100644 index 00000000..20169a05 --- /dev/null +++ b/music_assistant/helpers/resources/genres/rock.svg @@ -0,0 +1,95 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/salsa.svg b/music_assistant/helpers/resources/genres/salsa.svg new file mode 100644 index 00000000..2426ddfc --- /dev/null +++ b/music_assistant/helpers/resources/genres/salsa.svg @@ -0,0 +1,209 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/singer_songwriter.svg b/music_assistant/helpers/resources/genres/singer_songwriter.svg new file mode 100644 index 00000000..c70d0059 --- /dev/null +++ b/music_assistant/helpers/resources/genres/singer_songwriter.svg @@ -0,0 +1,103 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/ska.svg b/music_assistant/helpers/resources/genres/ska.svg new file mode 100644 index 00000000..112e9abd --- /dev/null +++ b/music_assistant/helpers/resources/genres/ska.svg @@ -0,0 +1,187 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/soul.svg b/music_assistant/helpers/resources/genres/soul.svg new file mode 100644 index 00000000..1cfabf0e --- /dev/null +++ b/music_assistant/helpers/resources/genres/soul.svg @@ -0,0 +1,109 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/sound_effects.svg b/music_assistant/helpers/resources/genres/sound_effects.svg new file mode 100644 index 00000000..60e10866 --- /dev/null +++ b/music_assistant/helpers/resources/genres/sound_effects.svg @@ -0,0 +1,95 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/soundtrack.svg b/music_assistant/helpers/resources/genres/soundtrack.svg new file mode 100644 index 00000000..4487d22d --- /dev/null +++ b/music_assistant/helpers/resources/genres/soundtrack.svg @@ -0,0 +1,193 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/spoken_word.svg b/music_assistant/helpers/resources/genres/spoken_word.svg new file mode 100644 index 00000000..8d13ef2d --- /dev/null +++ b/music_assistant/helpers/resources/genres/spoken_word.svg @@ -0,0 +1,114 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/swing.svg b/music_assistant/helpers/resources/genres/swing.svg new file mode 100644 index 00000000..afd715ea --- /dev/null +++ b/music_assistant/helpers/resources/genres/swing.svg @@ -0,0 +1,152 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/tango.svg b/music_assistant/helpers/resources/genres/tango.svg new file mode 100644 index 00000000..a2b54414 --- /dev/null +++ b/music_assistant/helpers/resources/genres/tango.svg @@ -0,0 +1,189 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/trap.svg b/music_assistant/helpers/resources/genres/trap.svg new file mode 100644 index 00000000..910220bc --- /dev/null +++ b/music_assistant/helpers/resources/genres/trap.svg @@ -0,0 +1,221 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/waltz.svg b/music_assistant/helpers/resources/genres/waltz.svg new file mode 100644 index 00000000..bf3c36a2 --- /dev/null +++ b/music_assistant/helpers/resources/genres/waltz.svg @@ -0,0 +1,169 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + diff --git a/music_assistant/helpers/resources/genres/wellness.svg b/music_assistant/helpers/resources/genres/wellness.svg new file mode 100644 index 00000000..9710ef24 --- /dev/null +++ b/music_assistant/helpers/resources/genres/wellness.svg @@ -0,0 +1,86 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + diff --git a/pyproject.toml b/pyproject.toml index 36a9b160..199f159f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,7 +75,7 @@ mass = "music_assistant.__main__:main" ignore-words-list = "provid,hass,followings,childs,explict,additionals,commitish,nam," skip = """*.js,*.svg,\ music_assistant/providers/itunes_podcasts/itunes_country_codes.json,\ -music_assistant/helpers/resources/genre_mapping.json,\ +music_assistant/helpers/resources/genres/genre_mapping.json,\ """ [tool.setuptools] -- 2.34.1