Skip to content

Releases: Myst1cX/Spotify-Web

Spotify Web 1.66 - Ad blocking now uses a daily-updated hosts list and catches ad audio by its ID

Choose a tag to compare

@Myst1cX Myst1cX released this 27 Oct 12:15
5692131

Reworks ad blocking. The app now downloads a fresh list of ad hosts every time it starts, blocks more of Spotify's own ad and tracking addresses, and recognises ad audio even when it comes from the same kind of address as music.

The list is built every day from the Brave, uBlock Origin and AdGuard filters plus a hand-kept list of extra ad hosts, and published on the app's GitHub page. If a download fails, the last downloaded copy stays in use. Until the first download succeeds, the app uses the copy built into it.

The app also watches what Spotify's player reports about the current track. When a track is marked as an ad, the app notes its audio file and silences requests for it. Blocked audio is replaced with silence, and other blocked requests get an empty reply.

When Spotify queues an ad right after the song that is playing, the app now points that song's end at the next song, so the ad usually never starts: no ad bar, no break screen, no pause. If Spotify's next try for the same ad leaves no other song to point to, the app now plays the next song itself, a moment (about 1.5 seconds) before the playing song ends, so that try is usually left out too. It does this through the web page's own player when it can reach it (skipping inside the page's queue, and putting the song back if the page lands past it), and with a plain play command when it cannot. Pressing next while such an ad is due now goes to the next song too, and nothing is skipped from the app when another device is the one playing. If an ad still gets through it plays as silence and Spotify skips it, as before.

With Debug Logging on, the Logger now shows ad blocking under the tag adblock (search tag:adblock): each blocked host, list downloads and reloads, ad IDs received, ads found in Spotify's player state, ads that reached the screen and ads left out.

The Adblocking mode switch (Instant and Dynamic) is gone from Settings, because ad blocking now works one way. A value saved by an older version is ignored.

Adds Block podcast ad hosts to Settings, off by default. When it is on, omny.fm, tritondigital.com and adswizz.com are blocked too. They are off by default because blocking them may break playback of some podcasts (needs further testing).

Some of Spotify's own ad and tracking addresses (audio-ads, ads-fa, pixel and a few more) are now blocked for everyone. A few Spotify-internal addresses that the old list blocked, such as analytics and log hosts, are no longer blocked.

The ad audio detection, the silent audio file and parts of the blocking are adapted from SpotiDuck by 23fpsz. The ad markers, the idea of leaving an ad out of the playback state and the idea of playing the next song shortly before a song ends, and the way the page's own player is reached for that, follow what Myspoti by kota-zo documents. Thanks to both authors.

Limits: Until the first download, the built-in list is only as new as the app version. An ad can still show for about a second when Spotify puts it first after the early play, or when Spotify's page does not accept the redirect; it then plays as silence and is skipped. If Spotify's page ever goes blank, blocking Spotify's own ad addresses is one possible cause.

Spotify Web 1.65 - Automatic Musixmatch token fetching through a separate WebView

Choose a tag to compare

@Myst1cX Myst1cX released this 26 Oct 23:19
e7bd19a

Adds automatic Musixmatch token fetching to Web Lyrics+. Tap the Musixmatch link in the Set your Musixmatch User Token window and sign in on the screen that opens over the player. The app reads and saves your token, closes the screen and reloads the lyrics.

Google sign-in works using the same fix as Spotify's Google login. Sign-in popups open over the screen and close automatically. Back goes one page back, and closes the screen when there is no page left.

With Debug Logging on in Settings, the Logger shows lines for this screen: the Musixmatch pages it visits, its requests and the hand-over of the token. Query strings and token values are not logged.

Lyrics+ userscript 17.67 includes the feature and updated instructions. The manual token fetching process outside the app is unchanged. Userscript 17.68 also moves the Musixmatch lookup to Musixmatch's signed web API, after Musixmatch removed its old route, and follows zensu357's pull request fix/musixmatch-signed-web-api for bettergnome-lyricsbar. Thanks to its author. The script loads from GitHub on every launch, so updating the app is enough.

