Repository navigation
What's changed
-
10-Band Equalizer: A full graphic EQ with presets and the Studio Master Clarity DSP filters ported from LastWave Native — interactive vertical bands, acoustic and stage clarity targets, instant preset switching and a "Custom" fallback when a stored preset is no longer shipped.
-
Custom Crossfade: Pick a 3–12s perceptual crossfade; the engine pre-resolves the incoming lossless stream early and guards WASAPI Exclusive against overlapping mpv clients, so tracks blend instead of colliding.
-
Floating Mini Player: The mini player is a real window now — it detaches into a 380px always-on-top strip at the bottom-right of where the main window sat, remembers its last position, and restores your size, position and maximised state on the way back.
-
Now Playing & Lyrics: The media pane stops scrolling and scales its artwork to fit, metadata gets a clearer hierarchy with unified badges, the page paints its own stage so leaving it fades the whole screen instead of dropping the backdrop in one frame, and lyric lines fade behind a gradient mask instead of clipping hard-edged — with a static lyrics view and tighter line-by-line sync.
-
Tougher Playback: Fixed the audio races that could freeze playback, capped DASH assembly memory spikes, gave the local media server an auth token, and stopped WASAPI hot-plug property storms from stuttering audio — probe results are cached and only identity changes reach Dart.
-
Sign-In That Doesn't Lie: Cookie capture only persists a complete jar (baseline-change or identical-twice, domain-precedence merge, Google block-page and chrome-error detection), a session keeper re-mints rotated cookies in the cached window, WebView data folders are absolute so no more blank windows, and failures name the real cause with one-click "Connect with cookies".
-
One Accent, Resolved Once: Accent selection now lives in a single provider — custom pick, LastWave neutral, OS accent (Windows registry, macOS, KDE, GNOME probed in desktop order) or a tint from the current cover — and every source that can't answer falls back to your pick. All washes, rings and glyphs read from it, so nothing is stuck white or danger-red on a non-red theme, and Settings → Appearance prints the resolved swatch and where it came from.
-
A Real Design Ladder: One monotonic radius scale (tiny 6 → controls 10 → artwork 12 → menu 14 → floating 20 → hero 24) replaces ad-hoc corners, the meta text tier goes from 2.9:1 to 4.7:1 contrast, and the pearl theme gets actual depth: alpha dividers that read on either surface, light-mode shadows at a third of the dark strength, and menu hairlines.
-
Controls That Behave: In-house
WaveSelect,WaveMenuRowandWaveMenuButtonreplace plugin controls with baked 4px corners, text fields take the control corner instead of Fluent's hardcoded square,WaveRailkeeps the hover lift and shadow from being sheared off a carousel's top edge, Fluent's push buttons and every tappable card finally show a pointer cursor, and presses dip through one sharedWavePressable. -
Materials You Can Trust: The Solid / Haze setting now outranks a surface's blur request instead of being overridden by it, the expanded rail frosts the page it covers (with the correct L1 fill rather than a near-opaque slab), and the two experimental switches do real work — extra translucency widens every glass filter, and the wavy seekbar paints a sine you can still tap and drag.
-
Motion With Intent: The shell moves between destinations instead of cutting, detail pages grow out of the card you pressed, and a pressed cover flies into the detail header (no
Herotag collisions when the same album appears twice on a page). Entrances stop replaying after their cascade, and OS reduce-motion is honoured everywhere — entrances, hover washes, press dips, lyric fades, playing bars and keyboard scrolling. -
Home & Shelves: YouTube shelves get an action and a page of their own — See all opens the whole shelf at
/ytshelf/:titlewith Play all, shelf caps are honest about what's on screen, the hero lights from its cover with a halo that spills past the panel, and the 60px rail drops captions it could never fit. -
Detail Pages That Fill In: Collection heroes gain an artwork-tinted ambient band, album and artist pages draw their real header (title, portrait, skeleton rows, reserved transport row) while the browse is still in flight, artist covers relax from circle to rounded square on hover, and one accent Play pill plus one outline Radio pill replace the hardcoded white chips.
-
Dock & Output: Output path and device picker fold into one speakers control — endpoints on top, bit-perfect detail and the blocking reason under a separator, accent-tinted when perfect, same list in the narrow-width More menu — while the timeline reads
--:--instead of 0:00 for an unknown length and the volume knob stays visible at any non-zero level. -
Platform Fixes: AppImage detects legacy OpenGL (<3.0) and falls back to software rendering, with explicit
--no-enable-impeller/--enable-software-renderingflags (Windows and Linux both honour them); macOS draws its own traffic lights instead of a second custom trio; the window chrome reads its colours from tokens so first paint can't flash navy. -
Behaviour Change: Closing the window now quits and stops audio by default — close-to-tray is opt-in in Settings.
-
Small Touches: "Clear" wears the accent instead of danger red, search tiles lift further on hover, the dock's output glyph no longer duplicates the EQ glyph, download rows share the standard 8px inset and hover wash, "Add to playlist" ends in "New playlist…" so an empty library isn't a dead end (the queue picker gets the same row), and both experimental toggles rebuild the app live.