Skip to content

Releases

Oxidify v0.8.3

Choose a tag to compare

@github-actions github-actions released this 29 Oct 16:11

Oxidify 0.8.3

Local playback gets the most love this round: the progress bar no longer
races ahead of the music, big playlists stop refetching every time you open
them, and a pile of smaller playback and reliability fixes ride along.

Fixed

  • The local playback clock keeps real time again. On free/alternate
    playback the progress bar ran at double speed and hit the end before the
    song did; clicking the bar realigned it. The position now interpolates from
    the moment it was last reported, so the bar and the audio agree.

  • A full playlist stays full. Reopening a fully cached playlist used to
    throw its rows away if the snapshot didn't match, then rebuild the whole
    list from the API, which is slow for a thousand-song playlist. It now keeps
    the cached rows when the live track count still matches, so an unchanged
    playlist opens instantly from disk.

  • Local playback edges. Seeking, gapless skipping onto a ready prefetch,
    repeating a lone track on Next, starting a paused track, and seeking before
    the decoder starts now behave. The equalizer runs over local audio, and
    yt-dlp cookie and proxy handling no longer leaks between runs.

  • Remote control is scoped to the account that started the app. The
    Raycast, Stream Deck, and oxidify verbs now carry a user key, so another
    account on the same machine cannot drive playback. Read-only verbs still
    answer anyone.

  • Reliability. A token refresh can no longer resurrect a deleted sign-in,
    signing out resets the premium flag, device names with accented characters
    decode correctly, and a crafted skin archive no longer forces a large
    allocation.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The
macOS DMG contains a universal app for Apple Silicon and Intel. Linux
archives are available for x64 and ARM64. checksums.txt lists SHA-256
hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows. The changes were built and
tested on Windows only; Linux and macOS are compiled and tested by CI, not
driven by hand.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download.
See the installation guide
for platform instructions.

Oxidify v0.8.2

Choose a tag to compare

@github-actions github-actions released this 21 Oct 20:48

Oxidify 0.8.2

A small fix: the equalizer now works in alternate playback.

Fixed

  • The equalizer shapes alternate audio. The ten bands, the preamp, balance and mono used to change only Spotify playback; with alternate playback on, moving a slider did nothing. The same filters now run over the audio decoded on this computer, whatever its sample rate, so the graph in Settings matches what you hear.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows, with a new test that a band lands on its frequency at a 48 kHz mono source. Only the filter maths and the existing suite were run, on Linux; nobody has listened to alternate playback through the equalizer yet, and macOS and Windows were compiled and tested by CI, not driven by hand.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.8.1

Choose a tag to compare

@github-actions github-actions released this 20 Oct 21:56
d4d7e14

Oxidify 0.8.1

A small release that makes long playlists lighter on the processor. Nothing changes in how Oxidify looks or what it does; frames that used to copy a whole playlist now share it.

Changed

  • Sorted and filtered playlists cost far less per frame. Clicking a column heading or typing in a playlist's filter shows a view of the list, and the player used to copy every song's address in that view twice on every frame, once for the rows and once for the big play button. On a playlist of ten thousand songs that was most of the frame. The view is now shared, so a frame only counts a reference and a play copies just what it needs. In the frame benchmark the sorted page went from about 1.6 ms a frame to about 0.13 ms, and the plain playlist page from about 0.32 ms to about 0.13 ms.
  • The playlist header stops re-counting. The total playing time and the choice to show the Date added column were worked out from every row on every frame. They are kept with the rows now and updated as pages arrive.
  • Fewer repeated searches in lists. The Add to playlist sheet looked up each playlist's place among your recent ones by walking that list for every comparison, and checked each pin the same way; both are direct lookups now. Removing songs from a playlist, checking whether a playlist already holds a song, and loading a long playlist in alternate playback each compared every row against every song; each now gathers what it is looking for once.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows, with new tests for the row totals, the sheet's order, and the alternate session's loading. The frame benchmark was run before and after on Linux; macOS and Windows were compiled and tested by CI, not driven by hand.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.8.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 17:53

Oxidify 0.8.0

