Skip to content

Releases: Adoxcol/studio

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 14:27
2409e5c

Added

  • A redesigned Listening stats page. Top 10 artists, albums and tracks now show artist pictures and album covers, with a bar for how each compares with number one; the period's most played artist, album and track get large spotlight cards. New figures: albums and tracks heard, average listening per day, change against the previous period, artists that are new to you, when you listen (by hour and by weekday) and top genres.
  • Genres have their own colours. The Genres tab shows each genre as a coloured card with a bar for how much of your library it makes up, and track and artist details show genres as coloured chips. Familiar genres get fitting colours (jazz amber, electronic cyan, metal red); every other genre keeps a stable colour of its own.
  • "Date added" sort in the Library (click Sort until it shows Date added), newest first. Navidrome / Subsonic tracks use the date they were added to the server, so it matches Navidrome's Recently Added; tracks scanned by earlier versions get their server date on the next scan.
  • The website has a "What's new" section listing every release with its notes, newest first, and download buttons for each version, so older builds are one click away.

Fixed

  • Choosing Navidrome in the Library now sticks: a "This computer / Navidrome" switch next to the search box picks the catalogue, and it stays selected while you move between Songs, Artists, Albums, Genres and Playlists, and after restarting. Navidrome is no longer listed as a folder, and the Folders tab shows only this computer's folders.

Changed

  • GitHub release pages now show that version's notes from this changelog, followed by the list of merged pull requests.

What's Changed

  • 🎨 Palette: Add Semantics to editorial playback toggles by @Adoxcol in #182
  • ci(release): use the CHANGELOG section as the release notes by @Adoxcol in #183
  • fix(library): keep the Navidrome source across tabs by @Adoxcol in #184
  • feat(library): Date added sort, with Navidrome's own dates by @Adoxcol in #185
  • feat(library): give genres their own colours by @Adoxcol in #186
  • feat(stats): richer listening stats with artwork and top 10s by @Adoxcol in #187
  • feat(website): release notes and downloads for every version by @Adoxcol in #188
  • chore(release): prepare v0.8.0 by @Adoxcol in #189

Full Changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 08:25
59d8369

What's Changed

  • perf(subsonic): keep the UI responsive during a Navidrome scan by @Adoxcol in #176
  • fix(shortcuts): Space in search, and no per-tick rebuilds while playing by @Adoxcol in #177
  • perf(subsonic): cached cover art and parallel album fetches by @Adoxcol in #178
  • fix(subsonic): consistent Navidrome artist pictures, accent colours from server art by @Adoxcol in #180
  • ⚡ Bolt: Optimize map insertion in artistImageRequests by @Adoxcol in #179
  • chore(release): prepare v0.7.0 by @Adoxcol in #181

Full Changelog: v0.6.0...v0.7.0

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 16:12
f789948

What's Changed

  • 🎨 Palette: Improve screen reader accessibility in Library Browse view by @Adoxcol in #164
  • 🛡️ Sentinel: [security improvement] Prevent artwork file corruption with atomic writes by @Adoxcol in #165
  • fix(library): make concurrent artwork saves safe; sync docs and CI with the project by @Adoxcol in #166
  • refactor: drop palette_generator, remove dead Subsonic UI, split large files by @Adoxcol in #167
  • feat(scrobbling): scrobble to Last.fm and ListenBrainz by @Adoxcol in #168
  • feat(subsonic): offline downloads for Navidrome tracks by @Adoxcol in #169
  • feat(mini-player): compact always-on-top mini player by @Adoxcol in #170
  • feat(command-palette): jump anywhere with Ctrl+K by @Adoxcol in #171
  • feat(stats): listening stats and a yearly review by @Adoxcol in #172
  • feat(skins): shareable .studioskin skins by @Adoxcol in #173
  • fix(updates): stop "Checking for updates" looking stuck by @Adoxcol in #174
  • chore(release): prepare v0.6.0 by @Adoxcol in #175

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 12:51
620620b

