Files
qbz/docs/release-1.1.19/CHANGELOG_FULL.md
T

11 KiB

QBZ 1.1.19 Full Changelog

Codename: Limpiando la casa Commits: ~200 since v1.1.18


Audio Engine

rodio 0.22 migration

  • Removed vendored rodio/cpal fork entirely; now uses upstream rodio 0.22
  • All decoder, stream, and buffer management updated to new API
  • Explicit 100ms buffer size replaces vendored cpal tuning
  • PipeWire clock.force-quantum disabled for rodio 0.22 compatibility

ALSA improvements

  • Sample rate fallback when DAC doesn't support the requested rate
  • PipeWire sink suspended before ALSA Direct exclusive access to prevent DeviceBusy errors
  • ALSA Direct gapless playback enabled and defaulted to ON
  • Gapless restrictions removed for DAC Passthrough and ALSA Direct modes
  • Pre-check hardware rates via /proc/asound before attempting ALSA Direct

Smart quality downgrade

  • When hardware can't handle a sample rate, QBZ selects the best compatible quality automatically
  • Quality badge tooltip shows "Hardware compatibility" explanation
  • Cached audio also verified against hardware rates before playback

Other audio fixes

  • Hot-reload gapless and normalization settings to active player
  • Stop updating live gain during EBU R128 refinement passes
  • Audio settings sync on startup for OAuth login path
  • Output device name polling during playback
  • Configured device name shown when player has no active stream
  • Deprecated CPAL name() replaced with description()

Booklet Viewer

  • Albums with digital booklets show a booklet button in the album header
  • Full in-app PDF viewer with page navigation
  • MuPDF native backend replaces pdfjs-dist for crisp rendering and smaller bundle
  • Download button to save booklet PDF locally
  • Auto-fit page width on load
  • V2 backend command fetches PDF through Tauri to bypass CORS
  • Goody/booklet model added to qbz-models crate
  • i18n keys added to all 4 locales

Neon Visualizers

Three new Canvas 2D visualizers under Immersive > Neon:

Laser (NeonFlowPanel)

  • Neon laser beams that pulse, bend, and shift with bass/mid/high energy
  • Dual rendering layers for glow effect

Tunnel (TunnelFlowPanel)

  • Depth-tunnel with warped elliptical rings
  • Curved wisps flow outward from center
  • Watercolor cloud layer for atmosphere

Comet (CometFlowPanel)

  • Watercolor nebula with curved wisps, tunnel rings, and central abyss
  • Album art color extraction — samples artwork, derives 4 dominant hues + darkest color
  • Palette lerps smoothly on track change
  • Time-based hue mutation for continuous color evolution
  • Fades to near-black during silence; wisps, rings, and clouds scale with total energy
  • Corner vignettes using darkest album art color with bass-driven drift
  • Beat detection spawns wisps on bass transients

Shared

  • All panels have per-panel FPS configuration
  • Dedicated submenu with fixed positioning and hover bridge

Immersive Mode

  • 3-mode background — Full (GPU shader), Lite (CSS blur), Off; configurable in settings
  • Auto-degrade — sustained low FPS triggers automatic downgrade with dismissible modal notification
  • Per-panel FPS — each visualizer has independent FPS settings; default 15 FPS
  • Configurable ambient FPS — separate from panel FPS
  • Ambient background fixes — 8x8 downscale replaces CSS blur; dark artwork mood preserved; MIRRORED_REPEAT for texture edges
  • Composition profiles — GSK renderer selection and blur toggle per profile
  • GPU detection — AMD and Intel identification for profile recommendations
  • GSK renderer control — Cairo, GL, NGL, or Vulkan backend selection
  • Immersive settings moved to end of Appearance section with standard collapsible pattern

Artist Discovery

MusicBrainz tag-based recommendations

  • "You May Also Like" uses MusicBrainz genre tags instead of typical similar-artist APIs
  • Deterministic shuffle for varied results across visits
  • Shows 6 artists with 2 reserves for instant thumbs-down replacement
  • Similarity percentage displayed per recommended artist

Tag-scoped dismissals

  • Thumbs down dismisses an artist from a specific tag/genre context only
  • Same artist can still appear in different genre contexts
  • SQLite table with composite key (tag + normalized artist name)
  • Instant removal from list with reserve pull-in

Artist Network sidebar

  • Opens by default; preference persisted in localStorage
  • State restoration after Queue/Lyrics close
  • Clean transitions when navigating between artists (state reset on artist change)
  • Simplified header: "Artist Network" title, PanelRightClose icon
  • Empty relationship sections hidden automatically

Label Releases View

  • Completely redesigned with label logo header
  • Sorting: date, title, popularity
  • Filters: album, EP, single, live
  • Search bar with animated expand
  • Group-by-artist toggle with collapsible sections
  • Performance improvements for large label catalogs
  • Consistent back button and navigation height

Security

  • Removed hardcoded key material from credential encryption
  • Cryptographically secure session ID generation (replaces deterministic)
  • DOM-based HTML sanitization replacing regex-based sanitizer
  • Sensitive identifiers and secrets redacted from backend logs
  • Removed unused user_id accessors from Qobuz and Tauri API modules
  • Hardened release-aur CI workflow permissions and input validation