Oxidify has a new look. The logo is now a sound wave that rusts from blue through purple to orange, the interface takes its colours from it, the built-in Winamp skin has been redrawn, and the song you are playing can show on your Discord profile.

Added

  • Discord status. Turn on Settings, Show on Discord, and the song playing on this computer appears on your profile as Listening to Oxidify, with its cover, artists, album and a progress bar. The cover opens the song on Spotify and the small Oxidify badge opens this repository. It talks only to the Discord app on the same computer, clears when you pause, and is off until you turn it on. Discord shows it only while Activity Privacy, Share my activity is on.

Changed

  • New logo and colours. The hexagon is replaced by the wave mark everywhere: the top bar, the sign-in screen, About, the window and taskbar icon, the tray, and the Windows and macOS app icons. The default accent follows it: blue for selected and playing items, and the full blue to purple to orange blend on the play buttons, the seek and volume sliders and the primary buttons. Green is still available in Settings, Appearance, and settings saved by earlier versions keep working.
  • One bar at the top on Windows. The separate title bar is gone. Minimize, maximize and close sit at the right end of the top bar, and the bar's empty space drags the window and maximizes it on double click.
  • The built-in Winamp skin is redrawn in the classic layout: ribbed metal, bevelled buttons, sunken displays, gradient time digits and sliders, and lamps on the toggles.

Fixed

  • Settings no longer overlap. Wide controls such as the proxy choices and the audio source pair used to draw over their description. Each row now gives its control the room it needs, puts the control under the text when the window is narrow, and lists the choices left to right. The long note about alternate playback wraps instead of being cut off.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows. The Discord status was checked by hand on Windows against the Discord desktop app, and the new window controls, settings layout and Winamp skin were looked at on Windows. The Discord status on macOS and Linux uses Discord's local socket instead of the Windows pipe; it was compiled and tested by CI, not tried by hand.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.7.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 13:32

Oxidify 0.7.0

Alternate playback keeps going through sorted playlists and can carry on with Autoplay, and a large batch of fixes and features comes over from Spotifast, the project Oxidify started from.

Fixed

  • Sorted and filtered playlists keep playing in alternate playback. Playing a song from a sorted or filtered playlist sent the list to the engine as plain songs, which it fetched from Spotify again. When Spotify rate-limited that request, the queue fell back to the one song clicked and playback stopped when it ended. The queue is now built from the rows already on screen, starts at the right song even past the first 200, and a queue that arrives after the current song has ended moves straight on to the next one.
  • A dropped playback session picks up where it stopped. It resumes playing instead of coming back paused, and a single-song pickup no longer loops under repeat.
  • Repeat survives a restart. The mode you chose is applied with every load instead of being reset to off.
  • Queueing an album never drops songs. Albums queue as ordered songs on this computer and on other devices, and rate-limited additions retry without losing rows.
  • Sign-in is sturdier. The sign-in and playback ports are claimed before the browser opens, a port already in use says so, and the sign-in listener bounds how long and how much it reads. Local playback retries quietly with the saved approval after a connection failure.
  • Playback recovers from a stalled or changed output and starts even when no audio device is present yet. Seeking no longer replays stale audio, and the equalizer resets cleanly after a seek.
  • Oversized artwork and skin archives are refused as they are read.

Added

  • Autoplay in alternate playback. When a list ends, Oxidify continues with similar songs. The Autoplay switch now shows in alternate mode too. Songs that found no match are remembered and skipped for the rest of the list.
  • Proxy settings for system, HTTP and SOCKS5 proxies, with the password kept in an owner-only file. Spotify playback uses HTTP proxies only; with SOCKS5 it connects directly while everything else uses the proxy.
  • Full-window lyrics. Press F or F11. The cover sits beside the words, alone when a song has none, and Q shows the queue beside them.
  • Settings search finds a setting by its words.
  • Click a page's cover to see it large.
  • Release notes are one click away in Settings, About.
  • Enter in the Add to playlist search adds to the highlighted playlist; the arrow keys move the highlight.