Limits: the signed web API is unofficial and its key comes from Musixmatch's own website code, so Musixmatch can break it again at any time, without an app change.

Spotify Web 1.64 - Fix Google sign-in and use the mobile layout for Google and Facebook login pages

Choose a tag to compare

@Myst1cX Myst1cX released this 25 Oct 06:57
f093ed7

Google sign-in now works again. Previously it would fail with a This browser or app may not be secure. message. Facebook sign-in works as before.

Google and Facebook login pages now use a Chrome on Android user agent, giving them a mobile layout. Spotify pages retain the desktop Chrome user agent. Google’s login page also receives a small helper script required for sign-in to work.

The app’s userscripts and player and layout fixes now run only on spotify.com and its subdomains. Previously, login URLs containing accounts.spotify.com could trigger these scripts on Google and Facebook pages, causing console errors. This is a separate fix and is not what made Google sign-in work.

Limit: Switching between Spotify and a login page triggers an additional page load to apply the appropriate user agent, so you may notice one brief extra reload.

Spotify Web 1.63 - Notice on devices without Widevine, where playback can't work

Choose a tag to compare

@Myst1cX Myst1cX released this 24 Oct 23:13
f093ed7

Adds a notice at launch on devices without Widevine, such as some virtual phones and emulators. Spotify's web player needs Widevine to play music, so on those devices the player bar never starts and tapping a song does nothing. The Playback not supported notice explains this and points out that you can still browse and control your other devices through Spotify Connect.

It is the first popup at launch, ahead of the update dialog, because an app update can't add Widevine. Got it closes it. Nothing is stored, so it returns at every launch while Widevine is missing. Devices with Widevine never see it, and it stays hidden if the app can't tell whether Widevine is there. No setup is needed.

Widevine belongs to the device's system, not to the app or its WebView, so no WebView update can add it, including the app's own custom WebView. Google Play Services isn't needed for it either. An up-to-date WebView still matters on such a device, since it lets you log in, browse and control your other devices through Spotify Connect. So if the device's WebView is too old, the Update WebView popup still appears, and on a device without Widevine it now says that updating helps with login, browsing and Connect control but won't make the device play music itself. On devices with Widevine the popup is unchanged.

Limits: the notice only detects Widevine missing entirely. If it is present but not working, nothing is shown. It explains the problem but doesn't fix it. On the virtual phone where this was found (Android 7.1.2), playback transferred from another device gave a working player bar and controls, but choosing the virtual phone itself in Connect failed with "Try connecting to this device again later".

Spotify Web 1.62 - Logger buttons no longer shift after exporting a log

Choose a tag to compare

@Myst1cX Myst1cX released this 23 Oct 10:10
f093ed7

Fixes a small layout glitch in the Logger. After exporting a large log and returning to the app, the Source and Resume buttons sat slightly lower than the buttons next to them, until you tapped Source again.

The button rows lined their buttons up by the baseline of their text, and Source and Resume are the buttons whose text changes while you use the Logger, so a new layout could leave them offset. The rows now line them up at the top, so their position no longer depends on their text.

Spotify Web 1.61 - Media notification works again, Eruda Console, and a playback pause for Android 17

Choose a tag to compare

@Myst1cX Myst1cX released this 23 Oct 09:18
f093ed7

Part 1 - Playback pauses instead of playing on when background audio can't be protected (Android 17)

Fixes background playback on Android 17, which can freeze or silence audio that plays without the app's background playback service running. If the app can't start that service while music is playing, the player now pauses instead of playing on unprotected. If you start playing with the app open and then leave it, music keeps playing in the background as before. The pause only happens when the service can't start, for example when a track loads while the app is already in the background. When you open the app again, the service starts as it did before. There is no new setting for this.

