Releases
v2.3.0
Compare
Sorry, something went wrong.
No results found
What's Changed
ci(release): build darwin-amd64 codec libs from source, drop Rosetta Homebrew (#7 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (aaf6b1b )
Merge upstream/main into fork main ahead of v2.3.0 release by jarmen423 (@jarmen423 ) (22ed04e )
ci: manual Windows QA build with exe artifact, no release by jarmen423 (@jarmen423 ) (fa96bea )
feat(lua): expose track.is_live for streams with no track boundary (bjarneo#535 ) by Gjermund Garaba (@gjermundgaraba ) (f85829d )
fix(player): read yt-dlp PCM from a pipe cliamp owns (bjarneo#561 ) by Gjermund Garaba (@gjermundgaraba ) (276713b )
docs(spotify): Windows single-exe parity — DPAPI creds, ephemeral-port sign-in (#6 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (f1b1b63 )
feat(spotify): ephemeral-port OAuth callback + DPAPI creds on Windows (#3 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (df8a96f )
build(windows): single-file static release exe + import-table gate (#2 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (ec7b5eb )
test(player,spotify): lock Windows Spotify audio parity (44100->48000 resample, gapless seam) (#1 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (db923d1 )
Remove staticcheck-flagged dead code (#4 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (c090ce7 )
fix(spotify): drop unjustified !windows build tags so package compiles on Windows (#5 ) by devin-ai-integration[bot] (@devin-ai-integration[bot] ) (d4c60b1 )
fix(playback): cancel a scheduled reconnect on stop (bjarneo#556 ) by Gjermund Garaba (@gjermundgaraba ) (e0559a5 )
fix(resolve): mark yt-dlp live streams as realtime (bjarneo#534 ) by Gjermund Garaba (@gjermundgaraba ) (f00408b )
test(ui): bind a plugin-ownable key in the full-screen visualizer test (bjarneo#555 ) by Gjermund Garaba (@gjermundgaraba ) (41bab63 )
Merge branch 'spotify-library-parity' by jarmen423 (@jarmen423 ) (25b874b )
fix(ui): pin favorite marker column to avoid layout shift by Taha Sadough (@tahadx ) (06ee7af )
fix(ui): stop showing add/remove favorite notifications in the footer (bjarneo#440 ) by Taha Sadough (@tahadx ) (903a1ed )
Revert "fix(lua): let plugins bind uppercase keys (bjarneo#525 )" (bjarneo#547 ) by bjarneo (@bjarneo ) (72d786d )
fix(ui): dispatch plugin keys in the full-screen visualizer (bjarneo#545 ) by Gaurab KC (@gaurabxkc ) (e5baeae )
fix(lua): let plugins bind uppercase keys (bjarneo#525 ) by Gaurab KC (@gaurabxkc ) (ac2d1bc )
feat(lua): emit queue.end when playback runs out of tracks (bjarneo#533 ) by Gjermund Garaba (@gjermundgaraba ) (57ae3ba )
feat(spotify): populate album art for Spotify tracks (bjarneo#527 ) by Gaurab KC (@gaurabxkc ) (8e27e96 )
Merge pull request bjarneo#532 from gaurabxkc/docs/community-plugins-autoplay-pomodoro by Gaurab KC (@gaurabxkc ) (da63f89 )
fix(lua): route play_pause, stop, and seek through the model (bjarneo#500 ) by Gjermund Garaba (@gjermundgaraba ) (ed98f8e )
docs: add discord link to readme by Bjarne Oeverli (@bjarneo ) (4dee32c )
feat(site): add discord link to header by Bjarne Oeverli (@bjarneo ) (bee3309 )
Merge pull request bjarneo#510 from srgrsj/feat/download-directory by bjarneo (@bjarneo ) (4809680 )
fix(config): reject relative download directories by Sergei Zhukov (@srgrsj ) (ce99ae4 )
feat(config): make the track save directory configurable by Sergei Zhukov (@srgrsj ) (444105a )
Merge pull request bjarneo#369 from tharinfernando/feat/spotify-lyrics by Bjarne Oeverli (@bjarneo ) (81ec636 )
fix(lyrics): gate offset keys on synced lyrics and surface save errors by Bjarne Oeverli (@bjarneo ) (9e8be78 )
Merge branch 'main' into fix/pr-369 by Bjarne Oeverli (@bjarneo ) (06513f2 )
Merge pull request bjarneo#450 from cesarho/fix/resample-headroom-clipping by Bjarne Oeverli (@bjarneo ) (ddc53a4 )
test(player): prove resampler overshoot with a full-scale source by Bjarne Oeverli (@bjarneo ) (5463e95 )
Merge branch 'main' into fix/pr-450 by Bjarne Oeverli (@bjarneo ) (3a18256 )
Merge pull request bjarneo#439 from wundervrc/feat/spotify-progressive-track-loading by Bjarne Oeverli (@bjarneo ) (d877587 )
fix(spotify): retire in-flight track pages on wholesale queue replacement by Bjarne Oeverli (@bjarneo ) (d40d69b )
Merge branch 'main' into fix/pr-439 by Bjarne Oeverli (@bjarneo ) (4fe8948 )
Merge pull request bjarneo#477 from oweneldridge/playlist-queue by Bjarne Oeverli (@bjarneo ) (a58017d )
perf(queue): render the inline queue from a bounded window by Bjarne Oeverli (@bjarneo ) (cb6ef44 )
Merge branch 'main' into fix/pr-477 by Bjarne Oeverli (@bjarneo ) (bd202da )
Merge pull request bjarneo#476 from oweneldridge/podcast-subscriptions by Bjarne Oeverli (@bjarneo ) (77f80de )
fix(subs): surface empty shows to the status line from the provider list by Bjarne Oeverli (@bjarneo ) (77435a2 )
Merge branch 'main' into fix/pr-477 by Bjarne Oeverli (@bjarneo ) (0a07865 )
Merge branch 'main' into fix/pr-476 by Bjarne Oeverli (@bjarneo ) (add62de )
Merge pull request bjarneo#475 from oweneldridge/podcast-progress by Bjarne Oeverli (@bjarneo ) (d9c1e3a )
fix(podcast): scope progress identity to the feed and clear played on restart by Bjarne Oeverli (@bjarneo ) (bc5fda5 )
Merge branch 'main' into fix/pr-450 by Bjarne Oeverli (@bjarneo ) (35aae7a )
Merge branch 'main' into fix/pr-439 by Bjarne Oeverli (@bjarneo ) (975586b )
Merge branch 'main' into fix/pr-475 by Bjarne Oeverli (@bjarneo ) (7abc2ea )
Merge pull request bjarneo#438 from RGR09/main by Bjarne Oeverli (@bjarneo ) (1f323e8 )
Merge pull request bjarneo#479 from oweneldridge/visualizer-fixes by Bjarne Oeverli (@bjarneo ) (0ce5a91 )
Merge pull request bjarneo#505 from legacynode/ci/nix-flake-build by Bjarne Oeverli (@bjarneo ) (cdfba47 )
fix(queue): never spend the last row on an album header by Owen Eldridge (@oweneldridge ) (a4eb17e )
fix(podcast): only providers that list shows get the l and a keys by Owen Eldridge (@oweneldridge ) (6361052 )
fix(playlists): keep the stored track on prepend, scroll the queue past headers by Owen Eldridge (@oweneldridge ) (e8d4608 )
fix(podcast): load overlay episodes through the subscription provider; forward F to plugins by Owen Eldridge (@oweneldridge ) (9e3201e )
docs(site): mention the queue view and playlist append by Owen Eldridge (@oweneldridge ) (c6de2dd )
docs(site): mention the subscriptions overlay by Owen Eldridge (@oweneldridge ) (7dbea4f )
feat(queue): keep the playback chrome when the queue is open by Owen Eldridge (@oweneldridge ) (659309b )
feat(podcast): append a whole show from the provider list by Owen Eldridge (@oweneldridge ) (32ab699 )
feat(queue): show the queue the way the playlist is shown by Owen Eldridge (@oweneldridge ) (738b794 )
feat(podcast): queue the latest episode from the provider list by Owen Eldridge (@oweneldridge ) (de64115 )
feat(playlists): append a saved playlist to the current one by Owen Eldridge (@oweneldridge ) (179259d )
feat(podcast): browse subscribed shows and pull latest episodes by Owen Eldridge (@oweneldridge ) (cadecf4 )
feat(playlists): add tracks to the start of a saved playlist by Owen Eldridge (@oweneldridge ) (c315e1f )
docs(podcast): state the publication-date rule for the URL fallback by Owen Eldridge (@oweneldridge ) (5a783ad )
feat(radio): who's listening globe as an easter egg by Bjarne Oeverli (@bjarneo ) (4871f0c )
docs: link cliamp mobile from the readme and the site by Bjarne Oeverli (@bjarneo ) (5f16265 )
fix(yandex): accept string and numeric artist IDs (bjarneo#509 ) by Sergei Zhukov (@srgrsj ) (f964dd5 )
fix(podcast): tell same-titled no-GUID episodes apart by publication date by Owen Eldridge (@oweneldridge ) (637e523 )
fix(podcast): carry a URL-keyed episode's record across a CDN rewrite by Owen Eldridge (@oweneldridge ) (4616ef9 )
fix(podcast): refuse a progress file written by a newer cliamp by Owen Eldridge (@oweneldridge ) (d2bc19e )
fix(vis): label the playing track's own provider, wrap the save error by Owen Eldridge (@oweneldridge ) (1606447 )
feat(vis): hide the episode name in the full screen visualizer by Owen Eldridge (@oweneldridge ) (2f7e523 )
fix(vis): persist the visualizer set over IPC by Owen Eldridge (@oweneldridge ) (bc3aab5 )
fix(podcast): a short episode counts as played past its midpoint by Owen Eldridge (@oweneldridge ) (3d525e0 )
fix(podcast): one record per episode, scoped by feed, with title aliases by Owen Eldridge (@oweneldridge ) (090c76b )
docs(site): mention episode resume and played state by Owen Eldridge (@oweneldridge ) (7ef8c9f )
fix(podcast): keep listening position when a track loses its metadata by Owen Eldridge (@oweneldridge ) (bb531ec )
fix(podcast): keep an episode's metadata when it is saved to a playlist by Owen Eldridge (@oweneldridge ) (fb42670 )
feat(podcast): remember per-episode position and played state by Owen Eldridge (@oweneldridge ) (89ea079 )
Merge pull request bjarneo#474 from oweneldridge/podcast-seekable-length by Owen Eldridge (@oweneldridge ) (23ddf04 )
Preserve symlinks when saving files (bjarneo#494 ) by Robert Holak (@rholak ) (30e953a )
ci: add Nix flake builds by Neo Lehmann (@legacynode ) (bb12801 )
fix(setup): name the supported result navigation keys (bjarneo#496 ) by Gjermund Garaba (@gjermundgaraba ) (a166178 )
fix press q to quit on setup (bjarneo#495 ) by Diego Dorado (@diegodorado ) (d8b24df )
fix(radio): share station favorites with playback (bjarneo#493 ) by Gjermund Garaba (@gjermundgaraba ) (cac0399 )
Merge pull request bjarneo#480 from legacycode-forks/ci/update-github-actions by bjarneo (@bjarneo ) (9864404 )
Merge pull request bjarneo#481 from legacycode-forks/ci/align-local-and-github-checks by bjarneo (@bjarneo ) (d792692 )
Merge pull request bjarneo#482 from legacycode-forks/ci/improve-workflow-observability by bjarneo (@bjarneo ) (e509c6c )
feat(lua): expose queue.has_next for playback continuation (bjarneo#488 ) by Gjermund Garaba (@gjermundgaraba ) (ee8e250 )
fix(lua): queue.list reported every track as queued (bjarneo#487 ) by Gjermund Garaba (@gjermundgaraba ) (55d6819 )
fix(ui): refuse stale stream starts after a stop (bjarneo#486 ) by Gjermund Garaba (@gjermundgaraba ) (abad20e )
fix(ui): persist theme picker selection (bjarneo#483 ) by legacynode (@legacynode ) (f3e7b55 )
test(jellyfin): assert MediaBrowser scheme on standard Authorization header (bjarneo#460 ) by Dimas Setia Pambudi (@setiapam ) (6762dd8 )
fix(ui): emit track-change events for yt-dlp sources (bjarneo#484 ) by Gjermund Garaba (@gjermundgaraba ) (62a102d )
fix(docs): correct docs and seek help that contradict the code (bjarneo#467 ) by BAKocska (@BAKocska ) (423d9fc )
ci: improve workflow observability by Neo Lehmann (@legacynode ) (1ef7eec )
ci: update GitHub Actions by Neo Lehmann (@legacynode ) (df14ced )
ci: align local and GitHub checks by Neo Lehmann (@legacynode ) (1be0e52 )
feat(ui): smart shuffle and home view feedback polish by jarmen423 (@jarmen423 ) (554c771 )
feat(spotify): feb-2026 api migration, smart shuffle, artist page, home view by jarmen423 (@jarmen423 ) (d027c9b )
fix(jellyfin): restore auth and streaming on Jellyfin 12 (bjarneo#471 ) by Henrik N (@heggrik ) (6c16a71 )
refactor(ui): centralize theme style initialization (bjarneo#472 ) by Gjermund Garaba (@gjermundgaraba ) (3f71671 )
fix(nix): refresh vendorHash so the flake builds again (bjarneo#459 ) by Levon Kirakosyan (@noosxe ) (6b2e85b )
fix(ui): rebuild favorite heart styles on theme change (bjarneo#466 ) by BAKocska (@BAKocska ) (0014888 )
spotify: bind OAuth callback to loopback (bjarneo#461 ) by Bruno Rodrigues (@brunorodriguescabral ) (d96b66d )
Fix Navidrome transcoding configuration and player identity (bjarneo#445 ) by Gjermund Garaba (@gjermundgaraba ) (83e5e2a )
feat(ui): start with the playlist expanded via config or flag (bjarneo#395 ) by RyLoS (@rylos ) (55d53dd )
Smooth ClassicPeak sampling and redraws by Gjermund Garaba (@gjermundgaraba ) (764ca0d )
Smooth ClassicPeak sampling and redraws by Gjermund Garaba (@gjermundgaraba ) (2984da4 )
security: harden exec call sites, drop plugin md5 API, move qobuz key to config by jarmen423 (@jarmen423 ) (117f4be )
feat(spotify): library browse, multi-type search, incremental loading, write ops by jarmen423 (@jarmen423 ) (6fd4915 )
Merge branch 'bjarneo:main' into main by RGR09 (@RGR09 ) (132a835 )
fix(player): apply headroom before resample to prevent clipping by Cesar Ho (@cesarho ) (1800abe )
Merge pull request bjarneo#448 from AlexZeitler/feat/red-sector-visualizer by bjarneo (@bjarneo ) (93a4ac6 )
feat(ui): add RedSector visualizer mode by Alexander Zeitler (@AlexZeitler ) (220fb30 )
Merge branch 'bjarneo:main' into main by RGR09 (@RGR09 ) (b7aaebe )
Merge pull request bjarneo#442 from TyRichards/feat/persistent-music-choice by bjarneo (@bjarneo ) (d40cb79 )
merge: preserve updated site with Jellyfin resume docs by Bjarne Oeverli (@bjarneo ) (78cf54b )
fix(jellyfin): address resume review and sync main by Bjarne Oeverli (@bjarneo ) (19e079b )
feat(site): new OG image and a logo that follows the theme by Bjarne Oeverli (@bjarneo ) (7ac3f3a )
feat(site): follow the Omarchy desktop theme by Bjarne Oeverli (@bjarneo ) (e8b444f )
feat(site): redesign landing page and serve install.sh from cliamp.stream by Bjarne Oeverli (@bjarneo ) (2cb7f72 )
fix(test): make podcast permissions check portable by Bjarne Oeverli (@bjarneo ) (af4d03f )
fix(ui): use Ctrl+I to toggle metadata by Bjarne Oeverli (@bjarneo ) (e3e6fd4 )
feat: add podcasts and metadata settings by Bjarne Oeverli (@bjarneo ) (9ea5366 )
refactor(radio): build the default playlist from streams.m3u by Bjarne Oeverli (@bjarneo ) (300ec4b )
feat(radio): add the Amiga channel by Bjarne Oeverli (@bjarneo ) (7d8f0f4 )
fix(ci): unbreak the lint gate and the macOS codec link by Bjarne Oeverli (@bjarneo ) (a187721 )
feat(ui): raise the visualizer to seven rows, five at the compact tier by Bjarne Oeverli (@bjarneo ) (17af02f )
Merge pull request bjarneo#433 from theandrewbailey/navidromeTranscoding by bjarneo (@bjarneo ) (3e0c902 )
Merge pull request bjarneo#432 from Atarit0/fix/streaming-socks5-proxy by bjarneo (@bjarneo ) (667558b )
feat(radio): add the Chiptunes channel by Bjarne Oeverli (@bjarneo ) (d56c989 )
feat(ui): make the visualizer a row taller at the full and compact tiers by Bjarne Oeverli (@bjarneo ) (9ab827b )
feat(ui): split the playback screen into playlist and settings columns by Bjarne Oeverli (@bjarneo ) (cb496d6 )
Merge pull request bjarneo#441 from theandrewbailey/bjarneo#436 -Remove-theme-name-from-player-view by bjarneo (@bjarneo ) (2114484 )
Merge branch 'bjarneo:main' into main by RGR09 (@RGR09 ) (fff7a9a )
feat(jellyfin): restore playback context by Ty Richards (@TyRichards ) (81d2a80 )
Remove theme name from player view bjarneo#436 by Andrew (@theandrewbailey ) (a3c2c1d )
fix(spotify): wrap the playlist snapshot errors by wunder (@wundervrc ) (511c5c6 )
feat(spotify): resume a playlist load on an unchanged snapshot by wunder (@wundervrc ) (7775996 )
httpclient: fix lint on the SOCKS5 regression test by Atarit0 (@Atarit0 ) (d952b14 )
httpclient: pin the SOCKS5 dial decision to the request, not the dial addr by Atarit0 (@Atarit0 ) (8e956af )
Better Navidrome streamURL building by Andrew (@theandrewbailey ) (2888189 )
fix(spotify): route saved albums and narrow the resume rule by wunder (@wundervrc ) (b05baff )
docs(spotify): document the paging entry points by wunder (@wundervrc ) (7772e86 )
httpclient: fall back to ALL_PROXY, drop SOCKS5 credential forwarding by Atarit0 (@Atarit0 ) (590c921 )
httpclient: wrap SOCKS5/proxy errors with operation context by Atarit0 (@Atarit0 ) (0d42df8 )
Merge branch 'feat/omarchy-visualizer' by Bjarne Oeverli (@bjarneo ) (3354038 )
feat(ui): add Omarchy visualizer mode by Bjarne Oeverli (@bjarneo ) (23dc38a )
Merge pull request bjarneo#398 from lkaliturin220-svg/yandex-provider by bjarneo (@bjarneo ) (4f5eb71 )
Merge pull request bjarneo#415 from ninjapanzer/fix/nix-darwin by Bjarne Oeverli (@bjarneo ) (67ba610 )
Merge pull request bjarneo#371 from soundlab/visualizer-height by Bjarne Oeverli (@bjarneo ) (8491dd1 )
Merge pull request bjarneo#376 from zambetti/expanded-height-no-viz-fix by bjarneo (@bjarneo ) (2a143e9 )
Merge pull request bjarneo#434 from Baniel83/fix/refresh-provider-keymap by bjarneo (@bjarneo ) (dccd0e3 )
Merge pull request bjarneo#421 from DouglasdeMoura/feat/alucard-theme by bjarneo (@bjarneo ) (fc385d8 )
Merge pull request bjarneo#430 from pdwaldrop/plex-setup-libraries by bjarneo (@bjarneo ) (515312b )
Merge pull request bjarneo#431 from pdwaldrop/setup-save-anyway-result-fix by bjarneo (@bjarneo ) (7bbbf1b )
Merge pull request bjarneo#384 from aJustDev/fix/surface-audio-device-open-failure by bjarneo (@bjarneo ) (bea2329 )
Merge pull request bjarneo#420 from dimitriuz/main by bjarneo (@bjarneo ) (bc1849d )
Merge pull request bjarneo#416 from ninjapanzer/fix/nix-alsa-standalone by bjarneo (@bjarneo ) (a1d02f8 )
Merge pull request bjarneo#414 from ninjapanzer/fix/nix-go-version by bjarneo (@bjarneo ) (b60e4ea )
fix(ui): name the playlist to reopen in the changed-list notice by wunder (@wundervrc ) (492ead7 )
fix(ui): let the changed-list notice expire by wunder (@wundervrc ) (455e351 )
fix(docs): added "make" to packages to install by RGR09 (@RGR09 ) (0973ac2 )
Fix(docs): corrected formatting by RGR09 (@RGR09 ) (6b29847 )
fix(docs): build from source on windows by RGR09 (@RGR09 ) (c5fcd03 )
fix(ui): show Refresh provider in the Ctrl+K keymap by Baniel83 (@Baniel83 ) (b89d075 )
Use transcoded files from Navidrome by default. Can be overridden in config. by andrew (@theandrewbailey ) (c813085 )
address CodeRabbit review: per-request SOCKS5 selection, NO_PROXY, ctx dial, creds by Atarit0 (@Atarit0 ) (b61c353 )
fix(httpclient): support SOCKS5 proxies for the streaming client by Atarit0 (@Atarit0 ) (8902cee )
site: mention Plex library filtering in setup blurb by Paul Waldrop (@pdwaldrop ) (ca798ba )
setup: clear stale validation error after "save anyway" by Paul Waldrop (@pdwaldrop ) (42e62ef )
plex: prompt for library selection in setup wizard by Paul Waldrop (@pdwaldrop ) (5cd099b )
fix(theme): bump built-in theme count to 22 by Douglas Moura (@DouglasdeMoura ) (8ed5064 )
fix(spotify): stop a paged load once the library moves under it by wunder (@wundervrc ) (e5918e0 )
fix(ui): retire a paged load when IPC replaces the queue by wunder (@wundervrc ) (8ee9028 )
fix(ui): hold off preloading until a paged load settles by wunder (@wundervrc ) (e706757 )
fix(ui): drop a stale preload when a page lands by wunder (@wundervrc ) (49a5575 )
test(ui): pin the album header against later pages by wunder (@wundervrc ) (025bbfe )
refactor(spotify): collapse the paging test stubs by wunder (@wundervrc ) (9d24a95 )
test(spotify): cover resuming several abandoned lists by wunder (@wundervrc ) (13e4d54 )
fix(spotify): compare the head before resuming an abandoned load by wunder (@wundervrc ) (6fe0dcd )
perf(spotify): resume an abandoned load instead of restarting it by wunder (@wundervrc ) (97303f2 )
test(spotify): assert the restart lands on the settled snapshot by wunder (@wundervrc ) (76a8a11 )
fix(spotify): restart a full load when the library moves under it by wunder (@wundervrc ) (1146916 )
test(ui): guard the append path against superseded pages by wunder (@wundervrc ) (9dd3550 )
fix(spotify): pin the snapshot a progressive load started from by wunder (@wundervrc ) (e911624 )
fix(ui): unblock the provider pane while pages load by wunder (@wundervrc ) (5ec8d3d )
chore: ignore coverage.out by wunder (@wundervrc ) (c7d65eb )
test(spotify): assert superseded pages still reach the caller by wunder (@wundervrc ) (feb53a2 )
refactor(spotify): fold paging into tracksLoadedMsg by wunder (@wundervrc ) (351c0a4 )
feat(spotify): load playlist tracks progressively by wunder (@wundervrc ) (a3cfa68 )
Merge upstream/main into yandex-provider: keep inverse bool flags + help-bar, Yandex in provider flag list, ticker and hero copy by root (e75120e )
feat(theme): add Alucard theme by Douglas Moura (@DouglasdeMoura ) (9e3805b )
Merge pull request bjarneo#410 from the4rchangel/feature/radio-genre-filter by The Archangel (@the4rchangel ) (fc9f86d )
fix(navidrome): stop truncating large playlist responses by Dmitrii Leshchenko (@dimitriuz ) (34856d8 )
fix(site): restore radio statistics by Bjarne Øverli (@bjarneo ) (d6a6862 )
fix(radio): remove listener statistics fetching by Bjarne Øverli (@bjarneo ) (c9cb29f )
fix(nix): ship ALSA pipewire/pulse plugins so audio works on non-NixOS by Paul Scarrone (@ninjapanzer ) (8e5013a )
feat(nix): add aarch64-darwin support to the flake by Paul Scarrone (@ninjapanzer ) (db9a87e )
fix(nix): bump nixpkgs for Go 1.26.6 and refresh vendorHash by Paul Scarrone (@ninjapanzer ) (bc33492 )
Merge pull request bjarneo#403 from bjarneo/complete-inverse-bool-flags by Gjermund Garaba (@gjermundgaraba ) (b2ba923 )
fix(yandex): CodeRabbit round 2 — SSRF label boundary, /tracks batching (<=100), track-length vs played seconds in play-audio, CDN IsStreamURL match, owner.uid fallback, Unplayable for unavailable tracks, strict URI prefix, urlTTL below signed URL lifetime, wrapped transport errors, ctrl+r forwarded to Lua when refresh not applicable, docs/site sync by lkaliturin220-svg (e2fd09d )
Merge origin/main: keep no-help-bar flag, Yandex provider copy, updated radio station count by lkaliturin220-svg (0121e91 )
fix(yandex): address review — no OAuth on download-info + URL guard, synchronized account init, owner-aware playlist IDs, capability-gated in-place refresh by lkaliturin220-svg (613a2e5 )
feat(cli): add inverse forms for boolean config flags by Gjermund Garaba (@gjermundgaraba ) (d9d9dd8 )
ci: fix release site deployment by Bjarne Øverli (@bjarneo ) (5c2020e )
chore: remove tracked GUI build artifacts by Bjarne Øverli (@bjarneo ) (f208ce9 )
Merge pull request bjarneo#405 from rprouse/issue/229 by bjarneo (@bjarneo ) (7f40baf )
Merge pull request bjarneo#373 from TyRichards/feat/jellyfin-artist-navigation by bjarneo (@bjarneo ) (63e59b2 )
Merge main into issue/229 by Bjarne Øverli (@bjarneo ) (c786671 )
Merge pull request bjarneo#404 from nfvelten/feat/hide-help-bar by bjarneo (@bjarneo ) (058284c )
Merge pull request bjarneo#394 from rylos/fix/waveform-refresh-rate by bjarneo (@bjarneo ) (ce5a748 )
Merge pull request bjarneo#380 from jaredculp/feat/spotify-saved-albums by bjarneo (@bjarneo ) (3ef428d )
Merge main into feat/jellyfin-artist-navigation by Bjarne Øverli (@bjarneo ) (3fe5d4f )
feat(radio): browse and pin stations by country (bjarneo#407 ) by bjarneo (@bjarneo ) (3009202 )
Merge pull request bjarneo#370 from tarzan/maarten/tidal-favorite-artists-albums by bjarneo (@bjarneo ) (6d428e8 )
Merge pull request bjarneo#402 from bjarneo/use-inverse-bool-flags by Gjermund Garaba (@bjarneo ) (aa723a5 )
Use inverse boolean flags by Gjermund Garaba (@gjermundgaraba ) (64cb394 )
Merge pull request bjarneo#400 from bjarneo/bump-remaining-go-deps by Gjermund Garaba (@bjarneo ) (83aab1b )
Merge pull request bjarneo#399 from bjarneo/bump-deps by Gjermund Garaba (@bjarneo ) (c26bf23 )
feat(radio): add Omarchy to the default station list by Bjarne Øverli (@bjarneo ) (52626f0 )
docs(site): note hierarchical browsing in the Tidal card by Maarten Jacobs (@tarzan ) (9a228d4 )
feat(tidal): surface favorite artists and albums in the provider pane by Maarten Jacobs (@tarzan ) (c31a51a )
feat(mediactl): add Windows hardware media key support by Rob Prouse (@rprouse ) (6b9da53 )
docs: note that simplified mode is unaffected by hide_help_bar by Nicholas Velten (@nfvelten ) (6c911cf )
docs: add doc comments for the functions touched by this change by Nicholas Velten (@nfvelten ) (edea585 )
feat: allow hiding the key-binding hint bar by Nicholas Velten (@nfvelten ) (f639b4b )
chore(deps): bump remaining Go dependencies by Gjermund Garaba (@gjermundgaraba ) (dafe018 )
chore(deps): bump Charm TUI dependencies by Gjermund Garaba (@gjermundgaraba ) (f210039 )
Add Yandex Music provider by lkaliturin220-svg (771d1df )
fix(player): size the tap ring for the buffer lag plus the analysis window by rylos (@rylos ) (6f5c21e )
fix: arturl UTF8 encoding panic (bjarneo#372 ) by StickMick (@StickMick ) (110e7f4 )
feat(protocol): cliamp:// links (bjarneo#396 ) by bjarneo (@bjarneo ) (468e843 )
fix(player): follow the audible position for raw waveform visualizers by rylos (@rylos ) (d649882 )
refactor(player): rename audio hint fallback to _stub.go by aJustDev (@aJustDev ) (0903fe6 )
docs: document the PulseAudio ALSA bridge on Debian by aJustDev (@aJustDev ) (03a1dad )
fix(player): surface audio device open failures by aJustDev (@aJustDev ) (2f6e275 )
fix(jellyfin): serialize concurrent authentication by Ty Richards (@TyRichards ) (0a39d99 )
Deduplicate disabled-visualizer checks into helper by Nicholas Zambetti (@zambetti ) (35584c4 )
feat(spotify): list saved albums in the provider by jaredculp (@jaredculp ) (1821b4e )
Preserve empty line after title region by Nicholas Zambetti (@zambetti ) (7bd7321 )
feat(jellyfin): default to artist album browsing by Ty Richards (@TyRichards ) (c39a101 )
feat(ui): add a vis_rows config key for the visualizer height by Chris Regan (@soundlab ) (3622629 )
Correct layout row calculations when visualizer is disabled by Nicholas Zambetti (@zambetti ) (210f658 )
Merge pull request bjarneo#365 from mvanhorn/fix/304-ytdl-restart-retry by bjarneo (@bjarneo ) (de1dc4c )
Merge pull request bjarneo#367 from coryshaw1/feat/audiobookshelf-podcast-browse by bjarneo (@bjarneo ) (6b000fb )
Merge remote-tracking branch 'origin/main' into feat/spotify-lyrics by Tharin Fernando (@tharinfernando ) (e6d31e5 )
spotify lyrics: fetch synced lyrics from color-lyrics endpoint by Tharin Fernando (@tharinfernando ) (948464f )
fix(audiobookshelf): resolve the author name from the author request by coryshaw1 (@coryshaw1 ) (aefe1e3 )
feat(audiobookshelf): browse podcast shows alongside books by coryshaw1 (@coryshaw1 ) (e0c86cf )
feat(branding): add mirrored-ramp logo by Bjarne Øverli (@bjarneo ) (b391236 )
feat(site): redesign landing page and radio globe by Bjarne Øverli (@bjarneo ) (28d63db )
fix(ui): restore one-pass now-playing marquee by Bjarne Øverli (@bjarneo ) (8a7d28b )
fix: Retry transient yt-dlp 403 failures on restart by Matt Van Horn (@mvanhorn ) (f439a46 )
Merge pull request bjarneo#350 from joe25211/fix/u-overlay-stream-urls by bjarneo (@bjarneo ) (d8bac64 )
Merge remote-tracking branch 'origin/main' into pr-350-merge by Bjarne Øverli (@bjarneo ) (62776a4 )
test(setup): skip Unix mode assertions on Windows by Bjarne Øverli (@bjarneo ) (6268b95 )
Merge remote-tracking branch 'origin/main' into pr-350-merge by Bjarne Øverli (@bjarneo ) (18e1ebc )
docs: simplify guides and remove quickshell integration by Bjarne Øverli (@bjarneo ) (46730f2 )
fix(seek): cancel decoder restarts on track changes by Bjarne Øverli (@bjarneo ) (93970e3 )
test(lyrion): derive live test tracks by Bjarne Øverli (@bjarneo ) (707a265 )
docs(lyrion): document provider support by Bjarne Øverli (@bjarneo ) (140d6e6 )
fix(lyrion): page container results by Bjarne Øverli (@bjarneo ) (b6b66de )
fix(lyrion): remove paginated random albums by Bjarne Øverli (@bjarneo ) (90cece5 )
fix(lyrion): remove unsupported album sorts by Bjarne Øverli (@bjarneo ) (797b4ad )
fix(mixcloud): fill short album pages by Bjarne Øverli (@bjarneo ) (495e884 )
fix(player): discard stale yt-dlp seeks by Bjarne Øverli (@bjarneo ) (a2471c7 )
fix(player): invalidate stale preloads by Bjarne Øverli (@bjarneo ) (473d2a7 )
fix(player): reject stale playback starts by Bjarne Øverli (@bjarneo ) (df7aebf )
fix(provider): scope saved positions to tracks by Bjarne Øverli (@bjarneo ) (99ec6bd )
fix(setup): protect configuration credentials by Bjarne Øverli (@bjarneo ) (cc70992 )
Merge pull request bjarneo#331 from coryshaw1/fix/debounce-stream-seek by bjarneo (@bjarneo ) (f3e3b54 )
fix(seek): keep the queued target after a failed seek by coryshaw1 (@coryshaw1 ) (35f4266 )
Merge remote-tracking branch 'upstream/main' into fix/debounce-stream-seek by coryshaw1 (@coryshaw1 ) (7d3aa4f )
fix(seek): ignore seek completions from a previous track by coryshaw1 (@coryshaw1 ) (9ce4636 )
Merge pull request bjarneo#333 from tahadx/feat/cross-playlist-favorites by bjarneo (@bjarneo ) (2e262e4 )
fix(seek): serialize decoder restarts so the newest target wins by coryshaw1 (@coryshaw1 ) (f4fc002 )
Merge main into feat/cross-playlist-favorites by Bjarne Øverli (@bjarneo ) (b223a39 )
Merge pull request bjarneo#329 from tahadx/feat/dir-source-tui-manager by bjarneo (@bjarneo ) (9b3792c )
Merge pull request bjarneo#363 from bjarneo/fix/plugin-trust-single-file by bjarneo (@bjarneo ) (f285e5b )
fix(pluginmgr): preserve plugin entry trust names by Bjarne Øverli (@bjarneo ) (1b0af8c )
favorites: address review findings 1+2 by Taha Sadough (@tahadx ) (2f48ea9 )
merge feat/dir-source-tui-manager into feat/cross-playlist-favorites by Taha Sadough (@tahadx ) (4d00675 )
fix(pluginmgr): trust single-file plugins by Bjarne Øverli (@bjarneo ) (b502139 )
fix(seek): read playback state when the debounced seek runs by coryshaw1 (@coryshaw1 ) (198ffaa )
fix(ui): preserve [[dir]] sources across playlist delete and undo by Taha Sadough (@tahadx ) (c02e216 )
Merge pull request bjarneo#357 from tarzan/maarten/tidal-playlist-page-size-400 by bjarneo (@bjarneo ) (7594618 )
Merge main into maarten/tidal-playlist-page-size-400 by Bjarne Øverli (@bjarneo ) (542c488 )
merge upstream/main into feat/dir-source-tui-manager by Taha Sadough (@tahadx ) (b5f29c8 )
Merge pull request bjarneo#361 from CaseyRo/docs/lyrion-provider-lists by bjarneo (@bjarneo ) (23cc9f7 )
Merge remote-tracking branch 'upstream/main' into fix/debounce-stream-seek by coryshaw1 (@coryshaw1 ) (ad943d1 )
docs(lyrion): add Lyrion to the shared provider lists by Casey (@CaseyRo ) (1e53f6f )
feat(provider): add Lyrion Music Server (LMS) provider (bjarneo#349 ) by Casey Romkes (@CaseyRo ) (87ed747 )
fix(ui): search all provider albums (bjarneo#358 ) by Breeze (@BreezeDelegate ) (efbc989 )
fix(resolve): reject oversized PLS playlists instead of reading them whole (bjarneo#352 ) by joe25211 (@joe25211 ) (3e479ba )
fix(plex): respect the returned album page size (bjarneo#351 ) by joe25211 (@joe25211 ) (9d1dcb2 )
feat: add Mixcloud provider, with genre browsing, creator collections, and resume (bjarneo#344 ) by Kingsley Faulkner (@kingsleyfaulkner ) (b3da0fd )
fix(ui): avoid stale preloads by clearing preload more often (bjarneo#343 ) by Derek Povah (@derekpovah ) (b9f08b2 )
test(sshurl): add regression tests for SSH option-injection fix (bjarneo#341 ) by James King (@jameskingtech ) (a4d1512 )
fix(player): resume tracks at their saved position (bjarneo#328 ) by Cory Shaw (@coryshaw1 ) (9c827dc )
fix(spotify): support personal client search limits (bjarneo#337 ) by Timothy Markfeld (@tcmarkfeld ) (9d8ea63 )
Feature/lyrics updates (bjarneo#324 ) by 82Sam (@Ivyson ) (d56dcf2 )
Merge pull request bjarneo#356 from tarzan/tidal-album-search by bjarneo (@bjarneo ) (5a23fbf )
test(tidal): check fmt.Fprint error in page-cap test by Maarten Jacobs (@tarzan ) (e025b1e )
docs(site): note album-first ordering in Tidal card by Maarten Jacobs (@tarzan ) (e9327fa )
fix(tidal): respect 50-item page cap on playlists endpoint by Maarten Jacobs (@tarzan ) (62ff3c4 )
feat(tidal): add album search by Maarten Jacobs (@tarzan ) (f124419 )
fix(ui): wrap the URL resolution error with context by Joe Privett (@joe25211 ) (cb4593c )
fix(ui): load direct stream URLs from the u overlay by Joe Privett (@joe25211 ) (5747b51 )
feat(ui): add mirrored spectrum visualizer by Bjarne Øverli (@bjarneo ) (c44ac4c )
refactor(ui): remove compact mode by Bjarne Øverli (@bjarneo ) (a2bec0b )
feat(ui): add simplified playback mode by Bjarne Øverli (@bjarneo ) (8082a0e )
Merge pull request bjarneo#313 from tarzan/tidal-provider by bjarneo (@bjarneo ) (170071a )
fix(ui): smooth raw waveform updates by Bjarne Øverli (@bjarneo ) (5d74f32 )
feat(ui): add 60 FPS visualizer mode by Bjarne Øverli (@bjarneo ) (1565386 )
feat(tidal): log delivered format on every source resolution by Maarten Jacobs (@tarzan ) (2ee73eb )
feat(tidal): DASH FLAC playback and play-time source resolution by Maarten Jacobs (@tarzan ) (0f2cc66 )
feat(player): add play-time source resolvers and segmented downloads by Maarten Jacobs (@tarzan ) (79d7464 )
fix(ci): restore macOS IPC checks by Bjarne Øverli (@bjarneo ) (ef8d75a )
feat(ipc): make remote control v2-only by Bjarne Øverli (@bjarneo ) (c75cdec )
ci: deploy Pages on releases by Bjarne Øverli (@bjarneo ) (bf4130f )
feat(tidal): add sanitized playback probe for API verification by Maarten Jacobs (@tarzan ) (ff90dee )
fix: address review comments on Tidal provider by Maarten Jacobs (@tarzan ) (0278625 )
feat: add Tidal provider with lossless streaming by Maarten Jacobs (@tarzan ) (24b3028 )
feat(ipc): add versioned runtime control API by Bjarne Øverli (@bjarneo ) (7f00740 )
feat(ui): dimmed filled heart for unfavorite feedback by Taha Sadough (@tahadx ) (582c086 )
feat(ui): compact themed favorite heart by Taha Sadough (@tahadx ) (64e1937 )
fix(ui,favorites): address CodeRabbit review findings on favorites stack by Taha Sadough (@tahadx ) (5febb81 )
feat(ui): live-reload the Favorites screen on toggles by Taha Sadough (@tahadx ) (d3b9a7e )
refactor: address review findings across favorites stack by Taha Sadough (@tahadx ) (bcc1118 )
fix(ui): refresh playlist lists after favorite toggles by Taha Sadough (@tahadx ) (efd5fb6 )
fix(ui): always show track count on Favorites playlist by Taha Sadough (@tahadx ) (83a65ab )
fix(ui): drop unfavorited row from Favorites tracks screen by Taha Sadough (@tahadx ) (26694d4 )
fix(ui): guard Favorites from rename/delete/dir-source in manager by Taha Sadough (@tahadx ) (4f33eb9 )
fix: update site index.html keybinding for favorites (F→n) by Taha Sadough (@tahadx ) (2b6875e )
fix: simplify playlist labels — drop duration and dir source count by Taha Sadough (@tahadx ) (1fdd429 )
feat: n key for favorites, always-visible Favorites playlist by Taha Sadough (@tahadx ) (f04ead0 )
fix: show favorites count [♥ N] in header + help bar entries for f/F by Taha Sadough (@tahadx ) (ee24a18 )
fix: F/f keys now work from playlist manager tracks screen by Taha Sadough (@tahadx ) (4f777fc )
feat: cross-playlist favorites virtual playlist by Taha Sadough (@tahadx ) (dfcc55c )
fix(ci): bump Go toolchain to 1.26.6 for stdlib vuln fixes by Taha Sadough (@tahadx ) (b198f3c )
feat(release): add prerelease update channel by Bjarne Øverli (@bjarneo ) (f91b517 )
feat(radio): add hidden stats view by Bjarne Øverli (@bjarneo ) (b898032 )
fix(player): decode live streams off the speaker mutex (bjarneo#340 ) by Luís Otávio Pompolini Paiva (@OtavioPompolini ) (77b6132 )
fix(ci): restore security and Windows checks by Bjarne Øverli (@bjarneo ) (2ac3f9e )
fix(release): scope Go dependency to HEAD by Bjarne Øverli (@bjarneo ) (a7b9eda )
fix(player): prevent radio stutter and channel skips by Bjarne Øverli (@bjarneo ) (1f2e5ac )
feat: add nix support (bjarneo#336 ) by Alex Six (@alexandersix ) (f10ceaf )
fix(ui): address CodeRabbit review findings on playlist manager by Taha Sadough (@tahadx ) (c5c35ee )
fix(ui): refresh provider pane after playlist delete and undo by Taha Sadough (@tahadx ) (d802440 )
feat(ui): record Recently Played at track start by Taha Sadough (@tahadx ) (4cf232e )
fix(history): heal legacy duplicate rows on read by Taha Sadough (@tahadx ) (579a258 )
fix(history): move replayed tracks to top instead of duplicating by Taha Sadough (@tahadx ) (06212c3 )
feat(ui): record every played track in Recently Played by Taha Sadough (@tahadx ) (8425dd7 )
fix(player): record history for natural track ends without metadata duration by Taha Sadough (@tahadx ) (835a7ee )
fix(ui): reload open Recently Played tracks screen on scrobble by Taha Sadough (@tahadx ) (09adf92 )
fix(ui): refresh Recently Played surfaces after scrobbles by Taha Sadough (@tahadx ) (7223a20 )
fix(ui): propagate fbDescend confirm cmd, Errorf for dir failures by Taha Sadough (@tahadx ) (7cb380e )
refactor(ui): dedupe browser commit+refresh, fix stale docs by Taha Sadough (@tahadx ) (7cdc89c )
fix(ui): restrict p to the Local source pane by Taha Sadough (@tahadx ) (e497d30 )
feat(ui): create playlists and fill them with dirs or tracks by Taha Sadough (@tahadx ) (a095f8d )
fix(ytmusic): cancel cookie loads on shutdown by Bjarne Øverli (@bjarneo ) (4222ddb )
fix(ui): cancel stale Spotify playlist lookups by Bjarne Øverli (@bjarneo ) (c11504d )
fix(ytmusic): reject stale cookie cache writes by Bjarne Øverli (@bjarneo ) (9edbcc2 )
fix(ytmusic): bound cookie playlist loads by Bjarne Øverli (@bjarneo ) (f3a7d64 )
fix(ui): cancel abandoned Spotify album loads by Bjarne Øverli (@bjarneo ) (5e3fc47 )
fix(ytmusic): scope playlist classifications by Bjarne Øverli (@bjarneo ) (edc9399 )
fix(ytmusic): bind cache scope to session by Bjarne Øverli (@bjarneo ) (13d7356 )
fix(release): install Windows runtime archive by Bjarne Øverli (@bjarneo ) (054dc82 )
fix(release): build mpg123 static archive by Bjarne Øverli (@bjarneo ) (30d03b0 )
fix(spotify): avoid unsafe decoder cleanup by Bjarne Øverli (@bjarneo ) (afc6e6d )
fix(ui): keep Spotify errors within scroll budget by Bjarne Øverli (@bjarneo ) (cce9b4a )
fix(ytmusic): preserve playlist batch boundaries by Bjarne Øverli (@bjarneo ) (0a18420 )
fix(ytmusic): isolate cache data by account by Bjarne Øverli (@bjarneo ) (724537d )
fix(release): bundle Windows runtime DLLs by Bjarne Øverli (@bjarneo ) (a4bd338 )
docs(site): update Windows Spotify support by Bjarne Øverli (@bjarneo ) (98b00f8 )
fix(setup): allow YouTube OAuth with cookies by Bjarne Øverli (@bjarneo ) (95a63ac )
fix(packaging): declare mpg123 dependency by Bjarne Øverli (@bjarneo ) (d894e0d )
fix(ui): settle paused visualizer state by Bjarne Øverli (@bjarneo ) (5b6288f )
fix(ui): keep Spotify search feedback visible by Bjarne Øverli (@bjarneo ) (86d836c )
fix(ytmusic): batch playlists and cancel searches by Bjarne Øverli (@bjarneo ) (d11017c )
fix(ytmusic): scope caches by authentication by Bjarne Øverli (@bjarneo ) (755dcf7 )
fix(plex): respect returned playlist page size by Bjarne Øverli (@bjarneo ) (983641b )
fix(spotify): close decoder resources by Bjarne Øverli (@bjarneo ) (10894b3 )
fix(ui): ignore canceled Spotify album loads by Bjarne Øverli (@bjarneo ) (7cc5cdc )
fix(release): build Spotify codec support by Bjarne Øverli (@bjarneo ) (154b230 )
fix(ci): install Spotify codec dependencies by Bjarne Øverli (@bjarneo ) (2396774 )
security: prevent SSH option injection via URL host (bjarneo#325 ) by 82Sam (@Ivyson ) (757e744 )
fix(seek): debounce seeks that restart a decoder by coryshaw1 (@coryshaw1 ) (fb079f8 )
fix: address CodeRabbit review on bjarneo#329 by Taha Sadough (@tahadx ) (b1cacca )
feat(ui): manage [[dir]] playlist sources from the playlist manager by Taha Sadough (@tahadx ) (df1a7c1 )
feat(ytmusic): support cookie-backed zero-oauth playlist browsing (bjarneo#314 ) by Praveen Raj (@pc799 ) (23685fc )
feat(spotify): search albums and open them from the results (bjarneo#318 ) by Jankees van Woezik (@jankeesvw ) (23b3222 )
feat(plex): browse server playlists alongside albums (bjarneo#321 ) by Impure6529 (@Impure6529 ) (f05bff1 )
fix: handle capital keybindings from enhanced keyboard events (bjarneo#322 ) by Matt Van Horn (@mvanhorn ) (e0328d9 )
fix(ui): decay visualizer to rest when paused (bjarneo#327 ) by Tharin Fernando (@tharinfernando ) (5ca8722 )
Enable Spotify support on Windows (bjarneo#323 ) by Luguin (@Luguin8 ) (49c2cc7 )
feat(ipc): report live radio metadata in status (bjarneo#319 ) by Cory Shaw (@coryshaw1 ) (0c9c30d )
docs: add herdr-cliamp to community plugins (bjarneo#320 ) by Cory Shaw (@coryshaw1 ) (cfdcb94 )
perf: optimize playback and Spotify switching by Bjarne Øverli (@bjarneo ) (b9f6856 )
fix(spotify): propagate paged search failures by Bjarne Øverli (@bjarneo ) (a491ce2 )
fix(spotify): page search around the Development Mode limit (bjarneo#315 ) by Jankees van Woezik (@jankeesvw ) (dc5eaee )
docs(site): add Discord RPC community plugin (bjarneo#316 ) by Faza Iman Imron (@fazaimron27 ) (b5478b9 )
fix: make built-in themes accessible by Bjarne Øverli (@bjarneo ) (ea464de )
feat: add classic Winamp theme by Bjarne Øverli (@bjarneo ) (5a588f5 )
fix: preserve custom EQ curve by Bjarne Øverli (@bjarneo ) (548ed24 )
fix: keep live radio on current station by Bjarne Øverli (@bjarneo ) (eee503d )
feat: enrich playlist album via file metadata (bjarneo#307 ) by RGR09 (@RGR09 ) (7ce3dc4 )
feat: dynamic directory playlists via [[dir]] sources (bjarneo#308 ) by Taha Sadough (@tahadx ) (78fcefa )
Merge pull request bjarneo#310 from coryshaw1/feat/audiobookshelf by bjarneo (@bjarneo ) (385b227 )
feat(plugins): add retained event pub/sub over IPC (bjarneo#303 ) by Faza Iman Imron (@fazaimron27 ) (f373776 )
fix(upgrade): replace running binary on Windows (bjarneo#302 ) by Floze (@floze-the-genius ) (35f7339 )
refactor(provider): return reporting failures instead of discarding them by coryshaw1 (@coryshaw1 ) (70dcc75 )
fix(audiobookshelf): tag each error with the provider name once by coryshaw1 (@coryshaw1 ) (9355138 )
fix(audiobookshelf): wrap client errors with the failing operation by coryshaw1 (@coryshaw1 ) (aceb651 )
fix(audiobookshelf): re-login and retry once after a 401 by coryshaw1 (@coryshaw1 ) (2dac490 )
fix(audiobookshelf): wrap the setup probe error, log progress failures by coryshaw1 (@coryshaw1 ) (f30769b )
fix(audiobookshelf): check cancellation before the first search request by coryshaw1 (@coryshaw1 ) (6688ff4 )
fix(audiobookshelf): wrap search cancellation errors, cover both checks by coryshaw1 (@coryshaw1 ) (75aff0d )
fix(audiobookshelf): honor the search context, sync docs and site by coryshaw1 (@coryshaw1 ) (89c184f )
style(audiobookshelf): assert PlaybackReporter like the sibling providers by coryshaw1 (@coryshaw1 ) (1a6bb81 )
fix(audiobookshelf): expand item requests and PATCH progress writes by coryshaw1 (@coryshaw1 ) (77d1681 )
docs: note buffered-download memory/seek caveat and narrow resume scope by coryshaw1 (@coryshaw1 ) (38948f9 )
fix(audiobookshelf): fix review findings from the fix wave by coryshaw1 (@coryshaw1 ) (b7042fe )
docs: document the audiobookshelf provider by coryshaw1 (@coryshaw1 ) (28467a1 )
feat(ui): let providers name their browse levels by coryshaw1 (@coryshaw1 ) (375873b )
feat: register the audiobookshelf provider by coryshaw1 (@coryshaw1 ) (8979c60 )
feat(ui): resume provider playback position and report progress by coryshaw1 (@coryshaw1 ) (872afc4 )
fix(audiobookshelf): clamp resume offset to the target track's duration by coryshaw1 (@coryshaw1 ) (05c39c8 )
feat(audiobookshelf): resolve the stored resume position by coryshaw1 (@coryshaw1 ) (9097fcc )
feat(audiobookshelf): report listening position to the server by coryshaw1 (@coryshaw1 ) (ba6d91d )
fix(audiobookshelf): cache empty book catalog instead of refetching by coryshaw1 (@coryshaw1 ) (5e50c74 )
feat(audiobookshelf): browse authors and books, search the library by coryshaw1 (@coryshaw1 ) (af9511f )
fix(audiobookshelf): cache empty Playlists() results by coryshaw1 (@coryshaw1 ) (2a1d05b )
feat(audiobookshelf): list audiobooks, podcasts, and their tracks by coryshaw1 (@coryshaw1 ) (a74bf01 )
feat(audiobookshelf): add catalog and progress endpoints by coryshaw1 (@coryshaw1 ) (2c39437 )
feat(audiobookshelf): add HTTP client with token and password auth by coryshaw1 (@coryshaw1 ) (37b73c7 )
feat(audiobookshelf): add API types and provider meta keys by coryshaw1 (@coryshaw1 ) (174a356 )
feat(config): add audiobookshelf section by coryshaw1 (@coryshaw1 ) (cae7de5 )
feat(site): show radio listener peak by Bjarne Øverli (@bjarneo ) (6164a26 )
chore: remove AI review notice by Bjarne Øverli (@bjarneo ) (2b6b27f )
fix: update grpc security dependency by Bjarne Øverli (@bjarneo ) (c0f0456 )
Merge pull request bjarneo#301 from bjarneo/fix/radio-buffer by bjarneo (@bjarneo ) (b812886 )
fix: increase radio playback buffer by Bjarne Øverli (@bjarneo ) (05b6986 )
docs: update documentation link by Bjarne Øverli (@bjarneo ) (ab1d0c6 )
fix(spotify): show followed playlists by Bjarne Øverli (@bjarneo ) (dd04d28 )
fix: prevent quickshell widget stealing focus (bjarneo#296 ) by Craig Derington (@craigderington ) (1f3ae81 )
style: format shell completion option by Bjarne Øverli (@bjarneo ) (60ca8b0 )
fix(spotify): persist rotated refresh tokens by Bjarne Øverli (@bjarneo ) (ddc08b8 )
fix(spotify): restore playback authentication by Bjarne Øverli (@bjarneo ) (167ab25 )
docs: add cliamp-plugin-gpodder-sync to community plugins (bjarneo#294 ) by Salomon May (@sollymay ) (759c5da )
feat: the ability to generate bash autocomplete has been enabled (bjarneo#288 ) by Sergey Savelev (@Medovi ) (164f5f8 )
feat: Progressive playlist loading for youtube music (bjarneo#287 ) by 82Sam (@Ivyson ) (53b2240 )
Merge pull request bjarneo#285 from bjarneo/fix/playlist-expand-layout by bjarneo (@bjarneo ) (adc26e9 )
test(ui): mirror view layout in centering test by Bjarne Øverli (@bjarneo ) (e6c019e )
fix(ui): restore playlist expansion layout by Bjarne Øverli (@bjarneo ) (7e74525 )
fix(httpclient): accept ICY stream responses (bjarneo#284 ) by bjarneo (@bjarneo ) (40fb54e )
fix(ci): restore cross-platform checks by Bjarne Øverli (@bjarneo ) (7404285 )
feat(ui): add stereo peak visualizer by Bjarne Øverli (@bjarneo ) (bac2475 )
feat(ui): prioritize browse content by Bjarne Øverli (@bjarneo ) (605c80d )
test(ui): cover terminal boundaries by Bjarne Øverli (@bjarneo ) (336b6a6 )
feat(ui): improve hierarchy and theme safety by Bjarne Øverli (@bjarneo ) (6eae1f0 )
fix(ui): space contextual help hints by Bjarne Øverli (@bjarneo ) (9888e6a )
feat(ui): unify interaction controls by Bjarne Øverli (@bjarneo ) (21962cc )
feat(ui): add undo for playlist edits by Bjarne Øverli (@bjarneo ) (46b903a )
fix(ui): retry failed lyrics lookups by Bjarne Øverli (@bjarneo ) (b8efea7 )
feat(ui): add editable text inputs by Bjarne Øverli (@bjarneo ) (55323e3 )
fix(ui): open help before modal dispatch by Bjarne Øverli (@bjarneo ) (94e2e6a )
feat(ui): add responsive terminal layouts by Bjarne Øverli (@bjarneo ) (09b738e )
fix(ui): complete phase 0 interaction safety by Bjarne Øverli (@bjarneo ) (853d40e )
feat(ipc): expand remote player controls by Bjarne Øverli (@bjarneo ) (02a95fb )
site: make hero playlist the live station selector by Bjarne Oeverli (@bjarneo ) (6084b04 )
site: redesign landing page as a powered-on CRT instrument by Bjarne Oeverli (@bjarneo ) (00754c3 )
docs: center sponsor after README video, drop duplicate section by Bjarne Oeverli (@bjarneo ) (cdbac0d )
docs: add sponsor to site hero, trim README docs list to hosted link by Bjarne Oeverli (@bjarneo ) (c0aa5f6 )
docs: add contextowl docs badge, move sponsor down, drop AI.txt by Bjarne Oeverli (@bjarneo ) (efce6cf )
docs: link docs.cliamp.stream from site and README by Bjarne Oeverli (@bjarneo ) (15d33f1 )
Update README with sponsorship and project details by bjarneo (@bjarneo ) (6f5409f )
chore: gitignore .env and the ContextOwl changelog workflow by Bjarne Øverli (@bjarneo ) (374ae68 )
test(ipc): use short socket dir for remaining orphan/multi-request tests by Bjarne Øverli (@bjarneo ) (1d5f7a9 )
test: fix macOS and Windows CI test failures by Bjarne Øverli (@bjarneo ) (9b0cbb6 )
fix: Windows portability for atomic writes, file URLs, and data dir by Bjarne Øverli (@bjarneo ) (5cfef38 )
ci: install flac/vorbis/ogg dev libraries in Linux and macOS jobs by Bjarne Øverli (@bjarneo ) (806b73c )
Add NCS Pop and Chill radio stations by Bjarne Øverli (@bjarneo ) (d69a998 )
build: bump toolchain to go1.26.5 and x/net to v0.55.0 by Bjarne Øverli (@bjarneo ) (c21def1 )
fix(player): prevent radio freeze from stalled live-stream reads by Bjarne Øverli (@bjarneo ) (6da39e3 )
Add NCS radio stations (top tracks + 5 genre channels) by Bjarne Øverli (@bjarneo ) (6df7f07 )
fix(plex): explain macOS Local Network denial behind no-route-to-host by Bjarne Øverli (@bjarneo ) (bb5f518 )
fix(player): fall back to muxed format for YouTube live streams by Bjarne Øverli (@bjarneo ) (dcbac8e )
Perf by Bjarne Øverli (@bjarneo ) (0087197 )
Perf by Bjarne Øverli (@bjarneo ) (c110b22 )
Add cliamp-plugin-mandelbrot to community plugins (bjarneo#279 ) by mikkel-bergmann (@mikkel-bergmann ) (5e16bb7 )
feat: improve local playlist management by Bjarne Øverli (@bjarneo ) (a5922d0 )
fix: support go install module path by Bjarne Øverli (@bjarneo ) (8dad762 )
test: isolate appdir environment by Bjarne Øverli (@bjarneo ) (5cf895e )
Merge pull request bjarneo#274 from lentikr/embedded-lyrics-mpris-art by bjarneo (@bjarneo ) (7e6a637 )
fix(lyrics): harden embedded metadata refresh by Bjarne Øverli (@bjarneo ) (40ac05d )
ci: update GitHub Actions versions by Bjarne Øverli (@bjarneo ) (7781658 )
Merge branch 'main' into embedded-lyrics-mpris-art by lentikr (@lentikr ) (aca9577 )
fix(ui): reconnect long-paused yt-dlp streams by Bjarne Øverli (@bjarneo ) (494ba35 )
fix(mediactl): sanitize MPRIS metadata strings by Bjarne Øverli (@bjarneo ) (9e32f98 )
Fix vertical padding for overlays in expanded-height mode (bjarneo#270 ) by Nicholas Zambetti (@zambetti ) (58fc46e )
Merge remote-tracking branch 'origin/main' by Bjarne Øverli (@bjarneo ) (0125270 )
feat(qobuz): add external provider by Sergio Rubio (@rubiojr ) (82f228c )
feat(lyrics,mediactl): embed local lyrics and album art in MPRIS/NowPlaying by lentikr (@lentikr ) (184a67e )
docs: symlink AGENTS.md to CLAUDE.md by bjarneo (@bjarneo ) (854911e )
docs: add cliamp-plugin-nova to community plugins (bjarneo#269 ) by 8bit64k (@8bit64k ) (d328f80 )
feat(ui): add search result navigation keys by Evan Tetzlaff (@ReUhssurance ) (aecf2e0 )
fix(ui): keep now playing stable when browsing playlists by Bjarne Øverli (@bjarneo ) (5fcd5aa )
go fix qobuz by Sergio Rubio (@rubiojr ) (9cf4737 )
Send form-encoded POST bodies with the correct Content-Type by Sergio Rubio (@rubiojr ) (e501dde )
Wrap loadCreds/saveCreds errors with context by Sergio Rubio (@rubiojr ) (fc9453f )
Log the real cause of Qobuz silent-auth failures by Sergio Rubio (@rubiojr ) (273ac0d )
Add Qobuz to the remaining provider lists in keybindings docs by Sergio Rubio (@rubiojr ) (0b7fe5e )
Add Q to the Qobuz quick-switch keybinding rows in docs by Sergio Rubio (@rubiojr ) (4f1ea74 )
Wrap randomTracks gather errors with context by Sergio Rubio (@rubiojr ) (fbdf9a7 )
Fetch Random Tracks playlists concurrently by Sergio Rubio (@rubiojr ) (9d79cc6 )
Wrap doRequest's low-level errors with qobuz context by Sergio Rubio (@rubiojr ) (55cd76b )
Add a Random Tracks entry to the Qobuz library by Sergio Rubio (@rubiojr ) (09240a0 )
Harden Qobuz bundle scraping against HTTP errors by Sergio Rubio (@rubiojr ) (9e47d0e )
Document qobuz as a valid --provider value by Sergio Rubio (@rubiojr ) (e2d4cbf )
Make the Qobuz getFileUrl signature test actually test something by Sergio Rubio (@rubiojr ) (ca78b26 )
Qobuz external provider implementation by Sergio Rubio (@rubiojr ) (0ffd774 )
Update cliamp website index.html by Sergio Rubio (@rubiojr ) (b62960b )
Register qobuz integration by Sergio Rubio (@rubiojr ) (8fe484f )
qobuz integration documentation by Sergio Rubio (@rubiojr ) (3761c5a )
map qobuz keybindings by Sergio Rubio (@rubiojr ) (08ede29 )
Add Qobuz configuration by Sergio Rubio (@rubiojr ) (afcf695 )
hook up qobuz cli command by Sergio Rubio (@rubiojr ) (e71b086 )
Add Qobuz to cliamp setup wizard by Sergio Rubio (@rubiojr ) (47af5c0 )
fix(player): prevent stuck radio ffmpeg streams by Bjarne Øverli (@bjarneo ) (52d7fce )
fix(resolve,player): play HLS (.m3u8) radio streams via ffmpeg (bjarneo#259 ) by Roberto Gama (@robertofgama ) (213ada6 )
windows: fix config, IPC, path, and Lua compatibility (bjarneo#258 ) by GVASTE (@gvastethecreator ) (d6c50ed )
docs(search): note fuzzy matching for local search surfaces by Bjarne Øverli (@bjarneo ) (44b7037 )
feat(search): fuzzy matching for local search surfaces by Bjarne Øverli (@bjarneo ) (4f9984b )
fix(ytmusic): surface yt-dlp/ffmpeg error instead of bare EOF by Bjarne Øverli (@bjarneo ) (f9877eb )
feat(ui): render all overlays inline in the playlist region by Bjarne Øverli (@bjarneo ) (280cf85 )
fix(spotify): support podcast episodes in playlists and search by Bjarne Øverli (@bjarneo ) (31a0190 )
feat(radio): show now-playing for NTS and FIP via their APIs by Bjarne Øverli (@bjarneo ) (e7a98a4 )
fix(player): keep ICY metadata reader attached for ffmpeg radio streams by Bjarne Øverli (@bjarneo ) (21bbc74 )
feat(ui): add Ctrl+V visualizer picker with live preview by Bjarne Øverli (@bjarneo ) (7024e87 )
docs: document new plugin events, cliamp.queue, and cliamp.store by Bjarne Øverli (@bjarneo ) (69061a7 )
feat(plugins): add cliamp.queue API by Bjarne Øverli (@bjarneo ) (c3fb948 )
fix(plugins): store files owner-only with atomic write by Bjarne Øverli (@bjarneo ) (9bafd01 )
feat(plugins): add cliamp.store per-plugin KV API by Bjarne Øverli (@bjarneo ) (3c34004 )
feat(plugins): add player.seek/volume/eq/mode and queue.change events by Bjarne Øverli (@bjarneo ) (e6bc873 )
docs: add cliamp-plugin-tubeamp to community plugins by Bjarne Øverli (@bjarneo ) (409ff9e )
refactor: simplify and align review-fix code by Bjarne Øverli (@bjarneo ) (b4dec97 )
Fix review findings: concurrency, plugin sandbox, provider bugs, and dedup (bjarneo#254 ) by bjarneo (@bjarneo ) (bd8d5d0 )
fix(player): fall back to ffmpeg for non-Vorbis OGG HTTP streams (bjarneo#253 ) by Karol Czeryna (@evilr00t ) (a233599 )
Full-width separators and separator label clean-up (bjarneo#252 ) by Nicholas Zambetti (@zambetti ) (a9fe9bd )
fix(mpris): declare properties in introspection XML (bjarneo#251 ) by Loïc Favory (@loicfavory ) (5ff46f6 )
Support low-power mode in config (bjarneo#250 ) by Eric van Riet Paap (@ericvrp ) (c9c6faf )
Lower app wakeup by reducing Bubbletea FPS and adding more aggressive settings with --low-power (bjarneo#249 ) by Eric van Riet Paap (@ericvrp ) (139b2c0 )
Clean up community plugins section in index.html (bjarneo#248 ) by HANCORE (@HANCORE-linux ) (76615a2 )
Add nightrider visualizer (bjarneo#247 ) by HANCORE (@HANCORE-linux ) (726640f )
Add VU meter style visualizer plugin to documentation (bjarneo#245 ) by Alexander Zeitler (@AlexZeitler ) (5085112 )
Add cliamp-plugin-block-burst to community plugins list (bjarneo#244 ) by Alexander Zeitler (@AlexZeitler ) (640c121 )
Add cliamp-plugin-led-burst to community plugins by Bjarne Øverli (@bjarneo ) (8dd9b6b )
Slow tick to ~0.7 Hz when fully idle by Bjarne Øverli (@bjarneo ) (a88655d )
Add Winamp 2.9 LED matrix visualizer (ClassicLED) by Bjarne Øverli (@bjarneo ) (3c373f5 )
Don't auto-play when loading a playlist by Bjarne Øverli (@bjarneo ) (379d990 )
Improvements to album header visibility & control (bjarneo#234 ) by Nicholas Zambetti (@zambetti ) (d6cd996 )
Configurable volume floor and visualizer volume linking (bjarneo#237 ) by arro000 (@arro000 ) (7e61d09 )
Add rename playlist to the playlist manager (bjarneo#239 ) by Mohammed ABDI (@abdimed ) (e82826e )
fix(httpclient): respect HTTP_PROXY/HTTPS_PROXY for streaming client (bjarneo#238 ) by Atarit0 (@Atarit0 ) (dda2747 )
Fix daemon mode autoplay and MPRIS registration (bjarneo#232 ) by Bjarne Øverli (@bjarneo ) (94ba80c )
Standardize scrolling and expanded height for all overlays (bjarneo#233 ) by Nicholas Zambetti (@zambetti ) (a1ba57c )
Fix kbd elements alignment in key-row (bjarneo#231 ) by Luca Pattocchio (@Kasui92 ) (d56d353 )
Unify Overlay and List Rendering Logic (bjarneo#230 ) by Nicholas Zambetti (@zambetti ) (9eb29e7 )
contrib/quickshell: enlarge card to 300x72 and align visualizer width by Bjarne Øverli (@bjarneo ) (84ef9f1 )
contrib/quickshell: refresh README for compact redesign by Bjarne Øverli (@bjarneo ) (e6c5cc9 )
contrib/quickshell: compact card redesign by Bjarne Øverli (@bjarneo ) (2fce6d8 )
docs: trim quickshell guide to quick start by Bjarne Øverli (@bjarneo ) (99d54da )
docs: document Quickshell widget and visstream IPC by Bjarne Øverli (@bjarneo ) (a5da8e7 )
contrib/quickshell: add now-playing widget for Omarchy by Bjarne Øverli (@bjarneo ) (568a734 )
ipc: add Theme to status response and stream visualizer bands by Bjarne Øverli (@bjarneo ) ([e7dc6d4](https://github.com/jarmen423
You can’t perform that action at this time.