Files
Psychotoxical-psysonic/WHATS_NEW.md
T
Psychotoxical d50c9c444d refactor(settings): reusable SettingsGroup/SettingsToggle + boxed sections across tabs (#1126)
* refactor(settings): extract reusable SettingsGroup component

Pull the boxed sub-section pattern (bordered panel + accent uppercase
header) introduced for the Audio tab into a reusable <SettingsGroup
title desc> component, and migrate NormalizationBlock and
PlaybackBehaviorBlock onto it. No visual change.

* feat(settings): box the System behavior section into groups

Split the System -> App Behavior card (which bundled tray toggles, Linux
rendering tweaks and the clock format) into titled SettingsGroup panels
(Tray / Linux rendering / Clock) for a clearer, consistent boxed look.
Adds the group titles across all 9 locales.

* feat(settings): box Appearance visual options; optional SettingsGroup title

Split the Appearance -> Visual options card into a Display group and a
Window group (Linux custom titlebar controls). SettingsGroup now allows an
optional/omitted title for plain boxed panels. Group titles added across
all 9 locales.

* feat(settings): box Discord cover source and templates

Group the Discord cover-source toggles and the activity templates into
separate SettingsGroup panels (templates reuse their existing title/desc),
dropping the manual indent and inline header. No new strings.

* feat(settings): box the Music Network section

Give the scrobble-master toggle, the enrichment-primary picker and the
provider list each a boxed SettingsGroup with an accent header, and switch
the add-a-service provider rows to the boxed panel style for consistent
contrast with the rest of settings.

* feat(settings): titled boxes for Integrations sections + cover source label

Wrap the Discord enable toggle, the Discord cover-source picker (now with a
"Cover art source" title and explainer), Bandsintown and Show-in-Now-Playing
in titled SettingsGroup panels so each single-item section gets the same
accent-headed boxed look. New cover-source strings across all 9 locales.

* feat(settings): box Lyrics tab sections

Wrap the lyrics-sources customizer and the sidebar-style picker in titled
SettingsGroup panels (reusing the existing section titles).

* refactor(settings): consistent content inset in SettingsGroup

Add a body wrapper with a small left inset so every boxed section indents its
controls uniformly (title stays flush at the box edge). Defined once in the
component instead of per section.

* feat(settings): box Storage tab sections incl. cover art cache

Wrap media directory, cover art cache strategy, next-track buffering and
downloads in titled SettingsGroup panels (reusing existing section titles);
align the cover-cache table's first column flush with the new content inset.

* feat(settings): box Library tab, relocate Lucky Mix, add SettingsToggle

- Add a reusable SettingsToggle component for the repeated label/desc/switch row.
- Box the Random Mix blacklist (grouping built-in keywords with the custom
  filter), Ratings and the Analytics strategy section.
- Move the "Show Lucky Mix in menu" toggle out of the blacklist and up next to
  split-mix navigation and now-playing-at-top in the sidebar customizer.

* feat(settings): box remaining Appearance sections

Wrap library grid, UI scale, font and seekbar style in titled SettingsGroup
panels (reusing the existing section titles).

* feat(settings): box System language, logging and backup sections

Wrap language and logging in titled SettingsGroup panels, and rework the
backup section to drop its redundant inline header (the subsection already
provides it) and box its content. About / Contributors / Licenses stay as
free display content.

* feat(settings): box remaining Audio sections

Wrap Hi-Res, equalizer, playback speed, audio output device and track
previews in titled SettingsGroup panels (reusing the existing section titles).

* feat(settings): box Input tab keybinding sections

Wrap the in-app and global shortcut lists in titled SettingsGroup panels.

* feat(settings): box the Personalisation tab

Convert every customizer (sidebar, home, artist, queue toolbar, playlist,
player bar) to plain inner containers and wrap each in a titled SettingsGroup,
so the boxed look is consistent without nested cards. Box the queue display
mode picker too.

* feat(settings): box the Themes sections above the store

Add a boxed option to the flat Themes sections and apply it to Your Themes,
Auto-Switch Theme and Import (the theme store stays unboxed). Drop the inner
settings-card from InstalledThemes, ThemeImportSection and the scheduler so
the SettingsGroup is the only frame.

* fix(settings): give the Themes boxes a card carrier and accent header

The flat Themes sections had no settings-card behind them, so the bg-app
SettingsGroup had no contrast against the page. Box each above-store section
as settings-card > titled SettingsGroup (accent header) like the rest.

* fix(settings): clean up the server library sync status line

Collapse the offline status to a single icon + phrase ("Server offline —
sync deferred") instead of a redundant "Deferred" badge alongside it, and
drop the now-unused string across all 9 locales.

* fix(queue): keep toolbar toggle buttons coloured active while hovered

The generic .queue-round-btn:hover rule outweighed .active in specificity, so
an active button kept the hover colour until the pointer left — the toggle
only looked on after moving the mouse away. Add an explicit active-hover rule
(mirroring the mini player) so active wins immediately on click.

* fix(settings): fix Lyrics triple title, drop dead Discord cover keys

- Remove LyricsSourcesCustomizer's own section header (the subsection already
  titles it) and make its inner cards plain; the Lyrics boxes are now title-less.
- Drop the dead discordCoverSource/discordCoverSourceDesc i18n keys (superseded
  by discordCoverTitle/Desc) and un-jam the libraryIndexServer status line in
  all 9 locales.

* refactor(settings): drop redundant group titles and double frames

Single-group sections duplicated the subsection title in the group header — make
those groups title-less so the subsection header is the only title. A card whose
sole child is one group now collapses via CSS so single-group sections render a
single frame (matching the card-less Lyrics layout) instead of a card-in-group
double border. Multi-group cards keep their frame as the grouping container.

* fix(settings): keep the flat Themes cards framed when collapsing single-group cards

The single-group card collapse also flattened the Themes section cards, which —
not being inside an accordion — are themselves the contrast surface. Exclude
.themes-section descendants from the collapse.

* refactor(settings): use SettingsToggle for Appearance and System toggle rows

Replace the hand-rolled toggle-row markup in the Appearance visual options and
System tray/Linux/changelog rows with the shared SettingsToggle component, and
extend it with a searchText prop and ReactNode descriptions for the remaining
call sites.

* refactor(settings): roll SettingsToggle out to Integrations, Audio and Storage

Replace hand-rolled toggle rows in the Discord/Bandsintown/Now-Playing,
Hi-Res, hot cache and playback behaviour/rate sections with SettingsToggle.
Make its label optional (desc-only rows whose title is the group header) and
add searchText/id pass-throughs.

* refactor(settings): use SettingsToggle for the remaining standard toggle rows

Track previews master, sidebar lyrics style, YouLyPlus/static-only, queue
display mode and the sidebar split-nav/now-playing/lucky-mix rows now use the
shared component. Genuinely custom rows (drag lists, the skip-star threshold,
the AudioMuse row with its inline link, the fine-step advanced badge) stay
hand-rolled.

* fix(settings): drop duplicate titles on Hi-Res/Bandsintown/Now-Playing, un-jam locale line

These single-toggle sections kept a group title identical to their subsection
header; once the single-group card collapses the title rendered twice stacked.
Make them title-less (the subsection header is the label). Also split the
discordCoverTitle locale entry onto its own line in all 9 locales.

* feat(settings): restore section icons in boxed Themes headers

SettingsGroup gained an optional accent icon slot rendered before the
title; ThemesTab forwards the Palette/Clock/Upload icons the boxed
sections lost when they moved off the bespoke <h2> header.

* style(settings): re-indent SettingsGroup children to nesting level

Pure whitespace: children wrapped in SettingsGroup were left at their
pre-wrap indent. No content change (git diff -w is empty).

* fix(settings): clarify Native Hi-Res Playback description

The old copy led with the disabled-state behaviour ("forces 44.1 kHz"),
which read as if the toggle itself locked output to 44.1 kHz. Describe
what enabling actually does: play each track at its native sample rate
(reconfiguring the output device to match) instead of resampling to
44.1 kHz. Updated across all 9 locales.

* docs: changelog + what's-new for the settings layout refactor (#1126)
2026-06-18 22:24:34 +02:00

10 KiB
Raw Blame History

What's New

User-facing release highlights for the in-app What's New screen. Maintainers refresh the current line before promoting to next / release. Technical details and PR credits stay in CHANGELOG.md.

Within each section, order by user impact (most noticeable first) — not PR merge order. CHANGELOG.md keeps strict PR order inside Added / Changed / Fixed.

[1.49.0]

Highlights

AutoDJ — minimum pauses, maximum music

  • New AutoDJ mode — a smart crossfade that blends tracks intelligently. Each transition is shaped to fit the music: awkward gaps fade away, handovers feel natural, and you spend less time in silence between songs. It's now its own choice in Settings → Audio and its own button in the queue toolbar, sitting alongside Crossfade and Gapless — pick one at a time. Off by default; classic Crossfade is unchanged.

Playlist folders — your playlists, organised

  • Folders on the Playlists page and in the sidebar keep long lists tidy — group by mood, occasion, or anything you like. Drag playlists in, rename and collapse folders, or choose Move to folder from the right-click menu. Switch back to a flat list whenever you prefer.

Theme store — spot updates, pick your style

  • Version numbers on store themes and ones you have installed make it obvious when an update is ready.
  • Filter for animated or static themes only — less scrolling when you already know the look you want.

Settings — tidier and easier to scan

  • Settings are grouped into clear, labelled panels so related options sit together — less hunting around. The Native Hi-Res Playback option now explains in plain language what it actually does.

Fixed

Playback and audio

  • Opus/Ogg tracks no longer fight the seekbar while they are still loading — scrub to where you want to be and keep listening.

Player and playlists

  • Add to playlist from the player bar adds the song you are hearing, not the whole album.

Browse and library

  • Albums sorted by artist now list each artist's work AZ by title — no more random order within a name.
  • Artist → Year keeps artists grouped but walks through their albums chronologically, oldest first.

Windows

  • Windows: Previous, Play/Pause, and Next are back when you hover the taskbar icon — and Play/Pause shows whether music is playing or paused.

[1.48.1]

Fixed

Playback and audio

  • Changing tracks — skipping, or the automatic advance at the end of a song — no longer freezes the interface for a few seconds: the progress bar and lyrics keep updating, and on Windows a change of output device now takes effect right away.
  • Seeking an Opus/Ogg track — and then pressing Stop — no longer crashes the app.
  • macOS: pausing or stopping playback and then unplugging headphones (or switching the output device) no longer makes playback restart — it stays paused or stopped.

Offline, Now Playing, and Navidrome

  • On large Navidrome libraries, background library sync no longer locks up database writes for minutes at a time, so play history, ratings, and other saves go through without long delays.

Themes and integrations

  • Discord Rich Presence shows the album cover again when a server profile has both a local and a public address.

Other

  • Windows: the system media controls (Quick Settings media tile, lock screen, and third-party flyouts) now show the album cover and display Psysonic with its icon instead of "Unknown application".
  • macOS: closing the window with the red close button now respects Minimize to Tray — with it on, the window hides to the tray instead of quitting.

[1.48.0]

Highlights

Offline listening

  • When the server is unreachable, browse and detail pages show what you already have locally instead of empty errors — albums, artists, playlists, and cross-server favorites.
  • Starred tracks, pinned albums, and playlists live under one media folder; browse them in Offline Library and see disk usage at a glance.
  • Favorites auto-sync keeps loved songs on disk; pinned albums and playlists refresh when the library index updates.

Music Network — scrobble beyond Last.fm

  • Settings → Integrations now hosts a Music Network: connect Last.fm, Libre.fm, ListenBrainz, Maloja, Rocksky, Koito, or your own GNU FM instance — and scrobble to several at once.
  • Pick a primary service for loved tracks, similar artists, and stats; other connections still receive scrobbles. Your existing Last.fm setup migrates automatically.
  • A master switch turns the whole network on or off.

Theme Store

  • Browse and install community themes from Settings → Themes — search, dark/light filter, full-size previews, and sort by popularity or date.
  • Six palettes ship with the app; everything else installs on demand and works offline after the first download.
  • Now Playing follows every theme cleanly, including light palettes.
  • Import a theme from a local .zip when you have a package from a friend or your own design.
  • The sidebar nudges you when an installed theme has an update; one-click update from the theme card.

Fullscreen player

  • Rebuilt for much lower CPU and memory use: a calm, sharp fullscreen view with album art, waveform seekbar, up-next queue, synced lyrics, ratings, and a clock that follows your Clock format setting.
  • The song title no longer shows a leading track number, and descenders (g, j, p, q, y) are no longer clipped.

Live — richer now playing on Navidrome 0.62+

  • On servers with OpenSubsonic playbackReport (Navidrome ≥ 0.62), Live shows who is playing or paused, how far into the track they are, and playback speed when another client sends it — with smooth position updates between refreshes.
  • In Who is listening?, each listener shows a small status dot (playing, paused, or idle) instead of a vague “minutes ago” line.

Queue — Timeline mode

  • A third queue layout keeps the current track in the middle with history above and up next below — great for long listening sessions. Cycle the header control or pick it in Settings → Personalisation → Queue display.

Settings → Servers

  • Each card shows the server software and version (e.g. Navidrome 0.62.0) under the name, with a cleaner two-line layout and compact actions.
  • Navidrome 0.62+ shows a green AudioMuse-AI badge when the plugin is detected — no manual toggle on current Navidrome.

Sidebar — pin Now Playing to the top

  • New Settings → Sidebar toggle moves Now Playing to the top of the sidebar instead of the bottom (off by default).

Startup

  • A themed loading splash appears while the app starts — colours follow your active theme, including community palettes.

Improved

  • Audio decoding runs on Symphonia 0.6; streams start sooner and recover from stalls without restarting the player.
  • The Preload Next Track toggle under Settings → Storage → Buffering is gone — playback no longer waits on that extra RAM prefetch. Gapless, crossfade, and Hot Cache behave as before.
  • New Semitones playback-speed strategy (±12 st, 0.1 step) with two-decimal speed readout; optional fine steps in Settings → Audio → Advanced.

Fixed

Playback and audio

  • Windows: the app no longer keeps the audio device open while idle, so the system can sleep when music is not playing.
  • macOS: steady playback stutter from background device polling is gone on the default output path.
  • After a long pause, the seekbar shows the saved position immediately and the next Play resumes without an audible blip at track start.
  • Stop keeps the real waveform on the seekbar instead of falling back to flat bars.

Offline, Now Playing, and Navidrome

  • Now Playing cards (from this album, discography, most played) stay populated during cached and offline playback instead of blanking out on track change.
  • Navidrome Show in Now Playing and play-count scrobbles work when audio plays from hot cache, offline pins, or auto-synced favorites.
  • Mixed-server queues still report to the correct Navidrome server.

Themes and integrations

  • Self-hosted Music Network targets (Koito, Maloja, custom GNU FM with a pasted token) scrobble again — reconnect once if you connected before this fix.
  • Favoriting from the player bar, fullscreen player, or shortcuts updates the star in track lists and playlists immediately.
  • Discord Rich Presence shows album art again when covers come from the server.
  • Focus rings and dropdown borders follow the active theme consistently.

Browse and library

  • Tracks tagged with several genres in one field (e.g. Metal/Ambient/Experimental) match each genre again in browse, filters, and search.
  • All Albums → Only compilations returns results for common tagging patterns.
  • Album grids show the album artist on compilations instead of a random track artist.
  • Song rails (Random Picks, Discover Songs, etc.) link each name in multi-artist credits separately.
  • Artist → Top Tracks play works even when the artist page has no albums loaded yet.
  • Home → Most Played no longer jumps the page when you load more albums.
  • Mainstage hero backdrop stays in sync when you skip albums quickly.

Other

  • Linux: the curl | bash auto-installer works again.
  • Linux: internet radio no longer appears twice in the desktop now-playing overlay.
  • On Navidrome 0.62+, add/edit/delete radio stations is shown only to admin accounts; everyone can still play and favourite stations.
  • Linux custom title bar: pick window button styles (dots, flat, pill, and more) and optionally hide minimize in Settings → Appearance.
  • The active server card under Settings → Servers draws a complete border on all sides.

Under the hood

  • Navidrome 0.62+ auto-detects AudioMuse-AI and routes Instant Mix / Lucky Mix through the smarter API when the plugin is present — older Navidrome keeps the manual toggle you already know.