Part 2 - Eruda Console, a built-in developer console for the player page

Adds a row to Settings, between Web Debugging and Debug Logging: Eruda Console (off by default). Turn it on and Eruda, a developer console with Console, Elements, Network, Resources, Sources, Info, Snippets and Settings tabs, opens on the player page at once, with no restart. Close the panel and a small gear button stays on the page to bring it back. While the switch is on, the gear button is there every time the player page loads, and the panel stays closed until you tap it. Turn the switch off and the console is removed straight away. Eruda is bundled in the app, so it works offline and nothing is downloaded. It does not replace Debug Logging and Logger, and it does not need Web Debugging.

Part 3 - Media notification works again

Spotify changed its web player, and the app could no longer read the track title, so it never showed the media notification. It does again. Title, artist and the like state are read correctly for songs, Smart Shuffle tracks and podcast episodes, so the lock screen and notification shade controls and the Bluetooth and headset buttons work again. The notification shows title, artist, cover and play/pause, skip and seek. Repeat shows off, all or one. Liking a song or podcast episode from the notification adds it to Liked Songs or Your Episodes directly, and the app shows Added to Liked Songs or Added to Your Episodes with a Change button that opens the Add to playlist panel to pick a different playlist. On a Smart Shuffle track, the like button in the notification adds the song to the playlist it was recommended for. It works with the player expanded or collapsed. There is nothing to set up.

Limits: after the Android 17 pause, playback does not resume by itself when you come back to the app, so tap play. The pause covers only the cases where the service can't start. If you turn on Eruda Console while another page is showing instead of the player, it appears the next time the player page loads. Unliking a song or podcast episode from the notification only opens the Add to playlist panel in the app. Go back to the app, tap the playlist, Your Episodes or Liked Songs you want to remove it from, then press Done. On podcast episodes the notification shows the same buttons as for songs and has no -15 / +15 second or speed buttons like the app's player.

Spotify Web 1.60 - Fullscreen Mode toggle in Settings

Choose a tag to compare

@Myst1cX Myst1cX released this 22 Oct 03:19
e6a8620

Adds a Fullscreen Mode toggle to Settings, between Cigi Translator and Keep Screen On. It is enabled by default.

When it is on, the status bar is hidden and the system bars are transparent. On Android 9+ the app also draws into the notch or camera cutout along the top.

When it is off, you get a normal window where Android keeps space for the status bar, shown as a black bar. The switch applies to both the main screen and Settings, so their headers line up in either mode.

It takes effect the moment you flip it, with no app refresh required.

Limits: on Android 8 and older there is no notch handling, since those versions don't support it. Only the status bar is hidden or shown.

Spotify Web 1.59 - Confirmation toast for app icons, and a userscript picker in the Logger

Choose a tag to compare

@Myst1cX Myst1cX released this 22 Oct 00:12
e6a8620

Picking an icon in Settings > App icon now shows a toast, and the Logger gets a userscript picker, so you can view the log of one script at a time.

App icon: tap a tile and the toast says "Icon changed to ", or " is already active" if you tapped the icon already in use. On Android 8+ the toast also names the style, for example "Icon changed to Teal + coral (Classic)" or "Icon changed to Teal + coral (Adaptive)". Switching only the style of the same palette counts as a change. This toast is the sign inside the app that your tap registered. The dialog closes afterwards, as before.

Logger: when Source is set to userscripts, a gear button appears next to the Source button. Tap it to open a menu called Source: userscripts with All enabled plus your enabled userscripts (Spotifuck Mobile or Desktop, Cigi Translator, Nyan Cat progress bar, Web Lyrics+). Pick one to show only the logging for that script, with no need to type its tag (such as tag:us.cigi). The pick is remembered. If you later switch that script off in Settings, the Logger goes back to All enabled. Copy and Export use the lines currently shown, and the Export header gains a "script:" entry. Lines from userscripts that are switched off are now hidden on every Source and Level. The Level button is a little narrower to make room for the gear button.

