Skip to content

chore(main): release 1.8.0 - #486

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--waveflow
Open

chore(main): release 1.8.0#486
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--waveflow

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

1.8.0 (2026-08-25)

Features

  • analysis: measure loudness per itu-r bs.1770-4 (5598a3d)
  • artist: spotify-style hero backdrop on the artist page (#482) (4b3f120)
  • audio: add audio.dsd_dop setting command + hydration (#495) (98207d8)
  • audio: add DSD-over-PCM (DoP) encoder core module (3d03b43)
  • audio: add wasapi exclusive dop output backend (#495) (81c068e)
  • audio: expose dop toggle, pipeline pill and i18n (#495) (7f98bd5)
  • audio: native DSD via DoP (DSD over PCM) on WASAPI Exclusive (db340d1)
  • audio: native dsd via dop on linux (raw hw: alsa) (#495) (e20aa16)
  • audio: native dsd via dop on macos (coreaudio hog mode) (#495) (8b80c9c)
  • audio: wire dop into the decoder and per-track output switch (#495) (41b17db)
  • canvas: opt-in local cache for plugin Canvases (#473) (70cd206)
  • canvas: opt-in local cache for plugin Canvases (#473) (8ce04be)
  • canvas: per-track looping Canvas behind the now-playing view (#442) (b5a8909)
  • canvas: per-track looping Canvas behind the now-playing view (#442) (f57d162)
  • canvas: waveflow:canvas/v1 world for per-track canvas plugins (#473) (fcdc1e5)
  • canvas: waveflow:canvas/v1 world for per-track Canvas plugins (#473) (de01b35)
  • context-menu: open the track menu from the keyboard everywhere (fc554b3)
  • context-menu: open the track menu from the keyboard everywhere (0fb44c3), closes #436
  • library: deep rescan for the whole library, not just one folder (c4f25ac), closes #457
  • library: grid tab for user playlists (542a0ff), closes #461
  • lyrics: progressive fill on the word being sung (8965f09)
  • lyrics: progressive fill on the word being sung (917b331)
  • maintenance: one-time cleanup of cached album covers for art-having albums (#493) (d9db659)
  • mini-player: volume slider and mute in the cover overlay (850556d)
  • mini-player: volume slider and mute in the cover overlay (45faadb)
  • mpd: serve the MPD protocol so existing clients can drive playback (b250be6)
  • mpd: serve the MPD protocol so existing clients can drive playback (0bae7ad), closes #471
  • now-playing: cover ↔ artist crossfade slideshow (#466) (62b33ed)
  • now-playing: cover ↔ artist crossfade slideshow (#466) (fd90186)
  • player: bring ReplayGain up to the standard (882200b)
  • player: give replaygain a pre-amp, a fallback and clipping prevention (78eb484)
  • player: user-selectable spectrum visualizer colors (#468) (b5ef338)
  • player: user-selectable spectrum visualizer colors (#468) (904b652)
  • plugins: add waveflow:ui/v1 world host surface + redacted library read (#443) (a48cab8)
  • plugins: disclose ui library.read_artists permission in the store (afe2d62)
  • plugins: disclose ui library.read_artists permission in the store (92fada3)
  • plugins: localized manifest descriptions & option labels (a39e1cf), closes #440
  • plugins: publish-safe *_i18n sibling for localized strings (e76b70f), closes #440
  • plugins: render ui-world plugin views + dynamic sidebar (#443 Part 2) (d4c44eb)
  • plugins: render ui-world plugin views + dynamic sidebar (#443 Part 2) (7b8cd27)
  • plugins: support direct download_url in registry entries (c6d4bc7)
  • plugins: support direct download_url in registry entries (cd54eb8)
  • plugins: waveflow:ui/v1 world host surface + redacted library read (#443 Part 1) (5885099)
  • reconciliation: add exact track linking (cc533aa)
  • reconciliation: add exact track linking (d8f6212)
  • reconciliation: add explicit playlist conversion (d96cba2)
  • reconciliation: add explicit playlist conversion (60359d5)
  • reconciliation: copy linked user data explicitly (ec6a190)
  • reconciliation: copy linked user data explicitly (96e8bc8)
  • reconciliation: progress + cancellation and true-schema tests (9baf895)
  • reconciliation: scan progress, cancellation and true-schema tests (63129a7)
  • release: embed AppImage update information and ship a .zsync (8868743), closes #527
  • remote-playback: prefer confirmed local links (5548cea)
  • remote-playback: prefer confirmed local links (97e6d16)
  • remote: 1:1 parity for the remote playlist view (b16deb8)
  • remote: a diagnostics card so the protocol can be watched by a human (f0e78ef)
  • remote: add tracks to a remote playlist via catalogue search (d581ab4)
  • remote: artist photo, hero background and bio by name (9697deb)
  • remote: auto-generate the remote playlist cover from track art (24b343e)
  • remote: bootstrap from a snapshot and walk the journal (faa608d)
  • remote: bounded progress bar for remote tracks (1e1f473)
  • remote: bring remote playlist view to 1:1 with local (d250a08)
  • remote: capture the server's content fingerprint, unread (74f5063)
  • remote: clickable albums with a remote album view (c305351)
  • remote: clickable remote artist + heal stale artist_id cache (90b4c8d)
  • remote: columned track table on the remote playlist view (2034a83)
  • remote: complete the write surface with scrobbles, queue and shares (9b1157e)
  • remote: finish native remote-source integration (aa39ee0)
  • remote: foundations for the remote source and sync v2 (e2d6627)
  • remote: localize the sync_v2 remote surface across all 17 locales (edebaeb)
  • remote: mirror the server catalogue so both sources share one library (35e8702)
  • remote: play remote playlists as a native queue (53d4191)
  • remote: queue local changes and push them back as replayable calls (e03756e)
  • remote: read the projection back out for the interface (94bf6fa)
  • remote: remote music source and user-data sync v2 (RFC-005) (3818b3a)
  • remote: remove a track from a remote playlist (544b834)
  • remote: reorder tracks in a remote playlist (5b50b98)
  • remote: scrub remote tracks via HTTP range seeking (3615319)
  • remote: separate the two 409s and express clearing a field (7b62858)
  • remote: server-first lyrics for remote tracks (5b822ed)
  • remote: shares as queued mutations on the v2 endpoints (d321248)
  • remote: show the cover art for a remote track (ba9c470)
  • remote: show the remote play queue in the queue panel (ac10c35)
  • remote: sign in through the browser with authorization code + PKCE (7ce6802)
  • remote: similar artists on the remote artist view + ship sync_v2 (2f76759)
  • remote: stream remote tracks via server stream tickets (3fb3aba)
  • remote: surface the remote source in the sidebar (bbf1130)
  • remote: wake up on the journal socket instead of only polling (e5e65cd)
  • remote: wire user gestures to the queue (f9fdd25)
  • scanner: parse replaygain and r128 tags off the file (2e6c69d)
  • scanner: play AIFF, and say why the other formats are absent (012be48)
  • scanner: play AIFF, and say why the other formats are absent (6a5e36b)
  • scan: store the replaygain a file declares on the track row (81f4ec0)
  • settings: expose the replaygain pre-amp, fallback and clipping switch (ec0d1bd)

Bug Fixes

  • album: carry the full track row so Properties isn't half empty (c2515fb), closes #458
  • artist: address review on the hero backdrop (58d8348)
  • artist: clear the read stamp on profile change (da06a78)
  • artist: keep an in-flight read from clobbering an optimistic toggle (4ebc933)
  • artist: reset the hero preference when the profile changes (5ad81f2)
  • artist: scope the hero preference's resolved flag to the profile (d9605ff)
  • audio: ask the sound server for the card before giving up on DoP (bff1ffc)
  • audio: drop a sub-stride DSD remainder instead of decoding it (cb430a6)
  • audio: fail the load when the output switch leaves us with nothing (0514647)
  • audio: finish short DSD block reads before decoding them (c2a5531)
  • audio: gate dop strictly to windows / wasapi exclusive (#495) (16118d4)
  • audio: keep the DSD seek offset exact (dd70a23)
  • audio: key the DoP speed pin off speed_dirty, not the value (d83d23c)
  • audio: left-align 24-bit samples in the 32-bit WASAPI container (7e4c842)
  • audio: left-align 24-bit samples in the 32-bit WASAPI container (2192622)
  • audio: left-align the DoP word in the padded WASAPI container (44fe37d)
  • audio: pass the DoP flag on the remote local-first open (c710a84)
  • audio: pin speed and honour A-B repeat on the DoP path (03d8220)
  • audio: rebuild the DoP output when the channel count changes (8f8e8bf)
  • audio: refuse the DoP open when the old physical format is unreadable (ad611bb)
  • audio: report a lost CoreAudio device instead of parking on it (84cf6bd)
  • audio: resolve the ALSA card by name and finish short writes (d6d0879)
  • audio: restore the CoreAudio physical format and watch IsAlive (23ee71f)
  • audio: restore the CoreAudio physical format and watch IsAlive (2c6ce07)
  • audio: restore the PCM output before a remote or URL load (184de8f)
  • audio: stamp the DoP marker from one running counter (0e3d4da)
  • audio: try the card before waiting, and name the release reply (ea6e6bd)
  • audio: validate Content-Range start byte on a seek 206 (4b4322e)
  • canvas: atomic mp4 publish + profile-scoped Canvas cache (fe909ff)
  • canvas: harden Canvas cache profile isolation + atomic mp4 publish (d07be8f)
  • canvas: re-validate cache-download redirects (SSRF) + doc canvas world (10f904b)
  • canvas: treat an unsafe cache redirect as a hard security failure (8d87e8c)
  • context-menu: drop a dead tab stop and a mislabelled row (db09a80), closes #436
  • db: explain a downgrade before the event loop, not inside it (a426878)
  • db: explain a downgrade before the event loop, not inside it (dd93ead), closes #529
  • db: explain a downgrade instead of dying on the splash (8e6c739)
  • db: explain the other half of a downgrade instead of panicking (8a46de1)
  • db: stop the pre-flight writing to the database it may refuse (18abf82)
  • deezer: cross-profile-safe cover prune + preserve hash on skipped download (73b4482)
  • deezer: don't let a cover-less cache row block a re-fetch (#493 review) (94badcf)
  • deezer: only disk-cache an album cover when the album lacks local art (#493) (5281d9d)
  • deezer: only disk-cache an album cover when the album lacks local art (#493) (ea14ec5)
  • deezer: read the refusal deezer sends with http 200 (82dd905)
  • deps: force fast-uri >= 3.1.5 and resync the Flatpak sources (e0ee50c)
  • edit: refuse a year no tag can hold instead of clamping it (21d46cd)
  • library: one shared lock for every rescan control (bca21df), closes #457
  • library: reach the playlists empty state instead of a missing key (83ea6b2), closes #461
  • library: surface scan failures instead of silently succeeding (0f867fe), closes #457
  • lyrics: carry the fill across speed changes, stop at a full word (23045ab)
  • lyrics: keep the fill responsive to seeks inside the active word (8dfdc5c)
  • lyrics: re-anchor the fill when playback resumes (15de90c)
  • lyrics: reset lyrics context on remote transitions too (9e353e1)
  • lyrics: retry LRCLIB fuzzily before the catch-all providers (b733769), closes #463
  • macos: allow unsigned executable memory for the wasmtime host (4bcbb89)
  • maintenance: fail the cover prune if the profile list can't be read (1b12cc6)
  • motion-cache: strip trailing-dot hosts in SSRF guard + allow 10 redirects (fff142d)
  • motion-cache: validate the initial url inside cache_mp4 (defence-in-depth) (198ba47)
  • mpd: address CodeRabbit review — protocol conformance + robustness (#471) (35c768d)
  • mpd: consistent snapshots + atomic writes + hardened MPD settings UI (#471) (e654ec0)
  • mpd: reject single oneshot instead of persisting it as durable (#471) (4d0b9fe)
  • mpd: seek-in-place + serialized settings saves + UI options sync (#471) (473837d)
  • now-playing: dedupe artist enrichment + gate slideshow fetch (#466) (1d04cce)
  • now-playing: exclude radio/Spotify tracks from the cover slideshow (#466) (ec41261)
  • now-playing: tag panel artist image by artist id to avoid a stale flash (#466) (c2dc991)
  • player: address the replaygain review findings (e7efacf)
  • player: broadcast repeat, shuffle and like to the other window (c0d4176)
  • player: broadcast repeat, shuffle and like to the other window (d4129e6)
  • player: gate visualizer color cycle until the profile's value loads (858b206)
  • player: re-read the pipeline when the stream under it changes (79be05c)
  • player: stamp the snapshot with the track the engine reported (5d3aca1)
  • player: stop a torn-down read from silencing the live one (f137d44)
  • player: stop badging a shared stream as bit-perfect (fa25d63)
  • plugin-host: dedup a cause against its parent, not the whole buffer (5a7bff7), closes #452
  • plugin-host: surface the cause chain behind an http error (8546324), closes #452
  • plugins: busy-gate open-url + reject null badge elements (#443) (3a39a0f)
  • plugins: clamp track_count to u32 range before narrowing (#443) (241e46d)
  • plugins: gate artist snapshot on permission + validate descriptor JSON (#443) (12bba19)
  • plugins: harden ui view — separate flow tokens, a11y, text validation (#443) (a00a217)
  • plugins: skip blank entries when resolving a localized string (4784b4a), closes #440
  • plugins: validate download_url + install redirects with the SSRF guard (977635b)
  • plugins: validate ui descriptor tree + loading states + hi grammar (#443) (808fa09)
  • profile: scope profile_setting reads and writes to a profile (f1438f2)
  • reconciliation: address CodeRabbit review (1c022f3)
  • reconciliation: address playlist conversion review (8318ceb)
  • reconciliation: arbitrate the phase on the empty-remote early return (acf3098)
  • reconciliation: block unavailable local conversions (a77d686)
  • reconciliation: block unavailable playlist tracks (330040d)
  • reconciliation: close scan cancel races and listener leak (be655f2)
  • reconciliation: make cancel-vs-commit an atomic phase transition (2cb5437)
  • reconciliation: revalidate playlist link proofs (42d6a83)
  • reconciliation: roll back reconcile on a cancel during commit phase (eebdbae)
  • reconciliation: signal already-running scans and cover cancellation (07bc8c5)
  • reconciliation: verify playlist snapshot before commit (e2055dd)
  • release: read the section index before trusting readelf's columns (e26c616)
  • release: unbundle libwayland-client from the AppImage (807428b)
  • release: unbundle libwayland-client from the AppImage (d368e42)
  • remote-playback: resume local source after device changes (a1066ee)
  • remote-ui: artwork cache, stale-pass guards, availability hardening (689b758)
  • remote-ui: bound the artwork cache, reset cover on hash change (7a23585)
  • remote-ui: update remote artwork before paint (5b40b36)
  • remote: address CodeRabbit review — correctness batch 1 (51cf286)
  • remote: address deferred CodeRabbit findings from #502 (6221b99)
  • remote: annotate RemoteClient lifetime in stream.rs (41ce018)
  • remote: back off on socket sync failure, not on a profile switch (ab71fa0)
  • remote: correct counter labels in ar, ja and zh-TW (63249aa)
  • remote: distinguish remote playback from web radio (c74e3d7)
  • remote: end the socket session when a catch-up fails (0f541ad)
  • remote: give the account-switch test its NOT NULL cached_at (d649c4a)
  • remote: idempotent placeholder resolve, FIFO-safe unreadable rows (b84ac59)
  • remote: ignore stray callbacks, bound the cached-id lookup (1900322)
  • remote: pin client+pool to one profile, share the rotated token (32ab652)
  • remote: pluralize remote counters and fix flagged translations (56e4be3)
  • remote: profile-aware socket catch-up, case-insensitive range unit (096ca33)
  • remote: refresh-and-replay on 401, harden the refresh path (248a46e)
  • remote: review batch 1b — clear-after-swap, lyrics fallback (6c3b789)
  • remote: server lyrics synced only when all lines are timestamped (2b09347)
  • remote: show remote track cover in the player bar (8dc4341)
  • remote: socket idle timeout + coalescing, sync/auth robustness (6d01d24)
  • remote: stop a half-listed album from reading as walked forever (2936046)
  • remote: stricter Content-Range, socket profile pin + cap check (faa498f)
  • remote: strip only the loop newline from server lyrics (c42bf74)
  • review: compare the genre trimmed, and exempt only DoP's rate (0306594)
  • review: send the genre only when it changed, and prove the verdict (bb4a9aa)
  • scan-toast: a scan that hit errors no longer reads as a success (7b9d39f), closes #457
  • scan: keep the replaygain backfill pending when a file fails to read (8c6cce8)
  • scanner: judge an .ogg by its stream, not by its extension (9bfd279)
  • scanner: judge an .ogg by its stream, not by its extension (e0ca4fe)
  • scan: report a failed replaygain backfill marker write (3cd90e6)
  • settings: locale-aware MB formatting in the cover-prune status (e748c11)
  • settings: tidy the cover-prune status timer + announce it to a11y (848add8)
  • stats: local artist images, ragged KPI row, clipped hour labels (e6d1000), closes #453
  • tags: keep the fields a tag write never touched (11c0c7e)
  • the tag editor and audio-path defects found in the audit (c198cf6)
  • ui: drop inert DSP badges on DoP and harden the toggle (f203eb4)
  • ui: pre-fill the genre the properties dialog was erasing (08b933c)
  • ui: replay liked changes that land during a reload (f547d0f)
  • ui: scope the queued DoP write to the profile that made it (2fd7f9d)
  • ui: subscribe to liked changes before snapshotting the set (eed3254)
  • web-radio: let a 429 fall through to the next host (cb8a31c), closes #452
  • web-radio: try the round-robin host, and retry, before failing (4a20483), closes #452
  • wrapped: give each banner key its own broadcast channel (c74eb48)
  • wrapped: withhold the banner until both keys have been read (c83ebb7)

Performance Improvements

  • remote-ui: virtualize the remote playlist and queue lists (0b26205)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch 4 times, most recently from 5ec0476 to 97c63aa Compare August 9, 2026 01:52
@InstaZDLL InstaZDLL self-assigned this Aug 9, 2026
@InstaZDLL InstaZDLL added this to the v1.8.0 milestone Aug 9, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch from 97c63aa to 711f476 Compare August 10, 2026 10:15
@ABDALLAH9877

Copy link
Copy Markdown

may i ask when the next update will be added becouse im so exited for animated lyrics or word by word lyrics

@InstaZDLL

Copy link
Copy Markdown
Owner

may i ask when the next update will be added becouse im so exited for animated lyrics or word by word lyrics

Thanks, glad you're excited! 🎶 Word-by-word animated lyrics are landing in v1.8.0, which I'm targeting for around the end of next week (no hard promise, I'd rather ship it right). I'll post here the moment it's out! 🙌

@InstaZDLL InstaZDLL added scope: backend Rust/Tauri backend (src-tauri/) scope: deps Dependencies scope: docs Docs, README, assets type: chore Maintenance / tooling size: m 50-200 lines labels Aug 15, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch 15 times, most recently from 63f4288 to b4b5f42 Compare August 19, 2026 07:44
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch from b4b5f42 to 980863c Compare August 19, 2026 18:18
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch 5 times, most recently from ef8d2d0 to 6ee0a80 Compare August 23, 2026 08:18
@InstaZDLL InstaZDLL added size: l 200-500 lines and removed size: m 50-200 lines labels Aug 23, 2026
InstaZDLL added a commit that referenced this pull request Aug 23, 2026
Running the purge by hand against the live repository turned every
delete into "already gone", and the step would have reported a clean
run. The listing was written on Windows, so each id reached gh with a
trailing carriage return and matched nothing. The ids were fine; the
tolerance was too wide.

That tolerance exists for a real case — GitHub evicts on its own to
hold the quota, so a cache can vanish between the listing and the
delete, and one failure is a lost race rather than a fault. But every
one failing is a different animal: the ids are malformed or the command
is wrong, and swallowing that leaves the quota full while the job
reports success. So the step now counts both outcomes, prints them, and
fails when it deleted nothing and lost every id.

CRLF cannot happen on ubuntu-latest, where python3 writes LF. The guard
is not for that bug, it is for the class: a systematic failure that the
per-id tolerance would render invisible.

Verified by extracting the step body from the YAML and running it under
a stubbed gh: six deleted exits 0, five deleted with one vanished exits
0, and all six failing prints the ::error:: and exits 1.

The purge itself ran: 11 caches and 8.97 GB down to 5 and 3.52 GB,
leaving the current generation of each job, the bun cache and #486's.
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch 3 times, most recently from f14015d to 80f7563 Compare August 24, 2026 04:42
@ABDALLAH9877

Copy link
Copy Markdown

can i ask again when the next update will be added because im so so exited for animated lyrics or word by word lyrics 👍 😁

@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch from 80f7563 to c3c0ddf Compare August 24, 2026 18:34
@freebedoo0study-cmyk

Copy link
Copy Markdown

can i ask again when the next update will be added because im so so exited for animated lyrics or word by word lyrics 👍 😁

Me too

@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch from c3c0ddf to 2ab6b5a Compare August 25, 2026 05:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment