Files
scriptosandClaude Opus 5.5 67a687f4e6
Build & Push Docker Image / Build & push image (push) Successful in 6m49s
Release 0.7.1: gapless conversion only without quality loss
LOSSLESS_ONLY (default true): follow-up tracks are only converted when
nothing is lost (MP3 into a FLAC stream). FLAC after MP3 or higher
resolution FLAC plays in original quality with a normal track change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:18:08 +01:00

4.9 KiB
Raw Permalink Blame History

Changelog

0.7.1 – 2026-10-26

  • Gapless: LOSSLESS_ONLY (default true) – follow-up tracks are only converted if no quality is lost (MP3 into a FLAC stream). A FLAC after an MP3 or a higher-resolution FLAC is played in original quality with a normal track change instead of being converted to MP3 / resampled

0.7.0 – 2026-10-26

  • OpenHome renderer (Product, Playlist, Time, Info, Volume): the app hands the whole queue to the bridge, which plays it on its own – gapless mode included
  • Soft fades (FADE_MS) on pause, stop and track changes by the user
  • Gapless: cover per track in the BluOS app (ICY StreamUrl with an image URL)
  • Gapless: mixed formats – follow-up tracks in another format/sample rate are converted with ffmpeg
  • Gapless: resume after long pauses continues at the paused position (BluOS reconnects after ~2 min)
  • Monitoring: /api/health (Uptime Kuma), /api/prtg (PRTG HTTP Data Advanced), /metrics (Prometheus)
  • English web UI (UI_LANG=en|de)
  • Docker image with ffmpeg, multi-arch build via Gitea Actions (git.techniverse.net/scriptos/bluos-upnp-bridge)
  • Fix: stale player status right after pause/play no longer flips the state back
  • Fix: upstream connections are closed when the player disconnects mid-stream

0.6.1 – 2026-10-26

  • Gapless: detect the end of the sent audio when BluOS freezes its counter or reports "connecting" (playlist end, follow-up track that can't be stitched) and react immediately
  • Gapless: keep the stream open until the sent audio has been played; refuse reconnects to drained streams

0.6.0 – 2026-10-26

  • Gapless: follow-up tracks are sent to the player only 20 s before they start, so queue changes in the app (reordering, removing, adding tracks) take effect until then
  • Gapless: an emptied queue removes the queued follow-up track
  • Fix: at the end of a playlist the first track of the gapless stream briefly played again – BluOS reconnected to the finished stream; the bridge now pauses before closing it and refuses reconnects

0.5.2 – 2026-10-25

  • Fix: gapless mode showed every track twice as playing on the server – the content type is now taken from getSong instead of a probe stream request

0.5.1 – 2026-10-25

  • CLIENT_NAME: configurable client name towards the music server ({player} = BluOS player name)

0.5.0 – 2026-10-25

  • Server types: subsonic (token auth) and opensubsonic (Airsonic Pulse, Navidrome, …) with API key authentication or password authentication as fallback
  • SUBSONIC_ALIASES: further hostnames of the music server (public domain vs. internal address)
  • Covers for the player are served by the bridge – no server credentials in the player's image URL
  • Playback refused if password authentication is used without the stream proxy
  • Connection test shows server type and version

0.4.0 – 2026-10-24

  • Gapless playback (experimental, GAPLESS=true): the bridge serves one continuous stream and appends the next track's audio directly – perfect for live albums, DJ mixes and audio plays
    • MP3: ID3 tags and Xing/Info frames of follow-up tracks are dropped, frames are concatenated
    • FLAC: STREAMINFO of the first track is marked open-ended, follow-up tracks are appended without metadata blocks (same sample rate / channels / bit depth required)
    • Tracks that can't be stitched fall back to a normal track change
    • The bridge maps the playback position to the audible track and reports track changes to the app
    • ICY titles: the BluOS app shows the current track in its second line
  • Track length from Subsonic getSong if the app doesn't send it

0.3.0 – 2026-10-24

  • Stream proxy: Subsonic streams are served through the bridge (/stream/<random token>) with Content-Length and byte-range support. BluOS now treats them as files: seeking works natively and the title stays visible after seeking. The service account token never reaches the player.
  • New setting PROXY_STREAMS (default true)
  • Track end detection by known track length – BluOS reconnects length-less HTTP streams like internet radio

0.2.1 – 2026-10-24

  • Fix: songs restarted at the end instead of advancing (BluOS reconnecting the stream)

0.2.0 – 2026-10-24

  • Web UI: live status page (now playing, player and bridge status, event log) and settings page with basic auth
  • Settings persisted in data/settings.json, runtime changes for Subsonic, repeat and log level
  • Tools: test player connection, test Subsonic login, pause/resume, restart

0.1.x – 2026-10-24

  • UPnP/DLNA MediaRenderer for BluOS players (SSDP, AVTransport, RenderingControl, ConnectionManager, GENA)
  • Subsonic credential rewriting to a stream-only service account; download.view → stream.view
  • URLs with foreign credentials are refused instead of being passed to the player
  • Track end detection incl. BluOS queue fallback and "repeat one" loops; BluOS repeat switched off on playback