The counter now consists of three lines. Line 1 is the count, as before. Line 2 says what the current Source covers: app, page, enabled userscripts for all, all enabled userscripts for userscripts (or the picked script's name once you pick one), and page or app for those two. Line 3 says which Level is showing and what it includes: all (everything, even verbose), D+ (debug, info, warn, error), I+ (info, warn, error), W+ (warn, error) or E (error only). The extra lines are always there, so the dialog keeps the same height whatever you pick. The log list also has a little space above and below it, and its top and bottom edges fade as you scroll.

Also: the caret fix from the download popup's file name field (1.58) now covers the Logger's Search field, and extends to text fields in the WebView page content, such as the Search tab. After Back (button or gesture) closes the keyboard, the caret goes away, and on the Search tab the player bar comes back right away.

The Debug Logging description in Settings now ends with "Tap Logger to view them."

Limits: some launchers refresh the icon late, so the home screen may lag behind the toast. Android 7 has no Adaptive | Classic switch, so the toast there has no style name.

Spotify Web 1.58 - Web Lyrics+ userscript's download buttons now work inside the app

Choose a tag to compare

@Myst1cX Myst1cX released this 21 Oct 10:12
e6a8620

Fixed: the synced (.lrc) and unsynced (.txt) download buttons in the Web Lyrics+ popup did nothing inside the app. They now open a popup at the bottom of the screen where you can edit the file name, choose the folder to save to and tap Save.

Only the part of the name before the extension is editable. .lrc or .txt is always added for you, so a rename can't leave the file with a wrong or missing extension. An empty name is saved as "lyrics", and very long names are shortened to fit. You choose the folder once with the system folder picker and the app remembers it. Change switches to another folder. If no folder is chosen yet, Save opens the picker first and saves right after. No storage permission is needed. If the folder was deleted or access was revoked, a message appears and the picker opens again on the next Save.

If the folder already has a file with the same name, a small note appears under the name field and updates as you type. Tapping Save then asks you to confirm. Your existing file stays untouched and the new one is saved as a copy, named like "name (1).lrc". Cancel returns to the popup so you can change the name.

The file name field shows no caret until you tap it. When Back (button or gesture) closes the keyboard, the caret goes away too, instead of blinking in the field with no keyboard.

The Lyrics+ userscript (17.60) now supports downloading inside the app, not only in a browser. Scripts load from GitHub on every launch, so you get it automatically after updating the app. With an older script the buttons still do nothing.

Dialog titles across the app (update, Set as Default, battery, Logger and others) now use a medium weight instead of bold.

Limits: On Android 11 and newer the system folder picker doesn't allow the root of internal storage, the root of an SD card or the Download folder itself; "Use this folder" stays greyed out there. Any other folder works, including Documents, Music and any subfolder of Download, like Download/Lyrics. The picker is the system's own, so its look belongs to your device.

Spotify Web 1.57 - Adaptive / Classic style switch for the app icons (Android 8+)

Choose a tag to compare

@Myst1cX Myst1cX released this 21 Oct 04:43
e6a8620

Adds an Adaptive | Classic switch to the App icon dialog on Android 8+, so every palette can be used in two styles.

Adaptive is the modern icon your launcher shapes, with the themed monochrome version. Classic is the round icon with a thin ring, as on Android 7, redrawn as a sharp vector.

The picker opens on your current style. The switch only changes which list you are looking at, and tapping an icon row applies that palette in the shown style.

Classic has no themed (monochrome) version. Some launchers draw it on their own white backplate instead of showing the bare circle, which the app can't change.

Android 7 has no switch, since adaptive icons aren't supported there. Its old low-resolution fallback PNG icon files are also replaced with the same Classic vector, so the icon is sharp on every screen.