Promote the headless daemon to its own section with a screenshot and the
wiki link, add a Kiosk Mode section for Raspberry screens and handheld
consoles, remove the mermaid architecture diagram and the star-history
chart.
cc
The four header nav tabs each owned a PopupWindow for their dropdown.
A PopupWindow grabs the pointer while open, so hovering a sibling tab
delivered no hover event and the menus could not be hover-switched.
Add a HeaderMenuState global (open-index, anchor-x, items, home-item)
and the NavMenuEntry struct to state.slint. Tabs now write their
identity into the global on hover/click instead of showing a popup;
the menu panel itself will be rendered by a separate in-window overlay.
Move NavMenuItem into its own file so the overlay can reuse it.
cc
Returning an empty `icon_name` in `tray_linux_ksni.rs` forces SNI
panels (e.g., KDE Plasma) to render the explicit `IconPixmap` data.
This prevents panels from incorrectly resolving the full-color app icon
from the system theme instead of the intended monochrome tray glyph.
Also updates `src-tauri/icons/icon-symbolic.svg` and regenerates
all `tray-dark-*.png` and `tray-light-*.png` assets.
Adds `static/logo.svg` as the main application logo.
Inlined SVG component for the upcoming track-shuffle mix button.
Uses fill="currentColor" so it inherits theme color. The source
SVG (static/dj-1.svg) is kept as a reference asset.
cc
Addresses three visual gaps in the sidebar after the earlier brightening
pass:
1. My QBZ parent — icon was inheriting the row's text-muted color
because the custom .icon-container had no color rule of its own. Now
the icon container sets accent-primary and the parent row's label
uses text-primary, matching NavigationItem.
2. Folder rows — the folder glyphs were still muted because .folder-
header / .collapsed-folder-btn / .folder-popover-header all carried
text-muted as their base color, and FolderGlyph paints via
currentColor. Switched each surface's base color to accent-primary
and added explicit text-primary overrides on the actual label spans
(.folder-name, the popover header span) so the labels stay bright.
3. Section headers — PLAYLISTS had no icon at all and Library only had
a chevron. Added glyphs via a new .section-header-with-icon class
that runs accent-primary at the container level (so the SVG picks
up the tint) with a nested span override for the uppercase label.
PLAYLISTS uses a new PlaylistsGlyph.svelte (user-supplied
list-music-player SVG, checked into static/). Library uses
lucide-svelte LibraryBig for now — swap to a custom SVG later if
desired.
cc
Swaps the outline lucide Folder / FolderPlus icons throughout the
sidebar for the user-supplied solid SVGs, with a state-aware variant
on the folder header so expanded folders actually *look* open.
New component: icons/FolderGlyph.svelte — a single file with three
variants (closed / open / new), fill="currentColor" so it picks up the
surrounding --accent-primary color from the nav item.
Placements:
* Folder header (collapsible tree node): open variant when expanded,
closed when not. Reinforces the chevron rotation with a second
visual cue.
* Collapsed-sidebar folder button: closed (there's no expand state
when the whole sidebar is narrow).
* "Move to folder" context-menu entries: closed (list items).
* Folder popover header (opened from the collapsed-sidebar button):
open (the popover IS showing the folder's contents).
* "New Folder" menu item: the new variant (with the + indicator
baked into the glyph).
Source SVGs are checked into static/ for traceability.
cc
Referenced by the new My QBZ collapsible nav section (commit 8466a619)
but the asset file itself was untracked — this ensures it ships with
the feature branch for clean builds.
cc
Replaces /music-library.svg references in Sidebar and TitleBarNav with
/music-library-2.svg (the corrected all-black monochrome asset the user
provided) and swaps the <img> rendering for a <span> with CSS mask so the
icon inherits the theme's text color — same pattern now used for My QBZ,
cassette, collection, and the existing plex-mono icons.
cc
Aligns with Qobuz's own Library rename in their mobile and desktop
beta apps. Command names, store names, i18n keys, file names, and
internal route identifiers are all unchanged — this is strictly a
user-visible text + icon rewrite.
- Sidebar / TitleBar nav Favorites entry uses /static/music-library.svg
instead of the lucide Heart
- Artist and label favorite buttons use /static/user-add.svg (albums
and tracks keep the Heart affordance)
- 5 locale files: all values containing "Favorites" / "Favoritos" /
"Favoriten" / "Favoris" / "Favoritos" rewritten to "Library" and
locale-appropriate equivalents (Biblioteca / Bibliothek /
Bibliothèque / biblioteca)
- "Add to Favorites" / "Remove from Favorites" buttons and toasts
renamed to "Add to Library" / "Remove from Library"
- Hardcoded title= tooltip strings on track Heart buttons replaced
with $t() calls
cc
Provided by user for the upcoming Mixtapes & Collections feature (spec
qbz-nix-docs/specs/2026-04-18-mixtapes-collections-design.md, §5.5).
Used for sidebar nav items and detail-view headers.
cc
Tighten the viewBox so the vinyl fills ~97% of the canvas (matching
Steam/Chrome/Papirus sizing). Add a #3968be stroke rim around the
vinyl edge so the icon remains visible on pure-black backgrounds.
Include a subtle radial inner-light from top-left for depth.
Also adds 512x512.png for Flathub compatibility.
Regenerate all PNG exports: Tauri standard sizes, Windows Store
squares, ICO, Android mipmaps, and static logos.
cc
Apply the new matte-vinyl QBZ logo (Flathub-compliant: square canvas,
74% footprint, no baked shadows/gloss) across every icon asset: Tauri
standard sizes, Windows Store squares, Android icons and mipmaps,
static/, README, and the tray.
Ship two tray variants (black and white glyphs) and pick the right
one at runtime by reading GNOME color-scheme, GTK settings, and KDE
kdeglobals. Defaults to light-theme glyph when nothing matches.
Login screen: logo 80 -> 175 px with a subtle var(--text-muted)
drop-shadow using color-mix() for alpha, plus QBZ and "Qobuz(TM)
Player" under the icon. Update app.tagline i18n accordingly.
cc
Referenced by AwardView hero / Other Awards mini-card / AlbumDetailView
sidebar award avatar in commit d719fb67 but the asset itself was never
tracked. Ships the SVG so the placeholder renders after a clean clone.
cc
Use Courier New/system monospace for --font-mono instead of
bundling JetBrains Mono (270KB). Only used for log output
and duration displays where a custom font adds no value.
Remove @import for fonts.googleapis.com. Self-host JetBrains Mono,
Oswald, and LINE Seed JP with @font-face declarations. App now works
fully offline without external font requests.
Display parental_warning badge (E icon) next to track titles in all
views: TrackRow, QueuePanel, NowPlayingBar, ImmersivePlayer with all
13 visualizer panels, MiniPlayer surfaces, and AlbumDetailView.
Propagate parental_warning field through the full data chain from
Rust backend (qbz-models, queue, commands_v2, session_store, API
server) to frontend stores, adapters, and UI components. Badge uses
CSS mask technique with explicit.svg for theme compatibility.
The worker was loaded via Vite's blob: URL transform, which
prevented it from resolving sibling WASM files (openjpeg.wasm,
jbig2.wasm). Now the worker is served from static/pdfjs/ as a
real HTTP resource alongside the WASM files, so JPEG 2000 and
JBIG2 decoders initialize correctly.
Removed disableWorker hack — worker runs properly now.
PDF booklets use JPEG 2000 images which require OpenJPEG WASM.
Copy pdfjs-dist WASM files to static/pdfjs/ so they are served
at a known URL, and set wasmUrl parameter on getDocument().
- Add 4 bundled fonts: Montserrat, Noto Sans, Source Sans 3, plus
existing LINE Seed JP (default) and System fallback
- Font selector dropdown in Settings > Appearance, after Language
- Persisted in localStorage, applied on app bootstrap via data-font
attribute on <html> which overrides --font-sans CSS variable
- @font-face declarations for variable font files in static/fonts/
- i18n key "fontFamily" added to all 4 locales
Replaced video backgrounds with layered radial/linear CSS gradients
matching the iOS Qobuz style. DailyQ uses gold/amber tones, WeeklyQ
uses purple/lilac. Cards overlay "qobuz" badge and mix name on the
gradient. Removed HorizontalScrollRow wrapper since only two cards
exist. Deleted video assets from static/video/.
Adds 3-state normalization icon between fullscreen and volume controls.
Uses mask-image SVGs for theme-compatible coloring. Reduces song card
min-width by 72px to accommodate the new control.
- Hide button only shows when content filtering is enabled
- Use custom blind-eye.svg icon
- Remove border for cleaner look
- Banner also conditional on filtering being enabled
cc
- Set rotation speed to 33.333 RPM (0.0582 rad/frame at 60fps)
- Remove Y-axis parallax from vinyl position (stays centered)
- Remove Y parallax from shader for perfectly concentric rotation
- Add mipmaps and trilinear filtering for anti-aliasing
- Enable anisotropic filtering when available
- Use PNG instead of SVG for better WebGL compatibility
- Extreme horizontal parallax: cover 200px, vinyl 120px
- Reduced vertical parallax for subtle depth
- Shader parallax: 0.15 horizontal, 0.05 vertical
- Disc appears to slide out of sleeve with minimal mouse movement
- Updated qbz-logo.svg and qbz-logo.png
- Added qbz-vinyl-v3.svg for VinylPanel
- Regenerated all Tauri icons from new logo
- Updated Android icons and favicon
- Add expandable window controls in header (hover to expand)
- Fullscreen toggle (F11)
- Exit immersive (Esc)
- Close app
- Move Repeat button to left group: Fav | Shuffle | Repeat
- Remove QualityBadge from player controls
- Add F11 keyboard shortcut for fullscreen toggle
- Use Tauri window API for fullscreen functionality
Backend:
- Add get_artist_tracks command for fetching artist's popular tracks
Frontend:
- Fallback to artist's popular tracks when tracks_appears_on is sparse
- Remove card hover movement, only image moves up on hover
- Add hover overlay with (add to queue) (play) (play next) buttons
- Use playlist.svg icon for playlist cards and glyph
- Radio glyph shown by default, replaced by action buttons on hover
- Fix icon sizes: QBZ (22px) vs Qobuz (18px) for visual balance
- Track playlist.svg asset
- Reduce filter panel text sizes from 13px to 12px for consistency
- Update artist alpha-index to use same styling as albums/tracks tabs
- Replace boxed buttons with clean text-only alpha letters
- Change overflow-y to scroll to always reserve scrollbar space
- Fix sticky header top position to -24px to eliminate gap with window edge
- Add proper padding-top compensation when scrolled
Albums now show a small badge indicating their source:
- HardDrive icon for local files (source='user')
- Qobuz logo for offline cached content (source='qobuz_download')
Badge appears in bottom-right corner of album artwork.
- Add cast-aware badge that shows protocol name (DLNA/CAST/AIR)
- Show protocol-specific SVG icons in tooltip (dlna.svg, cast_audio.svg)
- Hide DAC passthrough and exclusive mode badges when casting
- Stop hardware polling when casting to avoid misleading info
- Add purple theme styling for cast badge consistent with cast UI
cpvsc
- All band members go to single 'Members' list
- Show ended status with muted color
- Tooltip shows roles + period (e.g. 'guitar (1981 - 2003)')
- Remove separate 'Former Members' section
cc
Keep the onPerformerSearch infrastructure in TrackInfoModal and
AlbumCreditsModal but don't pass the prop. Performer names are
now plain text. Re-enable when MusicBrainz allows precise lookups.
Also fixes: sticky tabs in AlbumCreditsModal now work correctly.