Changed

  • Playing a song picked from search plays that song on its own, with Autoplay after it.
  • Blends show who added each song.
  • Spotify playback state is polled less often, and less again while the window is hidden.
  • The sung line of lyrics sits higher, loading pages show placeholders instead of a spinner, the system's reduced-motion setting is followed, and times and dates use fixed-width figures.
  • Windows keeps the computer awake while music plays and gives the player thread priority.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows. Alternate playback through a sorted 490-song playlist was exercised by hand on Windows against a live free account: songs ended into the next one, Next followed the list, and a song past row 400 started correctly. macOS and Linux were compiled and tested by CI, not driven by hand.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.6.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 01:02
96c723e

Oxidify 0.6.1

Likes and playlist changes work again for every account, and the Add to playlist sheet is the one Spotify's client has, Liked Songs row included.

Fixed

  • Liking a song and adding it to a playlist work for every account. Library writes went only to Spotify's single library endpoint, which some apps and accounts refuse, so a like, an unlike or a follow could fail with nothing to show for it. The client now falls back to the classic endpoint of each kind, songs, albums, artists, podcasts, episodes and playlists, the moment the single endpoint refuses, and goes there first from then on. Library checks take the same road.
  • Liked Songs can be left again. The sheet the check opens listed only playlists, so a song liked by mistake had nowhere to be unliked from. Liked Songs is now its first row.

Changed

  • The Add to playlist sheet matches Spotify's. A search, New playlist, then Liked Songs and the playlists you can edit, the ones already holding the song under Saved in with a check and the rest under Recently updated with an empty circle, each with its cover, its pin and its count. Click rows to tick or untick them, and Done applies every change at once; Cancel drops them. Enter in the search still adds to the first match straight away. The same sheet sits behind Add to playlist in every song's menu.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows, including a headless render of the sheet and tests for the endpoint fallback's grouping and for what Done applies. The interface was exercised on Linux in demo mode; macOS and Windows were compiled and tested by CI, not driven by hand. The fallback was not exercised against a live Spotify account from the build machine.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.6.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 00:09
2095d85

Oxidify 0.6.0

The library opens at once and playlists fill in seconds, local playback starts from the first fragment, and two new things to see: Jump, a palette that finds anything in your library as you type, and Your listening, a page of what you actually played.

Fast

  • The library opens at once. The playlist list, Liked Songs, and every playlist you have opened before are kept on disk and show the moment the app starts. Spotify's answer replaces them only where something changed: a playlist's rows give way only if its snapshot moved on, Liked Songs stay when the live first page and count match.
  • Playlists fill in seconds. A playlist's pages used to come one at a time, each asked for only when you scrolled near the end, and nothing showed until the playlist's own details had answered. The first page now sets off the next four together, pages show in order as they land, rows draw under what the library already knows of the playlist, and the details request no longer downloads a hundred songs it never used. Liked Songs, saved albums, podcasts and album pages load the same way.
  • Local playback starts from the first fragment. Free-account playback opened its decoder in a mode that walked the whole file before the first sample, which on YouTube's fragmented audio meant most of the file arriving in serial quarter-megabyte round trips first. It now opens streaming, reads the rest ahead in the background, and starts the moment the headers are in; on a test server answering in 100 ms, a three-minute song's first sound moved from 1.14 seconds and eleven requests to 127 milliseconds and two. Matches are remembered on disk, search results for a week and stream URLs until they expire, so a song played again starts without a lookup; the next track is prefetched as soon as the queue is known and survives a press of Next.
  • Lighter all round. Table rows are built once per change of the list rather than on every frame, the sidebar looks each rank up once per sort instead of scanning the recents for every comparison, and the Spotify audio sink sleeps until it is needed instead of polling a hundred times a second.

New

  • Jump. Ctrl+K opens a palette over the page that finds any song, playlist, album, artist or podcast already in your library as you type, offline and at once, plus a few commands. Enter plays a song or opens anything else, Ctrl+Enter plays a playlist, album or artist whole, the arrows move the choice, and Esc closes it.
  • Your listening. From the account menu or Jump: time listened, plays, different songs and artists, the songs, artists and albums you played most, a chart of plays by day or by month, and how many days in a row you have listened, by week, month, year or all time. A play is counted once a song has run for half a minute, on this computer, in a file you can clear from the page. Nothing about it is sent anywhere.

