TAG_DETAILS.md, CHANGELOG_HIGHLIGHTS.md, CHANGELOG_FULL.md for the Qobuz Connect release. 185 commits covering QConnect protocol, Linebed visualizer, playlist follow/unfollow, audio settings sync overhaul, and dozens of fixes. cc
4.8 KiB
4.8 KiB
QBZ 1.2.0 Full Changelog
185 commits between v1.1.20 and v1.2.0.
New Features
Qobuz Connect
- Full Qobuz Connect protocol implementation (renderer + controller)
- 4 new crates: qconnect-protocol, qconnect-core, qconnect-app, qconnect-transport-ws
- Native WebSocket transport with qcloud framing and protobuf encoding
- Queue domain model, reducer, and pending lifecycle
- Renderer domain state with server command contracts
- App adapter with pending timeout, resync, and concurrency policy
- Controller command API and session snapshots
- Admission middleware with blocked events
- QConnect toggle button beside cast in player bar
- QConnect panel with runtime diagnostics
- Renderer command routing through CoreBridge
- Queue materialization and remote playback hydration
- Active renderer state tracking for skip and seekbar
- Volume/mute routing to peer renderer
- Shuffle, repeat, queue play, and history play guards
- Autoplay mode sync and load_tracks remote commands
- QConnect badge as full-height badge in song card
- Developer toggle for QConnect dev panel
- Custom device name with hostname detection
Linebed Visualizer
- New 3D terrain visualizer in Immersive mode
- 4096-point FFT with 512 bands and linear scaling
- 200 lines at 60fps with real 3D perspective projection
- Power-law frequency redistribution and edge tapering
- Isometric perspective matching musicvid.org camera angle
- FPS control in settings (default 60fps)
- Canvas viewport adjusted to not overflow player area
Playlist Follow/Unfollow
- Qobuz API playlist/subscribe and playlist/unsubscribe endpoints
- v2_qobuz_subscribe_playlist and v2_qobuz_unsubscribe_playlist commands
- Bookmark toggle button in PlaylistDetailView
- Favorites/Following sub-tabs in Favorites > Playlists
Other Features
- Documentation link in sidebar gear menu
- Help tooltips on bit-perfect audio settings (Exclusive Mode, DAC Passthrough, Force Bit-Perfect)
- No-telemetry note on MusicBrainz integration description
- Portuguese (pt-BR) translation
- Artwork proxy through backend cache
- Streaming playback with seekbar position tracking
- True gapless playback for ALSA Direct mode
Audio Fixes
- Audio settings sync to CoreBridge player on change and session activation
- alsa_hardware_volume was hardcoded false in conversion function
- v2_reset_audio_settings now syncs to CoreBridge player
- Volume locked at 100% when ALSA Direct hw: is active
- PipeWire rate switch delay increased from 300ms to 500ms
- PipeWire rate verification after stream creation with automatic retry
- HiFi Wizard reads real DAC sample rates from /proc/asound
- Souvlaki MediaControlError formatting uses {:?} for cross-platform compatibility
- ALSA device lock prevented on streaming failure
- PipeWire suspension before ALSA Direct exclusive access
- Clock.force-rate re-applied after stream creation on resume
- HTTP auto-decompression disabled for audio downloads
- 120s total timeout removed for large Hi-Res+ tracks
- Quality fallback when CDN fails at current quality level
- Retry with fresh URL on CDN premature EOF
Window / UI Fixes
- KWin SSD window rule hack removed entirely (caused double titlebar + CPU spike)
- Stale KWin rules from v1.1.14-v1.1.20 cleaned up on startup
- Screen resolution clamping fixed (xdpyinfo returns combined multi-monitor)
- Offline mode button added to network error screen
- Artist album counts removed from Favorites and Search (misleading API data)
- Playback error messages show actual details instead of [object Object]
- Discover menu items navigate to correct home tab
- Session restore hardened to prevent ghost CSS errors
- Tray icon visibility improved across Linux DEs
- Bit-perfect stream match rules corrected
Distribution / Build
- MuPDF upgraded from 0.5 to 0.6 (fixes Arch Linux build)
- Booklet feature gate removed — MuPDF always compiled
- Snap MPRIS slot removed to unblock Snap Store review
- Issue templates migrated to YAML forms
- Dependency updates: devalue 5.6.4, SvelteKit 2.53.3
- Credential tests skip correctly in Nix sandbox
- Dependabot config and PR redirect workflow added
- Local library disc/CD suffix no longer misidentified as disc folders
Qobuz Connect Protocol Details
- Protobuf queue command and server event contracts
- Android controller WebSocket message support
- Outbound renderer reports (RNDR_SRVR)
- Inbound server commands (SRVR_RNDR) decoding
- Queue drift reporting and reorder/remove event resyncs
- Authoritative queue mutations and shuffle order
- Remote repeat mode with pending/ack lifecycle
- Rapid transport control unblocking
- Session cursor alignment and renderer handoff
- Queue replacement through shared helper
- Stale renderer drift suppression during queue loads
i18n
- All new features localized in 5 languages (en, es, de, fr, pt)
- Playlist follow/unfollow, sub-tabs, volume lock, help tooltips, documentation link, MusicBrainz privacy note