feat(hero): album-artist backdrop, configurable per-surface sources, and prefetch (#1193)

* refactor(cover): extract shared pickArtistBackdrop priority helper

* feat(hero): show the album artist's fanart as the mainstage hero backdrop

* feat(settings): configurable per-surface artist backdrop sources

Each artist-backdrop surface (mainstage hero, artist-detail header, fullscreen player) gets its own enable toggle + an ordered, individually-toggleable source list, configured under External Artwork Scraper on the Integrations tab (shown when the scraper is on). Reorder via the shared useDragSource/psy-drop drag infra plus keyboard-accessible up/down buttons; each source has its own on/off.

The shared chooser pickArtistBackdrop is generalised to resolveBackdrop + backdropFromConfig (ordered candidate list with the same pending/miss/centred-framing semantics), so all three surfaces resolve identically. themeStore persist bumped to v2; defaults reproduce today's order, so there is no visible change without user action.

Gating decoupled: the three surfaces are gated solely by their own per-surface flag, not by enableCoverArtBackground (which stays scoped to album/playlist-header cover blur). Reorder maths extracted to a pure, unit-tested module. i18n en + de (other locales TODO before PR).

Tests: resolver (10) + reorder (7).

* feat(cover): make the ensure queue surface-aware for artist backdrops

coverEnsureQueued now threads optional CoverEnsureOpts through to the Rust ensure and weaves the external surface into the in-flight key, so the fanart and banner surfaces of one artist no longer collide on one download chain. External surfaces also bypass the disk-src memory short-circuit (their {tier}-{surface}.webp never seeds those caches, and the canonical cover must not read as a hit). New thin ensureArtistBackdropQueued wrapper. Backward-compatible: plain covers append nothing to the key; the 5 queue tests stay green.

* fix(cover): reset the artist external-image hook synchronously on artist change

The hook reset src in an effect (one render late), so for the render between an artist change and that effect a consumer read the *previous* artist's resolved image. The mainstage hero then froze (and cached into per-album memory) a neighbouring slide's banner. Reset synchronously via the React adjust-state-on-prop-change pattern. Also removes brief stale-image flashes on the artist-detail header and fullscreen player.

* feat(hero): prefetch artist backdrops and show-ready-now / upgrade-on-re-entry

warmHomeMainstageCovers now prefetches each hero slide's artist backdrop (banner/fanart) at static slide-index priorities (idx1=high, idx0=low, rest=middle; no reprioritise on navigation), then predecodes every slide already on disk. useHeroBackdrop shows the best source ready at entry (Navidrome on a cold first visit, the prefetched/cached external one on re-entry) and freezes that source choice for the visit so nothing swaps mid-dwell; the url is derived live from the frozen choice, with a per-album disk memory for re-entry. HeroBg now crossfades only after the image bytes load (onLoad/complete gate + onError + fallback). Inert when the scraper is off. Tests: per-album memory (5).

* docs(changelog): configurable artist backdrops + mainstage hero (PR #1193)

CHANGELOG Added entry, settingsCredits line, and the What's New Artist-artwork highlight extended to cover the mainstage hero backdrop and per-place source config.

* docs(changelog): fold mainstage hero + per-place backdrops into the fanart entry (PR #1193)

Merge the configurable-backdrops changes into the existing 'Artist artwork from fanart.tv' block (now PR #1137 and #1193) instead of a separate entry.

* fix(hero): revert HeroBg load-gate that blanked the app (Maximum update depth)

The byte-load gate I added drove the crossfade reveal from an inline img ref + onLoad that re-fires on every render and scheduled a setTimeout each call; frequent re-renders (playback, marquee) stacked nested updates until React threw 'Maximum update depth exceeded' — and with no ErrorBoundary the whole window blanked. Reverted HeroBg to the proven timer-based crossfade. The hero only ever receives ready/predecoded urls, so the gate was cosmetic.

* fix(hero): gate the HeroBg crossfade on image load to stop the slide flicker

The bare 20 ms reveal faded a layer in before its bytes were ready (notably the Navidrome raw url), so a slide change flickered. Now an Image() preloader in the [url] effect reveals the layer on load (or a cached complete check), with a fallback. Everything is scheduled once per url — no per-render <img> ref/onLoad — so unlike the reverted gate it can't stack nested updates.

* feat(i18n): translate the backdrop-source settings into the remaining 10 locales

Adds the per-surface backdrop config strings (es, fr, nl, zh, nb, ru, ro, ja, hu, pl) and extends externalArtworkDesc to mention the mainstage hero where the key exists (ja has none → falls back to en).
This commit is contained in:
Psychotoxical
2026-06-27 00:42:32 +02:00
committed by GitHub
parent 014d57c53c
commit 86ae462ad6
33 changed files with 1198 additions and 110 deletions
+11 -1
View File
@@ -299,7 +299,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Überträgt den aktuell gespielten Titel an die Livehörer-Ansicht des Servers. Deaktivieren, um keine Wiedergabedaten zu senden.',
nowPlayingPluginNote: 'Notwendig bei Verwendung des offiziellen Navidrome-Discord-Rich-Presence-Plugins.',
externalArtwork: 'Externe Artwork Scraper',
externalArtworkDesc: 'Lädt hochauflösende Künstler-Hintergründe und -Banner von fanart.tv für den Vollbild-Player und Künstlerseiten. Standardmäßig aus.',
externalArtworkDesc: 'Lädt hochauflösende Künstler-Hintergründe und -Banner von fanart.tv für den Mainstage-Hero, Künstlerseiten und den Vollbild-Player. Standardmäßig aus.',
externalArtworkNote: 'Wenn aktiv, wird der Künstlername (und der des aktuellen Albums) an musicbrainz.org gesendet, um den Künstler zu identifizieren, danach werden Bilder von fanart.tv geladen — bedarfsgesteuert und nur lesend; deine Bibliotheks-Tags werden nie verändert. Die Bilder stammen von fanart.tv und seinen Mitwirkenden.',
externalArtworkByokTitle: 'Persönlicher API-Schlüssel (BYOK)',
externalArtworkByokDesc: 'Optional. Trag hier deinen eigenen fanart.tv-API-Schlüssel ein — er wird zusätzlich zum App-Schlüssel gesendet.',
@@ -682,6 +682,16 @@ export const settings = {
visualOptionsTitle: 'Visuelle Optionen',
coverArtBackground: 'Cover-Hintergrund',
coverArtBackgroundSub: 'Zeigt verschwommenes Cover als Hintergrund in Album/Playlist-Kopfzeilen',
backdropSourcesTitle: 'Hintergründe',
backdropSourcesSub: 'Lege fest, welches Bild jede Fläche als Hintergrund nutzt und in welcher Reihenfolge sie probiert werden. Ziehe zum Umsortieren oder schalte eine Quelle aus, um sie zu überspringen.',
backdropSurfaceMainstage: 'Mainstage-Hero',
backdropSurfaceArtistDetail: 'Künstlerseiten-Kopf',
backdropSurfaceFullscreen: 'Vollbild-Player',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Fanart-Künstlerbild',
backdropSourceNavidrome: 'Navidrome-Bild',
backdropMoveUp: 'Nach oben',
backdropMoveDown: 'Nach unten',
playlistCoverPhoto: 'Playlist-Coverfoto',
playlistCoverPhotoSub: 'Zeigt Coverfoto-Raster in der Playlist-Detailansicht',
showBitrate: 'Bitrate anzeigen',
+11 -1
View File
@@ -302,7 +302,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Broadcast your currently playing track to the server\'s live listener view. Disable to stop sending playback data.',
nowPlayingPluginNote: 'Required when using the official Navidrome Discord Rich Presence plugin.',
externalArtwork: 'External Artwork Scraper',
externalArtworkDesc: 'Fetch high-resolution artist backgrounds and banners from fanart.tv for the fullscreen player and artist pages. Off by default.',
externalArtworkDesc: 'Fetch high-resolution artist backgrounds and banners from fanart.tv for the mainstage hero, artist pages and the fullscreen player. Off by default.',
externalArtworkNote: 'When on, it sends the artist (and current album) name to musicbrainz.org to identify the artist, then fetches artwork from fanart.tv — on demand and read-only; your library tags are never changed. Artwork is provided by fanart.tv and its contributors.',
externalArtworkByokTitle: 'Personal API key (BYOK)',
externalArtworkByokDesc: 'Optional. Enter your own fanart.tv personal API key here — it is sent in addition to the app key.',
@@ -749,6 +749,16 @@ export const settings = {
visualOptionsTitle: 'Visual Options',
coverArtBackground: 'Cover Art Background',
coverArtBackgroundSub: 'Show blurred cover art as background in album/playlist headers',
backdropSourcesTitle: 'Backgrounds',
backdropSourcesSub: 'Pick which image each surface uses as its background, and the order to try them in. Drag to reorder, or switch a source off to skip it.',
backdropSurfaceMainstage: 'Mainstage hero',
backdropSurfaceArtistDetail: 'Artist page header',
backdropSurfaceFullscreen: 'Fullscreen player',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Fanart artist image',
backdropSourceNavidrome: 'Navidrome image',
backdropMoveUp: 'Move up',
backdropMoveDown: 'Move down',
playlistCoverPhoto: 'Playlist Cover Photo',
playlistCoverPhotoSub: 'Show cover photo grid in playlist detail view',
showBitrate: 'Show Bitrate',
+11 -1
View File
@@ -298,7 +298,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Transmite tu pista actual a la vista de oyentes en vivo del servidor. Desactiva para dejar de enviar datos de reproducción.',
nowPlayingPluginNote: 'Necesario al usar el plugin oficial de Discord Rich Presence de Navidrome.',
externalArtwork: 'Buscador de imágenes externo',
externalArtworkDesc: 'Obtén fondos y banners de artista en alta resolución desde fanart.tv para el reproductor a pantalla completa y las páginas de artista. Desactivado por defecto.',
externalArtworkDesc: 'Obtén fondos y banners de artista en alta resolución desde fanart.tv para el escenario principal, las páginas de artista y el reproductor a pantalla completa. Desactivado por defecto.',
externalArtworkNote: 'Cuando está activado, envía el nombre del artista (y del álbum actual) a musicbrainz.org para identificar al artista y luego obtiene las imágenes desde fanart.tv — bajo demanda y solo lectura; las etiquetas de tu biblioteca nunca se modifican. Las imágenes las proporcionan fanart.tv y sus colaboradores.',
externalArtworkByokTitle: 'Clave API personal (BYOK)',
externalArtworkByokDesc: 'Opcional. Introduce aquí tu propia clave API personal de fanart.tv — se envía junto con la clave de la app.',
@@ -681,6 +681,16 @@ export const settings = {
visualOptionsTitle: 'Opciones Visuales',
coverArtBackground: 'Fondo de Portada',
coverArtBackgroundSub: 'Mostrar portada desenfocada como fondo en encabezados de álbumes y listas de reproducción',
backdropSourcesTitle: 'Fondos',
backdropSourcesSub: 'Elige qué imagen usa cada zona como fondo y en qué orden probarlas. Arrastra para reordenar o desactiva una fuente para omitirla.',
backdropSurfaceMainstage: 'Escenario principal',
backdropSurfaceArtistDetail: 'Cabecera de página de artista',
backdropSurfaceFullscreen: 'Reproductor a pantalla completa',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Imagen de artista de Fanart',
backdropSourceNavidrome: 'Imagen de Navidrome',
backdropMoveUp: 'Subir',
backdropMoveDown: 'Bajar',
playlistCoverPhoto: 'Foto de Portada de Playlist',
playlistCoverPhotoSub: 'Mostrar cuadrícula de fotos de portada en la vista detallada de playlists',
showBitrate: 'Mostrar Bitrate',
+11 -1
View File
@@ -286,7 +286,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Diffuse le titre en cours de lecture vers la vue des auditeurs en direct du serveur. Désactiver pour ne pas envoyer de données de lecture.',
nowPlayingPluginNote: 'Requis lors de l\'utilisation du plugin officiel Discord Rich Presence de Navidrome.',
externalArtwork: "Scraper d'illustrations externe",
externalArtworkDesc: "Récupère des arrière-plans et bannières d'artiste en haute résolution depuis fanart.tv pour le lecteur plein écran et les pages d'artiste. Désactivé par défaut.",
externalArtworkDesc: "Récupère des arrière-plans et bannières d'artiste en haute résolution depuis fanart.tv pour la scène principale, les pages d'artiste et le lecteur plein écran. Désactivé par défaut.",
externalArtworkNote: "Lorsque activé, envoie le nom de l'artiste (et de l'album en cours) à musicbrainz.org pour identifier l'artiste, puis récupère les images depuis fanart.tv — à la demande et en lecture seule ; les tags de votre bibliothèque ne sont jamais modifiés. Les images sont fournies par fanart.tv et ses contributeurs.",
externalArtworkByokTitle: 'Clé API personnelle (BYOK)',
externalArtworkByokDesc: "Facultatif. Saisissez ici votre propre clé API personnelle fanart.tv — elle est envoyée en plus de la clé de l'application.",
@@ -669,6 +669,16 @@ export const settings = {
visualOptionsTitle: 'Options Visuelles',
coverArtBackground: "Fond d'Art de Poche",
coverArtBackgroundSub: "Afficher la pochette floutée comme fond dans les en-têtes d'albums et de playlists",
backdropSourcesTitle: 'Arrière-plans',
backdropSourcesSub: 'Choisissez quelle image chaque zone utilise comme arrière-plan, et dans quel ordre les essayer. Glissez pour réorganiser ou désactivez une source pour l\'ignorer.',
backdropSurfaceMainstage: 'Scène principale',
backdropSurfaceArtistDetail: 'En-tête de la page d\'artiste',
backdropSurfaceFullscreen: 'Lecteur plein écran',
backdropSourceBanner: 'Bannière',
backdropSourceFanart: 'Image d\'artiste Fanart',
backdropSourceNavidrome: 'Image Navidrome',
backdropMoveUp: 'Monter',
backdropMoveDown: 'Descendre',
playlistCoverPhoto: 'Photo de Couverture de Playlist',
playlistCoverPhotoSub: 'Afficher la grille de photos de couverture dans la vue détaillée des playlists',
showBitrate: 'Afficher le Débit',
+11 -1
View File
@@ -301,7 +301,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Az éppen lejátszott szám közvetítése a szerver élő hallgatói nézetébe. Kapcsold ki a lejátszási adatok küldésének leállításához.',
nowPlayingPluginNote: 'Szükséges a hivatalos Navidrome Discord Rich Presence bővítmény használatakor.',
externalArtwork: 'Külső borítólehúzó',
externalArtworkDesc: 'Nagy felbontású előadói hátterek és bannerek lekérése a fanart.tv-ről a teljes képernyős lejátszóhoz és az előadói oldalakhoz. Alapértelmezetten kikapcsolva.',
externalArtworkDesc: 'Nagy felbontású előadói hátterek és bannerek lekérése a fanart.tv-ről a főszínpadhoz, az előadói oldalakhoz és a teljes képernyős lejátszóhoz. Alapértelmezetten kikapcsolva.',
externalArtworkNote: 'Bekapcsolva elküldi az előadó (és az aktuális album) nevét a musicbrainz.org-ra az előadó azonosításához, majd borítókat kér le a fanart.tv-ről — igény szerint és csak olvasásra; a könyvtárad címkéi soha nem módosulnak. A borítókat a fanart.tv és közreműködői biztosítják.',
externalArtworkByokTitle: 'Személyes API-kulcs (BYOK)',
externalArtworkByokDesc: 'Opcionális. Add meg itt a saját fanart.tv személyes API-kulcsodat — az alkalmazás kulcsa mellett kerül elküldésre.',
@@ -748,6 +748,16 @@ export const settings = {
visualOptionsTitle: 'Vizuális beállítások',
coverArtBackground: 'Borító háttér',
coverArtBackgroundSub: 'Elmosott borító megjelenítése háttérként az album/lejátszási lista fejlécekben',
backdropSourcesTitle: 'Hátterek',
backdropSourcesSub: 'Válaszd ki, melyik képet használja az egyes felületek háttérként, és milyen sorrendben próbálja őket. Húzással átrendezhető, vagy kapcsolj ki egy forrást a kihagyásához.',
backdropSurfaceMainstage: 'Főszínpad',
backdropSurfaceArtistDetail: 'Előadói oldal fejléce',
backdropSurfaceFullscreen: 'Teljes képernyős lejátszó',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Fanart előadói kép',
backdropSourceNavidrome: 'Navidrome kép',
backdropMoveUp: 'Mozgatás fel',
backdropMoveDown: 'Mozgatás le',
playlistCoverPhoto: 'Lejátszási lista borítóképe',
playlistCoverPhotoSub: 'Borítókép-rács megjelenítése a lejátszási lista részletes nézetében',
showBitrate: 'Bitráta megjelenítése',
+10
View File
@@ -742,6 +742,16 @@ export const settings = {
visualOptionsTitle: '表示オプション',
coverArtBackground: 'カバーアート背景',
coverArtBackgroundSub: 'アルバム/プレイリストヘッダーの背景にぼかしたカバーアートを表示',
backdropSourcesTitle: '背景',
backdropSourcesSub: '各エリアが背景に使う画像と、試す順番を選びます。ドラッグで並べ替え、ソースをオフにするとスキップします。',
backdropSurfaceMainstage: 'Mainstage',
backdropSurfaceArtistDetail: 'アーティストページのヘッダー',
backdropSurfaceFullscreen: 'フルスクリーンプレーヤー',
backdropSourceBanner: 'バナー',
backdropSourceFanart: 'Fanart アーティスト画像',
backdropSourceNavidrome: 'Navidrome 画像',
backdropMoveUp: '上へ',
backdropMoveDown: '下へ',
playlistCoverPhoto: 'プレイリストカバー写真',
playlistCoverPhotoSub: 'プレイリスト詳細ビューにカバー写真グリッドを表示',
showBitrate: 'ビットレートを表示',
+11 -1
View File
@@ -285,7 +285,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Send sporet som spilles av til tjenerens live-lyttervisning. Deaktiver for å stoppe sending av avspillingsdata.',
nowPlayingPluginNote: 'Nødvendig ved bruk av det offisielle Navidrome Discord Rich Presence-tillegget.',
externalArtwork: 'Ekstern bildehenter',
externalArtworkDesc: 'Henter artistbakgrunner og -bannere i høy oppløsning fra fanart.tv for fullskjermspilleren og artistsider. Av som standard.',
externalArtworkDesc: 'Henter artistbakgrunner og -bannere i høy oppløsning fra fanart.tv for hovedscenen, artistsider og fullskjermspilleren. Av som standard.',
externalArtworkNote: 'Når på, sendes artistnavnet (og navnet på gjeldende album) til musicbrainz.org for å identifisere artisten, deretter hentes bilder fra fanart.tv — ved behov og skrivebeskyttet; bibliotektaggene dine endres aldri. Bildene leveres av fanart.tv og bidragsyterne.',
externalArtworkByokTitle: 'Personlig API-nøkkel (BYOK)',
externalArtworkByokDesc: 'Valgfritt. Skriv inn din egen personlige fanart.tv-API-nøkkel her — den sendes i tillegg til app-nøkkelen.',
@@ -668,6 +668,16 @@ export const settings = {
visualOptionsTitle: 'Visuelle Alternativer',
coverArtBackground: 'Cover-bakgrunn',
coverArtBackgroundSub: 'Vis uskarpt cover som bakgrunn i album/playlist-overskrifter',
backdropSourcesTitle: 'Bakgrunner',
backdropSourcesSub: 'Velg hvilket bilde hvert område bruker som bakgrunn, og i hvilken rekkefølge de prøves. Dra for å endre rekkefølge, eller slå av en kilde for å hoppe over den.',
backdropSurfaceMainstage: 'Hovedscene',
backdropSurfaceArtistDetail: 'Artistsideoverskrift',
backdropSurfaceFullscreen: 'Fullskjermsspiller',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Fanart-artistbilde',
backdropSourceNavidrome: 'Navidrome-bilde',
backdropMoveUp: 'Flytt opp',
backdropMoveDown: 'Flytt ned',
playlistCoverPhoto: 'Playlist-coverfoto',
playlistCoverPhotoSub: 'Vis coverfoto-rutenett i playlist-detailedvisning',
showBitrate: 'Vis Bitrate',
+11 -1
View File
@@ -286,7 +286,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Stuurt het huidige nummer naar de live-luisteraarsweergave van de server. Uitschakelen om geen afspeelgegevens te verzenden.',
nowPlayingPluginNote: 'Vereist bij gebruik van de officiële Navidrome Discord Rich Presence-plug-in.',
externalArtwork: 'Externe artwork-scraper',
externalArtworkDesc: "Haalt hogeresolutie artiestachtergronden en -banners van fanart.tv op voor de schermvullende speler en artiestpagina's. Standaard uit.",
externalArtworkDesc: "Haalt hogeresolutie artiestachtergronden en -banners van fanart.tv op voor het hoofdpodium, artiestpagina's en de schermvullende speler. Standaard uit.",
externalArtworkNote: 'Indien aan, wordt de naam van de artiest (en het huidige album) naar musicbrainz.org gestuurd om de artiest te identificeren, daarna worden afbeeldingen van fanart.tv opgehaald — op aanvraag en alleen-lezen; je bibliotheektags worden nooit gewijzigd. Afbeeldingen worden geleverd door fanart.tv en zijn bijdragers.',
externalArtworkByokTitle: 'Persoonlijke API-sleutel (BYOK)',
externalArtworkByokDesc: 'Optioneel. Voer hier je eigen persoonlijke fanart.tv-API-sleutel in — deze wordt naast de app-sleutel verstuurd.',
@@ -669,6 +669,16 @@ export const settings = {
visualOptionsTitle: 'Visuele Opties',
coverArtBackground: 'Cover Achtergrond',
coverArtBackgroundSub: 'Toon vervaagde cover als achtergrond in album/playlist headers',
backdropSourcesTitle: 'Achtergronden',
backdropSourcesSub: 'Kies welke afbeelding elk gebied als achtergrond gebruikt en in welke volgorde ze geprobeerd worden. Sleep om te herordenen of zet een bron uit om die over te slaan.',
backdropSurfaceMainstage: 'Hoofdpodium',
backdropSurfaceArtistDetail: 'Artiestpagina-kop',
backdropSurfaceFullscreen: 'Volledig scherm-speler',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Fanart-artiestafbeelding',
backdropSourceNavidrome: 'Navidrome-afbeelding',
backdropMoveUp: 'Omhoog',
backdropMoveDown: 'Omlaag',
playlistCoverPhoto: 'Playlist Coverfoto',
playlistCoverPhotoSub: 'Toon coverfoto raster in playlist detailweergave',
showBitrate: 'Toon Bitrate',
+11 -1
View File
@@ -302,7 +302,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Transmituj aktualnie odtwarzany utwór do widoku słuchacza na żywo na serwerze. Wyłącz, aby zatrzymać wysyłanie danych o odtwarzaniu.',
nowPlayingPluginNote: 'Wymagane przy użyciu oficjalnego pluginu Discord Rich Presence dla Navidrome.',
externalArtwork: 'Zewnętrzny scraper grafik',
externalArtworkDesc: 'Pobieraj wysokiej rozdzielczości tła i banery wykonawców z fanart.tv dla odtwarzacza pełnoekranowego i stron wykonawców. Domyślnie wyłączone.',
externalArtworkDesc: 'Pobieraj wysokiej rozdzielczości tła i banery wykonawców z fanart.tv dla sceny głównej, stron wykonawców i odtwarzacza pełnoekranowego. Domyślnie wyłączone.',
externalArtworkNote: 'Po włączeniu wysyła nazwę wykonawcy (i bieżącego albumu) do musicbrainz.org, aby zidentyfikować wykonawcę, a następnie pobiera grafiki z fanart.tv — na żądanie i tylko do odczytu; tagi Twojej biblioteki nigdy nie są zmieniane. Grafiki dostarcza fanart.tv i jego współtwórcy.',
externalArtworkByokTitle: 'Osobisty klucz API (BYOK)',
externalArtworkByokDesc: 'Opcjonalne. Wpisz tutaj własny osobisty klucz API fanart.tv — będzie wysyłany razem z kluczem aplikacji.',
@@ -749,6 +749,16 @@ export const settings = {
visualOptionsTitle: 'Opcje wizualne',
coverArtBackground: 'Tło okładki',
coverArtBackgroundSub: 'Pokazuj rozmytą okładkę jako tło w nagłówkach albumów i playlist',
backdropSourcesTitle: 'Tła',
backdropSourcesSub: 'Wybierz, którego obrazu każdy obszar używa jako tła i w jakiej kolejności je próbować. Przeciągnij, aby zmienić kolejność, lub wyłącz źródło, aby je pominąć.',
backdropSurfaceMainstage: 'Scena główna',
backdropSurfaceArtistDetail: 'Nagłówek strony artysty',
backdropSurfaceFullscreen: 'Odtwarzacz pełnoekranowy',
backdropSourceBanner: 'Baner',
backdropSourceFanart: 'Obraz artysty z Fanart',
backdropSourceNavidrome: 'Obraz z Navidrome',
backdropMoveUp: 'W górę',
backdropMoveDown: 'W dół',
playlistCoverPhoto: 'Okładka playlisty',
playlistCoverPhotoSub: 'Pokazuj siatkę okładek w widoku szczegółów playlisty',
showBitrate: 'Pokazuj Bitrate',
+11 -1
View File
@@ -301,7 +301,7 @@ export const settings = {
nowPlayingEnabledDesc: 'Difuzează piesa redată curent către vizualizatorul de ascultare live a serverului. Dezactivează pentru a opri trimiterea datelor de redare.',
nowPlayingPluginNote: 'Necesar la utilizarea pluginului oficial Discord Rich Presence de la Navidrome.',
externalArtwork: 'Scraper de imagini extern',
externalArtworkDesc: 'Preia fundaluri și bannere de artist la rezoluție înaltă de pe fanart.tv pentru playerul pe tot ecranul și paginile de artist. Dezactivat implicit.',
externalArtworkDesc: 'Preia fundaluri și bannere de artist la rezoluție înaltă de pe fanart.tv pentru scena principală, paginile de artist și playerul pe tot ecranul. Dezactivat implicit.',
externalArtworkNote: 'Când este activat, trimite numele artistului (și al albumului curent) către musicbrainz.org pentru a identifica artistul, apoi preia imagini de pe fanart.tv — la cerere și doar pentru citire; etichetele din biblioteca ta nu sunt niciodată modificate. Imaginile sunt furnizate de fanart.tv și colaboratorii săi.',
externalArtworkByokTitle: 'Cheie API personală (BYOK)',
externalArtworkByokDesc: 'Opțional. Introdu aici propria ta cheie API personală fanart.tv — este trimisă pe lângă cheia aplicației.',
@@ -684,6 +684,16 @@ export const settings = {
visualOptionsTitle: 'Opțiuni vizuale',
coverArtBackground: 'Arta de fundal a copertei',
coverArtBackgroundSub: 'Arată arta de copertă blurată ca fundal în antetele albumelor/playlisturilor',
backdropSourcesTitle: 'Fundaluri',
backdropSourcesSub: 'Alege ce imagine folosește fiecare zonă ca fundal și în ce ordine să fie încercate. Trage pentru a reordona sau dezactivează o sursă pentru a o sări.',
backdropSurfaceMainstage: 'Scena principală',
backdropSurfaceArtistDetail: 'Antetul paginii artistului',
backdropSurfaceFullscreen: 'Player pe tot ecranul',
backdropSourceBanner: 'Banner',
backdropSourceFanart: 'Imagine de artist Fanart',
backdropSourceNavidrome: 'Imagine Navidrome',
backdropMoveUp: 'Mută sus',
backdropMoveDown: 'Mută jos',
playlistCoverPhoto: 'Poza de copertă a playlistului',
playlistCoverPhotoSub: 'Arată poza grilă de copertă în afișajul de detalii al playlistului',
showBitrate: 'Arată Bitrate',
+11 -1
View File
@@ -306,7 +306,7 @@ export const settings = {
'Отправлять на сервер, что вы сейчас слушаете. Отключите, чтобы не делиться этим.',
nowPlayingPluginNote: 'Необходимо при использовании официального плагина Discord Rich Presence для Navidrome.',
externalArtwork: 'Внешний сборщик обложек',
externalArtworkDesc: 'Загружает фоновые изображения и баннеры исполнителей в высоком разрешении с fanart.tv для полноэкранного плеера и страниц исполнителей. По умолчанию выключено.',
externalArtworkDesc: 'Загружает фоновые изображения и баннеры исполнителей в высоком разрешении с fanart.tv для раздела «Для вас», страниц исполнителей и полноэкранного плеера. По умолчанию выключено.',
externalArtworkNote: 'Когда включено, отправляет имя исполнителя (и текущего альбома) на musicbrainz.org для идентификации исполнителя, затем загружает изображения с fanart.tv — по запросу и только для чтения; теги вашей библиотеки никогда не изменяются. Изображения предоставлены fanart.tv и его участниками.',
externalArtworkByokTitle: 'Личный API-ключ (BYOK)',
externalArtworkByokDesc: 'Необязательно. Введите здесь свой личный API-ключ fanart.tv — он отправляется вместе с ключом приложения.',
@@ -769,6 +769,16 @@ export const settings = {
visualOptionsTitle: 'Визуальные настройки',
coverArtBackground: 'Фон обложки',
coverArtBackgroundSub: 'Показывать размытую обложку как фон в заголовках альбомов и плейлистов',
backdropSourcesTitle: 'Фоны',
backdropSourcesSub: 'Выберите, какое изображение каждая область использует как фон и в каком порядке их пробовать. Перетаскивайте для изменения порядка или выключите источник, чтобы пропустить его.',
backdropSurfaceMainstage: '«Для вас»',
backdropSurfaceArtistDetail: 'Шапка страницы исполнителя',
backdropSurfaceFullscreen: 'Полноэкранный плеер',
backdropSourceBanner: 'Баннер',
backdropSourceFanart: 'Изображение исполнителя Fanart',
backdropSourceNavidrome: 'Изображение Navidrome',
backdropMoveUp: 'Вверх',
backdropMoveDown: 'Вниз',
playlistCoverPhoto: 'Обложка плейлиста',
playlistCoverPhotoSub: 'Показывать сетку обложек в детальном виде плейлиста',
showBitrate: 'Показывать битрейт',
+11 -1
View File
@@ -285,7 +285,7 @@ export const settings = {
nowPlayingEnabledDesc: '将当前播放的曲目广播到服务器的实时听众视图。禁用以停止发送播放数据。',
nowPlayingPluginNote: '使用官方 Navidrome Discord Rich Presence 插件时必需。',
externalArtwork: '外部封面采集器',
externalArtworkDesc: '从 fanart.tv 获取高分辨率的艺术家背景图和横幅,用于全屏播放器和艺术家页面。默认关闭。',
externalArtworkDesc: '从 fanart.tv 获取高分辨率的艺术家背景图和横幅,用于主舞台、艺术家页面和全屏播放器。默认关闭。',
externalArtworkNote: '启用后,会将艺术家(及当前专辑)名称发送至 musicbrainz.org 以识别艺术家,然后从 fanart.tv 获取图片——按需且只读;你的音乐库标签永不会被修改。图片由 fanart.tv 及其贡献者提供。',
externalArtworkByokTitle: '个人 API 密钥(BYOK',
externalArtworkByokDesc: '可选。在此输入你自己的 fanart.tv 个人 API 密钥——它会与应用密钥一同发送。',
@@ -668,6 +668,16 @@ export const settings = {
visualOptionsTitle: '视觉选项',
coverArtBackground: '封面背景',
coverArtBackgroundSub: '在专辑/播放列表标题中显示模糊的封面作为背景',
backdropSourcesTitle: '背景',
backdropSourcesSub: '选择每个区域使用哪张图片作为背景,以及尝试的顺序。拖动可重新排序,或关闭某个来源以跳过它。',
backdropSurfaceMainstage: '主舞台',
backdropSurfaceArtistDetail: '艺术家页面标题',
backdropSurfaceFullscreen: '全屏播放器',
backdropSourceBanner: '横幅',
backdropSourceFanart: 'Fanart 艺术家图片',
backdropSourceNavidrome: 'Navidrome 图片',
backdropMoveUp: '上移',
backdropMoveDown: '下移',
playlistCoverPhoto: '播放列表封面照片',
playlistCoverPhotoSub: '在播放列表详细视图中显示封面照片网格',
showBitrate: '显示比特率',