Spotify Import

  • Removed Spotify API dependency entirely
  • Uses embed page scraping for playlist import — no credentials needed
  • Link resolver updated for new scraping approach

New Features

  • Explicit content badges across the entire app
  • Search track context menu — right-click works on search result tracks
  • Track/disc number extraction from file tags during local library import
  • Window size validation prevents GDK crash from corrupt DB values (by @arminfelder, PR #136)
  • Cancel download for purchase album downloads
  • Miniplayer keyboard shortcuts
  • Autoconfig-graphics CLI tool (qbz --autoconfig-graphics)
  • Custom artwork for playlists and folder sidebar visibility controls
  • Image cache — frontend image cache with size-aware loading, LRU eviction, and settings UI
  • Granular navigation history with per-item scroll position

Stability

  • Graceful shutdown on RunEvent::Exit to prevent heap corruption
  • WebKit double-destroy prevention — secondary windows close before main window
  • Window size clamping to screen resolution; physical/logical pixel mismatch fixed
  • Flatpak tray icon path corrected for sandbox environment
  • Snap MPRIS declared as slot instead of plug
  • Titlebar double-click maximize fixed
  • Opaque main window default for shutdown stability on Linux
  • WebKit EGL shutdown workarounds applied defensively

Bug Fixes

  • Equalizer animation no longer appears active when player is paused
  • Home settings changes apply immediately without page reload
  • Navigation scroll position scoped per item with 1-hour TTL
  • Session restore no longer recalls stale scroll positions
  • Download paths restructured to Artist/Album [FORMAT][Quality]/track
  • EPs and singles backfilled when artist page omits them
  • Search grid no longer collapses to single column on keystroke
  • Escape on empty search input blurs focus instead of navigating
  • Multi-select add-to-playlist sends all tracks in one call
  • Deduplicate albums with quality subfolders in local library
  • Reco meta caches cleared when image cache is cleared
  • ML/reco module optimized for home view loading
  • Artist resolution parallelized for card rendering
  • Force dmabuf respected as full GPU opt-in for compositing
  • FavQ and TopQ context types added to playback context
  • Last.fm uses user-scoped storage for session restore
  • Qobuz purchase source detection on library scan
  • Svelte a11y and component warnings resolved across 26+ components
  • ADR-001 compliance maintained across all new components

Scene Discovery

  • Explore by location — discover artists from the same city, country, or musical scene as any artist
  • MusicBrainz-powered location and genre affinity matching with Qobuz catalog validation
  • Progress tracking with animated loading phases (searching → validating → done)
  • Two view modes: responsive grid and sidepanel with artist discography
  • Alphabetical A-Z grouping with jump navigation index
  • Genre multi-select filter with searchable popup (when >9 genres)
  • Text search across discovered artists
  • Sticky compact header on scroll with scene label, country flag, and genre summary
  • Paginated "Load More" for large scenes
  • Filtered count display (e.g., "42 / 100 artists")

Discovery Tabs (Redesigned Home)

3-tab home layout

  • Home — customizable feed with drag-to-reorder sections and per-section visibility toggles
  • Editor's Picks — fixed Qobuz editorial curation (New Releases, Editor's Picks, Qobuzissimes, Press Awards, Popular Albums)
  • For You — personalized recommendations built from listening history

Home tab customization

  • Sections include: New Releases, Press Awards, Popular Albums, Qobuzissimes, Editor's Picks, Qobuz Playlists, Your Mixes, Essential Discography, Recently Played, Continue Listening, Your Top Artists, More From Favorites
  • Settings modal (gear icon) to toggle visibility and reorder sections
  • Genre filter available on Home and Editor's Picks tabs

For You tab

  • Progressive loading with skeleton placeholders per section
  • Radio Stations — 9 album-based radios (3 recent + 3 favorites + 3 top artists); dominant color extraction per card
  • Artists to Follow — 10 suggested artists from similar-to-your-top-3 with styled 210px cards
  • Spotlight — featured artist card with top tracks, playlists, "Create Radio" button, and "Qobuz Radio Station" subtitle; dominant color from artist image
  • Similar to [Album] — albums related to a featured album
  • Rediscover Your Library — neglected/forgotten albums from your collection
  • Essentials [Genre] — essential albums from one of your top genres

Sticky compact header

  • Appears after 60px scroll; hides greeting and shows compact tab navigation with genre filter
  • Edge-to-edge positioning with negative margin pattern (matching ArtistDetailView jump-nav)
  • Time-based greeting (Morning/Afternoon/Evening) with i18n and username interpolation

Session cache

  • Album, artist, and track data cached to avoid redundant API calls on navigation
  • Scroll position preserved per tab

Packaging

  • Cargo.lock tracked in git — enables deterministic builds for distro packagers (NixOS, etc.)
  • Tauri version sync — @tauri-apps/api updated to 2.10.1 matching Rust crate 2.10.x
  • AUR cleanup — removed non-functional aur-source and aur-git packages; only qbz-bin maintained
  • AUR maintainer email updated
  • APT repository — CI triggers APT repo update on release publish
  • Flatpak — PipeWire stream matching restored; quality guidelines applied

Contributors

  • @arminfelder — Window size validation (PR #136)