What's Changed

  • 🛡️ Sentinel: [MEDIUM] Fix DoS vulnerability in cover art upload by @Adoxcol in #138
  • 🎨 Palette: Add tooltip to audio engine close button by @Adoxcol in #139
  • 🛡️ Sentinel: [security improvement] Make Subsonic config writes atomic by @Adoxcol in #140
  • 🎨 Palette: Add tooltip directly to IconButton in player_bar by @Adoxcol in #141
  • 🎨 Palette: Add Semantics wrappers to library page buttons by @Adoxcol in #142
  • 🎨 Palette: Add explicit semantics to custom interactive color swatches by @Adoxcol in #150
  • ⚡ Bolt: Replace O(N) library filtering scan with O(1) subset lookup by @Adoxcol in #149
  • ⚡ Bolt: Replace putIfAbsent with ??= in O(N) loops by @Adoxcol in #143
  • 🛡️ Sentinel: [security improvement] Prevent file corruption with Atomic Writes by @Adoxcol in #145
  • 🎨 Palette: Add Semantics to interactive widgets by @Adoxcol in #144
  • ⚡ Bolt: Optimize text search in LibraryIndex by @Adoxcol in #146
  • 🛡️ Sentinel: [HIGH] Fix predictable temporary files in tests (symlink vulnerability) by @Adoxcol in #148
  • ⚡ Bolt: Avoid closure allocation in LibraryIndex.creditsOf by @Adoxcol in #151
  • 🎨 Palette: Add semantics to accent color swatches by @Adoxcol in #147
  • chore: remove unactionable TODO comment in linux/flutter/CMakeLists.txt by @Adoxcol in #153
  • Fix max height constraint on visible children in TabsAreaLayout by @Adoxcol in #154
  • feat(subsonic): sync artist artwork and playlists by @Adoxcol in #155
  • fix(artist-artwork): classify aborted requests as transient by @Adoxcol in #152
  • ⚡ Bolt: Fix O(N^2) disk writes by batching refreshSources mutations by @Adoxcol in #157
  • Move Windows build logic to ephemeral by @Adoxcol in #156
  • ⚡ Bolt: Optimize Subsonic track insertion with batch upsert by @Adoxcol in #159
  • ⚡ Bolt: batch insert subsonic tracks to avoid N+1 queries by @Adoxcol in #158
  • fix(release): restore Navidrome sync and Windows readiness by @Adoxcol in #160
  • 🎨 Palette: Add semantics and selected states to navigation icon rail buttons by @Adoxcol in #161
  • 🛡️ Sentinel: [MEDIUM] Prevent file corruption with Atomic Writes by @Adoxcol in #162
  • chore(release): prepare v0.5.0 by @Adoxcol in #163

Full Changelog: v0.4.11...v0.5.0

v0.4.11

Choose a tag to compare

@github-actions github-actions released this 12 Sep 00:18
7315507

What's Changed

  • fix(input): preserve text editing and cache Navidrome artist art by @Adoxcol in #137

Full Changelog: v0.4.10...v0.4.11

v0.4.10

Choose a tag to compare

@github-actions github-actions released this 11 Sep 20:32
e6b6be5

What's Changed

  • fix(release): handle missing signing configuration safely by @Adoxcol in #136

Full Changelog: v0.4.9...v0.4.10

v0.4.6

Choose a tag to compare

@github-actions github-actions released this 11 Sep 15:40
3ebb48b

Downloads

Platform File Notes
Windows x64 studio-windows-x64.zip Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway.
macOS studio-macos.zip Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper.
Linux x64 studio-linux-x64.tar.gz Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host.

What's Changed

  • fix(website): fix spotlight image swapping and scope desktop CI builds to main by @Adoxcol in #126
  • fix(website): public assets build and feat(subsonic): full library scan & browsing by @Adoxcol in #127
  • Release/0.4.6 by @Adoxcol in #128
  • fix(windows): delay focus() call so OS processes show() before foregr… by @Adoxcol in #129

Full Changelog: v0.4.5...v0.4.6

v0.4.5

Choose a tag to compare

@Adoxcol Adoxcol released this 11 Sep 12:57
66d64e8

Downloads

Platform File Notes
Windows x64 studio-windows-x64.zip Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway.
macOS studio-macos.zip Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper.
Linux x64 studio-linux-x64.tar.gz Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host.

What's Changed

Full Changelog: v0.4.0...v0.4.5

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 11 Sep 01:26
9bc3c26

Downloads

Platform File Notes
Windows x64 studio-windows-x64.zip Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway.
macOS studio-macos.zip Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper.
Linux x64 studio-linux-x64.tar.gz Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host.

What's Changed

  • docs: polish README with contributors section, profile pictures, and … by @Adoxcol in #118
  • feat(playback): add editorial audio environment fullscreen playback mode by @Adoxcol in #119
  • chore(release): bump version to 0.4.0 by @Adoxcol in #120

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 23:48
340b79c

Downloads

Platform File Notes
Windows x64 studio-windows-x64.zip Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway.
macOS studio-macos.zip Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper.
Linux x64 studio-linux-x64.tar.gz Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host.

