github Psychotoxical/psysonic app-v1.4.0
Psysonic v1.4.0

one month ago

Added

  • Statistics Page — Upgraded
  • Library overview: Four stat cards at the top showing total Artists, Albums, Songs, and Genres — counts derived from the library in parallel.
  • Recently Played: Horizontal scroll row showing the last played albums with cover art.
  • Most Played: Ranked list of the most frequently played tracks.
  • Highest Rated: List of top-rated tracks by user star rating.
  • Genre Chart: Visual bar chart of the top genres by song and album count.
  • Playlists Page — Redesigned
  • Replaced the card grid with a clean list layout.
  • Sort buttons: Sort by Name, Tracks, or Duration — click again to toggle ascending/descending.
  • Filter input: Live search across playlist names.
  • Play and delete buttons appear on row hover.
  • Favorites — Songs Section Upgraded
  • Tracks now display in a full tracklist layout matching Album Detail: separate #, Title, Artist, and Duration columns with a header row.
  • Artist name is clickable and navigates to the artist page.
  • Right-click context menu on any track (Go to Album, Add to Queue, etc.).
  • "Add all to queue" button (btn btn-surface) next to the section title.
  • Context Menu — Go to Album
  • New Go to Album option (Disc3 icon) added for song and queue-item context menu types.
  • Only shown when the song has a known albumId.
  • Queue Panel — Meta Box
  • Now shows: Title (no link) → Artist (linked to artist page) → Album (linked to album page).
  • Removed year display and the old title→album link.
  • Random Mix — Hover Persistence
  • Track row stays highlighted while its context menu is open via .context-active CSS class.
  • Highlight is cleared automatically when the context menu closes.
  • Artist Cards — Redesigned
  • ArtistCardLocal now matches AlbumCard exactly: no padding, full-width square cover via aspect-ratio: 1, name and meta below.
  • Uses CachedImage with coverArtCacheKey for proper IndexedDB caching.
  • Same flex: 0 0 clamp(140px, 15vw, 180px) sizing as album cards — artist cards are no longer oversized.

Fixed

  • Random Albums — Cover Loading & Manual Refresh
  • Removed renderKey: The album grid was fully remounted on every refresh, restarting all 30 IndexedDB image lookups from scratch. Grid is now stable — only data changes, images stay cached.
  • loadingRef guard: Prevents concurrent fetch calls if the auto-cycle timer fires during a manual refresh.
  • Timer race condition: Manual refresh now calls clearTimers() before load(), eliminating the race where the auto-cycle timer fired mid-load.
  • Favorites — Artist Navigation
  • Arrow nav buttons in the Artists section now use the same CSS classes as the Albums section (album-row-section, album-row-header, album-row-nav) — consistent styling across both rows.

Changed

  • AlbumDetail refactored into a thin orchestrator. Logic extracted into AlbumHeader (src/components/AlbumHeader.tsx) and AlbumTrackList (src/components/AlbumTrackList.tsx).
  • German i18n: "Queue" consistently translated as "Warteschlange" throughout — queue.shuffle, favorites.enqueueAll.

Don't miss a new psysonic release

NewReleases is sending notifications on new releases.