# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.11.0] - 2026-03-22 ### Added #### Five New Themes — Movies - **Middle Earth**: Warm parchment light theme. Cream/beige background, dark ebony player and sidebar, gold accent (`#d4af37`). Georgia serif for track names, subtle noise texture. - **Morpheus**: Pure black terminal aesthetic inspired by The Matrix. Phosphor green accent (`#00ff41`), monospace font. - **Pandora**: Deep bioluminescent navy inspired by Avatar. Cyan accent (`#00f2ff`), large radii, glow effects. - **Stark HUD**: Near-black tactical HUD inspired by Iron Man. Cyan accent, JetBrains Mono, uppercase track name. - **Blade**: Deep black with blood-red accent (`#b30000`). Sharp radii, uppercase track name. - All five themes in a new **Movies** group in the theme picker. ### Changed - **Settings — tab order**: Reordered to Server → Appearance → Playback → Library → Shortcuts → About. - **Settings — Appearance**: Language selector moved to the top of the tab, above Theme and Font. - **Settings — Theme picker**: "Betriebssysteme" group renamed to "Operating Systems". - **Default font**: Changed from Inter to **Lexend** for new installations. - **Gapless playback**: Experimental badge removed — gapless is now considered stable. - **Now Playing — background**: Ken Burns animation (40 s, subtle scale + translate). Background blur increased to eliminate JPEG block artefacts at high blur values. - **Now Playing — Similar Artists**: Tag cloud redesigned into 2 rows with varied font sizes and vertical offsets for a natural look. - **Statistics**: "Now Playing" indicator rendered as a styled badge matching the app's badge style. ## [1.10.0] - 2026-03-22 ### Added #### Three New Themes (Streaming Series) - **Spotless**: Flat dark theme inspired by modern music streaming. Pitch-black sidebar (`#000000`), dark-grey app background (`#121212`), Spotify-green accent (`#1ED760`). White play button, green hover on primary actions. - **DZR**: Flat light theme inspired by Deezer's modern redesign. White base, light-grey sidebar (`#F5F5F7`), purple accent (`#A238FF`). Crisp typography, large rounded radii. - **Cupertino Beats**: Apple Music-inspired dark theme. Near-black base (`#1c1c1e`), frosted-glass sidebar and player bar with heavy `backdrop-filter`, red accent (`#fa243c`). Active nav links styled with `accent-dim` background. - All three themes added to the **Psysonic Themes — Mediaplayer** group in the theme picker. ### Fixed - **Favourite/Unfavourite toggle**: Right-clicking a song, album, or artist that is already starred now shows "Remove from Favourites" and calls `unstar()` correctly. Previously always showed "Add to Favourites" regardless of starred state. - `Track` interface gained `starred?: string` — propagated via `songToTrack()` and all inline track-object construction sites. - `starredOverrides: Record` added to `playerStore` — updated immediately on star/unstar so the context menu and tracklist star icons reflect changes without a page reload. - **Home page — Artist Discovery**: Replaced card grid (which loaded artist images and caused performance issues) with lightweight pill-buttons — same `artist-ext-link` style as the "Similar Artists" section on artist pages. No image loading, instant render. - **Now Playing page**: Queue sidebar is no longer automatically hidden when entering the Now Playing page. It now behaves like all other pages and respects the user's current queue visibility setting. - **Random Mix filter panel**: Background now correctly uses `--bg-card` instead of the undefined `--bg-elevated` token, which caused the panel to render transparent in most themes. ### Changed - **Home page layout**: Section order is now: Recently Added → Discover → Artist Discovery → Starred → Most Played. ## [1.9.0] - 2026-03-21 ### Added #### Three New Themes - **Neon Drift**: Deep midnight-blue background (`#12132c`) with electric cyan accent (`#00f2ff`) — subtle synthwave/cyberpunk aesthetic. Glowing player track name, cyan-glow nav active state, neon-lit primary buttons, glowing range slider thumb. - **Cupertino Light**: macOS Ventura-inspired light theme. Clean white base, Apple-grey sidebar (`#f2f2f7`), Apple blue accent (`#0071e3`). Frosted-glass sidebar and player bar with `backdrop-filter: blur`. Solid blue pill nav active (white text, no left border). - **Cupertino Dark**: macOS Ventura-inspired dark theme. Space Grey base (`#1e1e1f`), dark frosted sidebar, vibrant blue accent (`#007aff`). Same pill nav active as Cupertino Light. Solid blue Play/Pause button with glow. #### New Theme Group: Betriebssysteme - OS-aesthetic themes are now consolidated into one group: **Cupertino Light**, **Cupertino Dark**, **Aero Glass**, **Luna Teal**. - **Psysonic Themes** and **Psysonic Themes — Mediaplayer** moved to the top of the theme picker. #### Configurable Keybindings - New `keybindingsStore` with 10 bindable actions: Play/Pause, Next, Previous, Volume Up/Down, Seek ±10 s, Toggle Queue, Fullscreen Player, Native Fullscreen. - Rebind any action in **Settings → Keybindings** — click the key badge, press any key, saved immediately to `localStorage`. - Defaults: `Space` = Play/Pause, `F11` = Native Fullscreen. All other actions unbound by default. #### Font Picker - 10 UI fonts selectable in **Settings → Appearance**: Inter, Outfit, DM Sans, Nunito, Rubik, Space Grotesk, Figtree, Manrope, Plus Jakarta Sans, Lexend. - Persisted in `localStorage` (`psysonic_font`), applied via `data-font` attribute on ``. #### Home Page — Instant Play - **Album cards**: "Details" button replaced with a **Play** button — clicking plays the album immediately with a smooth 700 ms fade-out of the current track. - **Hero**: "Play Album" button now starts playback directly (with fade-out) instead of navigating to the album detail page. - Fade-out implemented via `playAlbum.ts` utility: fades volume to 0 over 700 ms, restores volume in the store (no Rust side-effect) before handing off to `playTrack`. #### Now Playing Page — Layout & Readability - **3-column hero layout**: album cover + info (left, `flex: 1`) — EQ bars (centre, fixed width) — tag cloud (right, `flex: 1`). EQ bars are now truly centred regardless of content length on either side. - **Background**: increased brightness from `0.25` to `0.55`, reduced overlay opacity from `0.55` to `0.38` — background art is now visible instead of near-black. - **Text contrast**: track times, card links (artist/album), and section title opacity all increased for better readability on the blurred background. ### Changed #### Theme Renames — Trademark-Safe Names All media-player and OS-themed theme IDs and labels have been renamed to avoid potential trademark conflicts: | Old Name | New Name | |---|---| | Classic Winamp | WnAmp | | Musicmatch Jukebox | Navy Jukebox | | WMP8 Classic | Cobalt Media | | PowerDVD Classic | Onyx Cinema | | Win7 Aero | Aero Glass | | WinXP Luna | Luna Teal | > **Note**: If you had one of these themes selected, your preference will reset to Mocha on first launch. Re-select your preferred theme in Settings. ### Fixed - **Linux — ALSA underruns**: `PIPEWIRE_LATENCY` (`4096/48000` ≈ 85 ms) and `PULSE_LATENCY_MSEC` (`85`) are now set before audio stream creation, reducing the frequency of ALSA `snd_pcm_recover` underrun events on PipeWire systems. Existing user-set values are respected. --- ## [1.8.0] - 2026-03-21 ### Added #### Three New Themes - **Poison**: Dark charcoal background (`#1a1a1a`) with phosphor green (`#1bd655`) accent — high-contrast, industrial aesthetic. LCD glow text-shadow on the now-playing track name. - **Nucleo**: Warm brass/cream light theme inspired by vintage hi-fi equipment. Warm white cards, gold/amber accents, brushed-metal bevel buttons, and a warm LCD glow on the player track name. `color-scheme: light`. - **Classic Winamp**: Cool gray-blue dark theme (`#2b2b3a`) channelling the classic Winamp 2.x skin. Yellow primary accent (`#d4cc46`), orange volume slider override (`--volume-accent: #de9b35`), Courier New monospace font with bright-green LCD glow for the track name. #### Psychowave Theme — Major Overhaul - Psychowave recoloured from loud neon pink/purple to a refined deep violet palette: background `#161428`, accent `#a06ae0`. All neon colours replaced with muted, tasteful variants. No longer marked as WIP. #### ThemePicker Redesign - Themes reorganised into semantic groups: **Catppuccin**, **Nord**, **Retro** (formerly Gruvbox), **Tokyo Night**, and a new **Psysonic Themes** section (Classic Winamp, Poison, Nucleo, Psychowave). The separate *Experimental* group is removed. - "Gruvbox" renamed to **Retro**. #### Image Lightbox - Clicking the **album cover** on an Album Detail page or the **artist avatar** on an Artist Detail page opens a full-screen lightbox showing the high-resolution image (up to 2000 px). Click outside or press Escape to close. - Both use a shared `CoverLightbox` component — consistent behaviour across the app. #### Queue Toolbar — Complete Redesign - The queue panel now has a **centred icon toolbar** with round buttons (border-radius 50%, solid accent fill when active): - **Shuffle** — Fisher-Yates shuffle, keeps current track at position 0 - **Save** — save queue as playlist - **Load** — load a playlist into the queue - **Clear** — remove all tracks from the queue - **Gapless** (∞ icon) — toggle gapless playback on/off - **Crossfade** (≋ icon) — toggle crossfade on/off; when inactive, clicking enables crossfade *and* opens a popover slider - **Crossfade popover**: a small overlay below the Crossfade button with a range slider (1–10 s) to configure the fade duration. Clicking the active Crossfade button disables crossfade and closes the popover. Closes on outside click. - **Queue header**: title enlarged to 16 px/700, track count and total duration shown inline next to the title in accent colour. Close (×) button removed. - **Tech info overlay**: codec and bitrate displayed as a frosted glass badge (`backdrop-filter: blur(4px)`) overlaid on the bottom edge of the cover art image. #### French & Dutch Translations - Full UI translation added for **French** (`fr`) and **Dutch** (`nl`) — all namespaces covered. - Language selector in Settings now lists all four languages sorted alphabetically (Dutch, English, French, German). #### Help Page — Layout & Content Update - **2-column grid layout** for the accordion — makes better use of horizontal space on widescreen displays. - New Q&A entry: **Crossfade & Gapless** (Playback section) — explains what each feature does, how to enable them, and their experimental status. - Updated entries: Themes (reflects all 21 themes), Languages (4 languages), Scrobbling (direct Last.fm), System browser links, Linux distribution (no AppImage). #### Settings — Experimental Labels - Crossfade and Gapless toggles in Settings → Playback now show an **"Experimental"** badge next to their label. ### Fixed - **Now Playing dropdown — refresh button**: The refresh icon spin was applied to the entire button, blocking clicks during the animation. Spin state is now separate from the background poll loading state — the button is always clickable, and the icon spins for a minimum of 600 ms for clear visual feedback. - **Crossfade popover positioning**: Popover was overflowing the right edge of the viewport. Now right-aligned relative to the Crossfade button and positioned below it. --- ## [1.7.2] - 2026-03-20 ### Fixed - **Last.fm**: Stability improvements for the authentication flow and session handling. - **Settings**: Minor display fixes in the Last.fm profile badge. --- ## [1.7.1] - 2026-03-20 ### Fixed - **Build**: TypeScript errors in Settings.tsx and Statistics.tsx that broke the release build. --- ## [1.7.0] - 2026-03-20 ### Added #### Last.fm Integration *(Beta)* - **Direct Last.fm scrobbling**: Tracks are scrobbled directly via the Last.fm API at 50% playback — no longer routed through Navidrome. Configure in Settings → Server with your Last.fm username and password. - **Now Playing updates**: Last.fm receives the currently playing track in real time. - **Love / Unlove**: Heart button in the Now Playing page and player bar syncs the loved state with Last.fm instantly. - **Last.fm profile badge** in Settings → Server: shows your scrobble count and member since year once connected. - ⚠️ **This feature is in beta.** Session management and edge cases are still being refined. #### Similar Artists - Artist detail pages now show a **Similar Artists** section below Top Tracks, sourced from Last.fm and filtered to artists actually present in your library. Shown as chip buttons — click to navigate directly to that artist's page. - Requires Last.fm to be configured. Hidden when Last.fm is not connected or no library matches are found. #### Statistics — Last.fm Stats - New **Last.fm Stats** section on the Statistics page (requires Last.fm): top artists, albums, and tracks with proportional play-count bars. - **Period filter**: switch between Last 7 Days, 1 Month, 3 Months, 6 Months, 12 Months, and Overall. - **Recent Scrobbles**: last 20 scrobbled tracks with relative timestamps and a "Now Playing" badge for the currently active entry. - **Genre Distribution removed**: replaced by the Last.fm stats sections. #### Psychowave Theme *(Work in Progress)* - New **Psychowave** theme: a deep purple/violet dark theme inspired by synthwave and retrowave aesthetics. - ⚠️ **Still in active development** — colors and details will continue to be refined in upcoming releases. #### Tooltip System — TooltipPortal - All tooltips now use a **React portal** rendered into `document.body` at `z-index: 99999`. Replaces the previous CSS `::after` pseudo-element system. - Fixes tooltip clipping inside `overflow: hidden` containers (player bar, queue panel, EQ). - Fixes black OS-native tooltip boxes that appeared on native `title=` attributes — all converted to `data-tooltip`. - Smart edge detection: tooltip flips position automatically when it would overflow the viewport. #### Custom Select Dropdowns - **Theme**, **Language**, and **EQ preset** selectors are now rendered as styled portal dropdowns — no more unstyled native `