What's Changed

  • feat(library): add safe metadata editor by @Adoxcol in #68
  • feat(library): edit embedded cover art by @Adoxcol in #69
  • 🎨 Palette: Add Semantics to LibraryTextAction for accessibility by @Adoxcol in #71
  • feat(library): add batch metadata workflow by @Adoxcol in #72
  • feat(playlists): add smart playlists and saved filters by @Adoxcol in #73
  • feat(playlists): add playlist management essentials by @Adoxcol in #74
  • ⚡ Bolt: [performance improvement] Convert heavy getters to late final in _LibraryFilterDialogState by @Adoxcol in #70
  • ci: use the self-hosted homelab runner for Linux jobs by @Adoxcol in #75
  • 🛡️ Sentinel: [MEDIUM] Fix insecure temporary file creation in POSIX PcmFifo by @Adoxcol in #76
  • 🎨 Palette: Add Semantics to library tabs by @Adoxcol in #77
  • ⚡ Bolt: Memoize smart playlist evaluation during rebuilds by @Adoxcol in #78
  • 🎨 Palette: Add Semantics to IconRail buttons for accessibility by @Adoxcol in #79
  • 🎨 Palette: Add Semantic traits to custom Tab widgets by @Adoxcol in #80
  • 🛡️ Sentinel: [MEDIUM] Fix insecure temporary file creation in tests by @Adoxcol in #81
  • 🎨 Palette: Add tooltips to immersive transport controls by @Adoxcol in #82
  • 🎨 Palette: Add accessibility semantics to accent swatches by @Adoxcol in #83
  • 🎨 Palette: Add Semantics to clickable widgets in Library Browse View by @Adoxcol in #84
  • ⚡ Bolt: Non-blocking file existence check by @Adoxcol in #85
  • ⚡ Bolt: Change existsSync to async exists in ArtworkStore save method by @Adoxcol in #86
  • ⚡ Bolt: [Performance] Avoid synchronous file I/O on session load by @Adoxcol in #89
  • Implement auto-merge functionality in CI workflow by @Adoxcol in #87
  • 🧹 Remove unreachable NativePlayer check in _configureNative by @Adoxcol in #88
  • ⚡ Bolt: Optimize deleteTracksNotKept to use safe batched queries by @Adoxcol in #92
  • 🧪 Testing Improvement Task: Add test for playlist order dialog error state by @Adoxcol in #91
  • 🛡️ Sentinel: [security improvement] Secure preferences with atomic writes by @Adoxcol in #90
  • ⚡ Make DiscordArtworkResolver.cachedUrl async to prevent UI thread blocking by @Adoxcol in #97
  • 🧹 Preserve exception fallback logic while resolving false positive dead code warning by @Adoxcol in #93
  • ci: build desktop targets only on main by @Adoxcol in #100
  • fix(ci): dispatch builds after automatic merge by @Adoxcol in #101
  • fix(ci): target repository when dispatching builds by @Adoxcol in #102
  • 🎨 Palette: [a11y] Announce window controls as buttons by @Adoxcol in #104
  • Fix auto_merge workflow failure by making gh repository context explicit by @Adoxcol with @Copilot in #103
  • 🛡️ Sentinel: [MEDIUM] Fix insecure temporary file creation in tests by @Adoxcol in #107
  • ⚡ Bolt: Memoize playlist evaluation by ID during rebuilds by @Adoxcol in #108
  • test: stabilize timing-sensitive suites by @Adoxcol in #110
  • ⚡ Bolt: Replace O(N) indexOf in Queue UI with O(1) queueIndex by @Adoxcol in #99
  • test(discord): await retry completion by @Adoxcol in #111
  • 🧹 Fix deprecation in ReorderableListView by @Adoxcol in #94
  • 🧹 Refactor _NamedAction to use enum to resolve dead code warning by @Adoxcol in #95
  • ⚡ Bolt: O(1) Artist/Album view filtering by @Adoxcol in #96
  • ⚡ Bolt: Optimize track table rebuilds and search/sort allocations by @Adoxcol in #98
  • 🛡️ Sentinel: [MEDIUM] Fix insecure file saving in ArtworkStore by @Adoxcol in #105
  • ⚡ Bolt: Optimize smart playlist evaluation during name edit by @Adoxcol in #109
  • 🛡️ Sentinel: [CRITICAL] Fix SQL injection by @Adoxcol in #112
  • 🛡️ Sentinel: [security improvement] by @Adoxcol in #113
  • chore(deps): upgrade dependencies by @Adoxcol in #114
  • fix(windows): raise and center the window on launch by @Adoxcol in #115
  • Release/0.3.0 by @Adoxcol in #116
  • Release/0.3.0 by @Adoxcol in #117

New Contributors

  • @Adoxcol with @Copilot made their first contribution in #103

Full Changelog: v0.2.0...v0.3.0