Fixed

  • Artist names in the player bar were cut in half. The band under the cover was a fixed height that fit the fonts with one point to spare; a scale factor or a fallback face cut the names. The band now comes from the fonts in use, and track rows take the same layout.
  • Changing the audio output no longer stops the music. Connecting headphones or switching the default output reopens the output and carries on; only an output that will not open stops playback.
  • The playing context's cover offers pause. Cards on Home and the sidebar covers of what is playing show pause and toggle playback instead of starting the context over, personalised playlists included.
  • Sorting by album keeps each album in track order, whichever way the albums run, and tells two albums of the same name apart.
  • The transport spins while the next track loads on a skip, and a failed load clears it.
  • The resume point survives an abrupt end. A new song marks it, and so does playing music every half minute.
  • Other devices are polled every thirty seconds, not four, while the window is minimised and nothing plays.

Compatibility

Settings and session files from earlier versions load unchanged. The new files are the library snapshot under the cache directory, the listening history and the alternate audio match memory under the state directory; all three are safe to delete. Free-account alternate playback keeps its routing and its labelling; this update adds no Spotify playback capability to Free accounts.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows, including headless renders of every page, panel and dialog, engine tests for the fragmented-file start, the read-ahead and the prefetch, and tests for the page fan-out, the disk snapshots, the palette's ranking and the listening sums. The interface was exercised on Linux in demo mode; macOS and Windows were compiled and tested by CI, not driven by hand. The playback timings above come from a local test server, not from YouTube; live Spotify-account playback and live loading times were not measured for this release.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.5.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 00:29
7318e20

Oxidify 0.5.0

Search shows results as they arrive, the Liked Songs control works in two presses, alternate playback keeps honest time, and the library can be a grid.

Search is fast again

A search used to be one request for every kind of result, sent through the shared Spotify app, where a rate-limit pause could hold the whole page for ten seconds. It is now two requests at once: the catalogue (songs, artists, albums, podcasts, episodes), which goes through your personal Spotify app when you have one, and the playlists, which only the shared app may look for. Each half shows the moment it lands, with a spinner for the other, and typing on cancels any half still travelling instead of queueing it behind the new search. A failed half leaves the other's answers up.

Liked Songs in two presses

The plus beside a song adds it to Liked Songs. Once the song is there, the check that replaces it no longer removes it on a slip of the mouse: it opens where else the song can go. Remove from Liked Songs sits at the top, then the playlists you can edit, filtered as you type; Enter adds to the first match, and playlists that already hold the song show a check. The same control sits in every track row, the player bar, and the Now Playing view. The player bar's right-click menu also offers Remove from this playlist while a song plays from a playlist you can edit.

Alternate playback keeps time

A third-party match is rarely exactly as long as Spotify's recording, and the bar used to count against Spotify's length: the position stuck at the end while the audio played on, or the song ended with time still showing. The bar now takes the matched recording's own length as soon as its headers are decoded, so the time, the end, and seeking follow what is actually playing.

Library, lyrics, and colour

The library's view control gains a Grid of covers beside the list and compact rows, each tile opening, taking a dropped song, and answering a right-click like its row. The Liked Songs tile has a violet-to-mint gradient with a white heart. The line being sung sits a third of the way down the lyrics panel so the lines to come fill the view. Settings too narrow for a control beside its words put the control on its own line. The player bar fades from one song's colour to the next instead of jumping. The accent stays Oxidify's blue, deepened on the light theme so playing titles stay readable; Settings → Appearance → Accent offers a green instead.

Compatibility

Settings files from earlier versions load unchanged: the accent is blue unless accent says green, and the library opens as a list unless sidebar_grid is set. Free-account alternate playback keeps its routing; this update adds no Spotify playback capability to Free accounts.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows, including headless renders of every page and panel and engine tests for the alternate playback timer and the split search. The interface was exercised on Linux in demo mode; macOS and Windows were compiled and tested by CI, not driven by hand. Live Spotify-account playback and live search timings were not measured for this release.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.4.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 02:25
0ca0163

Oxidify 0.4.0

The window takes the layout of the current Spotify desktop client, with every feature carried over.

