Skip to content

v1.6.0

Choose a tag to compare

@whleucka whleucka released this 02 Sep 15:20
· 46 commits to main since this release

Listening

  • Data saver — a new profile switch. Streams everything as 128k Opus, including the high-bitrate lossy sources that used to be sent as-is. Roughly half the bytes, and on a weak mobile signal it is the difference between a track starting in a few seconds and stalling for the better part of a minute. It only re-encodes when the encode is meaningfully smaller than the original, so a 96k MP3 is left alone rather than "shrunk" into something bigger.
  • Transcode audio — a new profile switch, on by default. Turn it off to receive the original file untouched: better quality, far more data, and some browsers stall on large FLACs. Data saver has nothing to reach for while it is off.
  • ReplayGain follows whichever path a track actually took — baked into the encode when the track is served as Opus, applied by the player when it streams from the source, never both.

Playback

  • Crossfade now rides an equal-power (sin/cos) curve instead of two linear ramps. Complementary linear ramps sum to about -6 dB at the midpoint, so every handoff dipped in the middle and was heard as one track stopping and another starting; the perceived level now stays flat across the whole overlap.
  • Each side of a fade peaks at its own ReplayGain target, so the crossfade rides on top of normalisation instead of flattening it.
  • An end-of-track advance now names the track it is leaving, so the server can tell a retried advance from a genuinely new one. Before this, a retry that landed late advanced the queue for real and silently skipped a track.
  • The hidden-tab pre-advance handoff added in v1.5.0 has been withdrawn. The tagged advance retries cover the same lost-advance case without parking a second audio element mid-queue.

Admin dashboard

Rebuilt around one time window and the listening data.

  • One range selector at the top — 24 hours, 7 days, 30 days, 90 days, all time — drives every widget, and the choice is sticky per session. The four separate requests charts that all showed the same metric are gone. KPIs carry a delta against the previous equal-length window, suppressed for all-time rather than compared against a partial period.
  • New headline strip: listening time, plays, completion, listeners, library and reach, each with a sparkline.
  • New widgets: listening over time, listening clock, plays by source, source quality, top tracks, top artists, top albums, library growth, listeners, and visitors by country.
  • The eight operations cards that each duplicated an admin module collapse into a single Operations strip, with every cell linking through to the module that owns the detail.
  • Widgets declare their own band and position, so the layout is fixed regardless of registration order.

Interface

  • The Admin link in the sidebar and account menu is now shown only to clients flagged is_admin, instead of pointing every listener at a login wall they have no account for. The flag appears in no form or settings payload — granting it takes an UPDATE against the database.

Full changelog: v1.5.0...v1.6.0