The new layout

  • One bar across the top. Back and forward, a centred Home button and search field, and your account sit above everything. Your Library, the page, and the side panel are rounded panels on a near-black ground, with the player bar along the bottom.
  • Your Library. A Create button, chips for Playlists, Artists, Albums, and Podcasts, a search, and a sort and view control that switches between recently played and your own order and between full and compact rows. Click the title to fold the panel down to a rail of covers; each cover still opens its page, takes a dropped song, and has its right-click menu. Pins, drag ordering, and Ctrl+B work as before.
  • Now Playing view. The first button at the right of the player bar, or the arrow in the corner of the playing cover, opens a panel beside the page with the cover large, the artist and their following, where the music is playing, and what is next in the queue. It shares the right column with the queue and the lyrics, one at a time, and is remembered between runs.
  • Home. Chips for All, Music, and Podcasts. The Podcasts chip shows the podcasts in your library and your saved episodes with links to their full pages. The shortcuts at the top are Liked Songs and the playlists played most recently.
  • Add to Liked Songs. The heart in rows, the player bar, and the Now Playing view is now a plus that becomes a filled check once the song is saved. B still toggles it, and Liked Songs keeps its heart.
  • Player bar. The mini player button moves to the bar's right end, beside the volume; the top bar keeps Refresh and Settings. Artist names in the bar no longer fall below the edge.

Compatibility

Settings and session files from earlier versions load unchanged: the library opens out rather than folded, the Now Playing view starts closed, and every earlier field keeps its value. Free-account alternate playback, Spotify Connect, the Winamp mini player, and the keyboard shortcuts are unchanged. This update adds no Spotify playback capability to Free accounts.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows, and every page, panel, and dialog of the new layout renders in the headless test suite. The interface was exercised on Linux in demo mode; macOS and Windows were compiled and tested by CI, not driven by hand. Live Spotify-account playback was not exercised for this release.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.

Oxidify v0.3.7

Choose a tag to compare

@github-actions github-actions released this 02 Oct 23:27

Oxidify 0.3.7

Podcast progress, playlist editing, and everyday controls behave more consistently.

Five improvements

  • Continue podcast episodes. Play on an unfinished episode resumes from the saved place shown in its row. Finished episodes start over. An already active episode keeps its live position. Episodes inside playlists retain the playlist and its displayed queue order.
  • Edit the playlist you are looking at. Remove from this playlist stays available while sorted or filtered. Playback follows the visible rows, while positional moves remain limited to the original unfiltered order. Missing dates no longer misalign the table.
  • Find the destination without losing the menu. Clicking or scrolling inside Add to playlist keeps it open. Clearing its filter restores the full scrollable list, and choosing a destination closes it normally.
  • Respect the playback device. Devices that reject remote volume changes show disabled volume and mute controls; keyboard, media-control, and mini-player volume actions respect the same capability. One-track and one-episode remote requests use the supported request shape.
  • Keep navigation predictable. Clearing the search field stays on the current page. Typing a new query opens Search. Shift shortcuts keep their intended action, and text fields retain arrow-key cursor movement and selection.

Reliability

  • Automatic replacement of the local Spotify engine keeps the last volume heard instead of restoring the launch volume. Explicit new settings still take precedence.
  • Settings files saved as UTF-8 with a leading byte order mark keep their preferences.
  • Release checks and all platform builds use one validated source commit. Archive contents, required notices, architecture, checksums, and build provenance are checked before a draft is produced.

Podcast resume requires supported Spotify playback. Alternate local audio retains its existing account routing and does not support podcast episodes. This update does not add Spotify playback capabilities to Free accounts.

Downloads

Windows installers and portable ZIPs are available for x64 and ARM64. The macOS DMG contains a universal app for Apple Silicon and Intel. Linux archives are available for x64 and ARM64. checksums.txt lists SHA-256 hashes; the provenance file identifies the source commit and build run.

Automated tests run on Linux, macOS, and Windows. Linux binaries, the macOS runner's native slice, and the Windows x64 installer receive runtime checks. Windows ARM64 and the other macOS slice are compiled and inspected, not run on native hardware. Live Spotify-account playback was not exercised for this release.

Windows SmartScreen or macOS Gatekeeper may warn about an unsigned download. See the installation guide for platform instructions.