10 Commits
Author SHA1 Message Date
amd64fox 2a179d3cf0 version bump to 1.2.96
enable the redesigned context menu, canvas toggle, and video shelf previews
2026-08-08 14:03:04 +03:00
amd64fox c2cc808ef6 fix(block_slots): prepare semantic patching for Spotify 1.2.96
- resolve slot enums from mapper control flow instead of field offsets
- allow short or exact versions in the validation workflow
2026-08-08 00:09:42 +03:00
amd64fox 50bc5a6526 version bump to 1.2.95 2026-07-25 02:13:21 +03:00
amd64foxandthynome 3d1ddd6850 fix(binary): handle BinaryScanner failures
#878

Co-authored-by: thynome <125388433+thynomex@users.noreply.github.com>
2026-07-14 22:58:38 +03:00
amd64fox afb4c3fcd1 Add exclusions to Microsoft Defender
- Add exclusions to Microsoft Defender to prevent false positives
2026-07-11 20:50:11 +03:00
amd64foxandGitHub e22aba4ed4 version bump to 1.2.94 2026-07-11 16:37:12 +03:00
amd64fox 9eafb084c6 testing the new patch for slots in version 1.2.94
#876
2026-07-11 15:50:34 +03:00
amd64fox 550bc72cd1 feat(binary): enable native crossfade patch
- enable crossfade_enabled in Spotify.dll for 1.2.89+ free users #866

- share pe scanning helpers between dll signature and feature patches
2026-07-07 01:40:11 +03:00
amd64fox 981411947b corrected version 2026-07-02 00:46:46 +03:00
amd64fox 837d5d2471 version bump to 1.2.93 2026-07-02 00:45:00 +03:00
36 changed files with 1694 additions and 126 deletions
+22 -7
View File
@@ -1,38 +1,53 @@
name: Check Spotx for the latest Spotify
run-name: Check SpotX for Spotify ${{ inputs.version || 'latest' }}
on:
workflow_dispatch:
inputs:
version:
description: Spotify version like 1.2.95 or 1.2.95.453, empty means latest
required: false
default: ''
type: string
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Spotx
shell: powershell
env:
SPOTIFY_VERSION: ${{ inputs.version }}
run: |
$spotifyVersion = ([string]$env:SPOTIFY_VERSION).Trim()
if ([string]::IsNullOrWhiteSpace($spotifyVersion)) {
$jsonUrl = "https://raw.githubusercontent.com/LoaderSpot/table/refs/heads/main/table/versions.json"
$resp = Invoke-RestMethod -Uri $jsonUrl
# Use fullversion because installer names include architecture suffixes
# Use fullversion for the installer name
$latestEntry = $resp.PSObject.Properties | Select-Object -First 1
if (-not $latestEntry) {
throw "No Spotify versions found in $jsonUrl"
}
$spotifyFullVersion = $latestEntry.Value.fullversion
if ([string]::IsNullOrWhiteSpace($spotifyFullVersion) -or $spotifyFullVersion -notmatch '^\d+\.\d+\.\d+\.\d+\.g[0-9a-f]{8}$') {
$spotifyVersion = [string]$latestEntry.Value.fullversion
if ([string]::IsNullOrWhiteSpace($spotifyVersion) -or $spotifyVersion -notmatch '^\d+\.\d+\.\d+\.\d+\.g[0-9a-f]{8}$') {
throw "Invalid Spotify fullversion for $($latestEntry.Name)"
}
}
elseif ($spotifyVersion -notmatch '^\d+\.\d+\.\d+(?:\.\d+)?$') {
throw "Invalid Spotify version: $spotifyVersion"
}
Write-Host "Selected Spotify version: $spotifyVersion"
# Incoming parameters
$parameters = @{
Verbose = $true
new_theme = $true
version = $spotifyFullVersion
version = $spotifyVersion
confirm_spoti_recomended_over = $true
cache_limit = 1000
block_update_on = $true
+151 -15
View File
@@ -111,7 +111,7 @@
"native_description": "Enable music leavebehinds on eligible playlists for desktop",
"version": {
"fr": "1.2.10",
"to": ""
"to": "1.2.93"
}
},
"HptoLocationRefactor": {
@@ -417,7 +417,7 @@
"native_description": "Allow switching between the new Home Ads format and legacy HPTO format (as opposed to only showing the legacy HPTO format)",
"version": {
"fr": "1.2.34",
"to": ""
"to": "1.2.94"
}
},
"LimitedAdsLabelsOnPlaylistCards": {
@@ -512,7 +512,7 @@
"native_description": "Enables the Employee Flag to send to Sentry",
"version": {
"fr": "1.2.44",
"to": ""
"to": "1.2.93"
}
},
"HomeImpressions": {
@@ -557,7 +557,7 @@
"native_description": "Enable Canvas for ads",
"version": {
"fr": "1.2.52",
"to": ""
"to": "1.2.92"
}
},
"ConnectedStateObserver": {
@@ -656,7 +656,7 @@
"native_description": "Enable Hpto announcements on Home",
"version": {
"fr": "1.2.65",
"to": ""
"to": "1.2.94"
}
},
"SponsoredPlaylistV2": {
@@ -778,7 +778,7 @@
"name": "bypassApplyUpdateCheck",
"version": {
"fr": "1.2.84",
"to": ""
"to": "1.2.93"
}
},
"ad_feedback_in_stream": {
@@ -789,6 +789,30 @@
"to": ""
}
},
"ad_feedback_home_free": {
"name": "enable_ad_feedback_home_free",
"description": "Kill switch for ad feedback on home ad format for free users",
"version": {
"fr": "1.2.93",
"to": ""
}
},
"ad_feedback_home_premium": {
"name": "enable_ad_feedback_home_premium",
"description": "Kill switch for ad feedback on home ad format for premium users",
"version": {
"fr": "1.2.93",
"to": ""
}
},
"ad_feedback_milestone_3": {
"name": "enable_ad_feedback_milestone_3",
"description": "Enable ad feedback milestone 3 feature",
"version": {
"fr": "1.2.93",
"to": ""
}
},
"HarmonyMediaPlaybackReporting": {
"name": "enableHarmonyMediaPlaybackReporting",
"description": "Enable the reporting of media playback events in Harmony",
@@ -812,6 +836,62 @@
"fr": "1.2.92",
"to": ""
}
},
"EmbeddedAdHtmlDisplay": {
"name": "enableEmbeddedAdHtmlDisplay",
"description": "Enable HTML display ads in the embedded NPV",
"version": {
"fr": "1.2.94",
"to": ""
}
},
"ImageOptimizationSentrySpanMeasurement": {
"name": "enableImageOptimizationSentrySpanMeasurement",
"description": "Enable Sentry image resource span attributes for image optimization rollout measurement",
"version": {
"fr": "1.2.94",
"to": ""
}
},
"SentryReactRouterV6Routing": {
"name": "enableSentryReactRouterV6Routing",
"description": "Enable Sentry React Router v6 route instrumentation for Web Player SPA transactions",
"version": {
"fr": "1.2.94",
"to": ""
}
},
"SponsoredPlaylistHorizontalVideo": {
"name": "enableSponsoredPlaylistHorizontalVideo",
"description": "Enables horizontal video layout for sponsored playlist headers on desktop",
"version": {
"fr": "1.2.95",
"to": ""
}
},
"AdsSurfaceStateForAdOrchestration": {
"name": "useAdsSurfaceStateForAdOrchestration",
"description": "Use ads-owned NPV and cinema surface state for ad orchestration",
"version": {
"fr": "1.2.96",
"to": ""
}
},
"HptoHarmonyVideoPlayer": {
"name": "enableHptoHarmonyVideoPlayer",
"description": "Enable the Harmony-based video player for HPTO home video ads, replacing the Betamax player",
"version": {
"fr": "1.2.96",
"to": ""
}
},
"SidekickFeedbackBanner": {
"name": "enableSidekickFeedbackBanner",
"description": "Show the feedback banner in the Sidekick chat",
"version": {
"fr": "1.2.96",
"to": ""
}
}
},
"EnableExp": {
@@ -938,7 +1018,7 @@
"native_description": "Enable silence trimming in podcasts",
"version": {
"fr": "1.1.99",
"to": ""
"to": "1.2.93"
}
},
"PlaybackSpeedIncrements": {
@@ -1424,7 +1504,7 @@
"native_description": "Disable the Premium Only Modal",
"version": {
"fr": "1.2.39",
"to": ""
"to": "1.2.95"
}
},
"CenteredLayout": {
@@ -1640,7 +1720,7 @@
"native_description": "Enable reverse sort direction in Your Library",
"version": {
"fr": "1.2.60",
"to": ""
"to": "1.2.94"
}
},
"BackendSearchHistory": {
@@ -1886,7 +1966,7 @@
"native_description": "Enable BPM and key columns in playlist recommendations",
"version": {
"fr": "1.2.82",
"to": ""
"to": "1.2.94"
}
},
"ShareActionBarButton": {
@@ -1910,7 +1990,7 @@
"native_description": "Show video preference settings for users to control video playback types",
"version": {
"fr": "1.2.86",
"to": ""
"to": "1.2.95"
}
},
"VideoQualityEnabled": {
@@ -1952,6 +2032,62 @@
"fr": "1.2.90",
"to": ""
}
},
"crossfade_enabled": {
"name": "crossfade_enabled",
"native_description": "When true, shows the Crossfade toggle in Advanced Playback settings. When false, the setting is hidden.",
"version": {
"fr": "1.2.89",
"to": ""
}
},
"LeaderboardEmptySlotHandling": {
"name": "enableLeaderboardEmptySlotHandling",
"native_description": "Config for clearing the current leaderboard ad and hiding the leaderboard container when the ad slot returns an empty response",
"version": {
"fr": "1.2.94",
"to": ""
}
},
"EntityHeaderNew": {
"name": "enableEntityHeaderNew",
"native_description": "Enable the new entity header design",
"version": {
"fr": "1.2.95",
"to": ""
}
},
"ContextMenuLayoutV2": {
"name": "enableContextMenuLayoutV2",
"native_description": "Enables the Context Menu 2.0 layout",
"version": {
"fr": "1.2.96",
"to": ""
}
},
"CanvasContextMenuToggle": {
"name": "enableCanvasContextMenuToggle",
"native_description": "Enables the Canvas context menu toggle",
"version": {
"fr": "1.2.96",
"to": ""
}
},
"MusicVideos": {
"name": "enableMusicVideos",
"native_description": "Whether music videos are available for the current user. Override to true for supported products and markets",
"version": {
"fr": "1.2.96",
"to": ""
}
},
"VideoShelfPreviews": {
"name": "enableVideoShelfPreviews",
"native_description": "Enable video previews on hover in video shelf cards",
"version": {
"fr": "1.2.96",
"to": ""
}
}
},
"CustomExp": {
@@ -2052,7 +2188,7 @@
"value": "CONTROL",
"version": {
"fr": "1.2.31",
"to": ""
"to": "1.2.93"
}
},
"CanvasNpv": {
@@ -2179,7 +2315,7 @@
"block_slots": {
"version": {
"fr": "1.1.59",
"to": ""
"to": "1.2.93"
},
"add": "slot}(?=.{3,8}(override_url|queued_ads))",
"match": "slots(?=.{3,8}(override_url|queued_ads))",
@@ -2188,7 +2324,7 @@
"block_slots_2": {
"version": {
"fr": "1.2.55",
"to": ""
"to": "1.2.93"
},
"add": "slot}(?=.{25,35}state)",
"match": "slots(?=.{25,35}state)",
@@ -2197,7 +2333,7 @@
"block_slots_3": {
"version": {
"fr": "1.2.55",
"to": ""
"to": "1.2.93"
},
"add": "}(?=payload=)",
"match": "\\?(?=payload=)",
+1414 -96
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Сардэчна запрашаем у SpotX для Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
উইন্ড স্পটএক্স আপন স্বগতম
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Vítejte v SpotX pro Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Willkommen bei SpotX für Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Καλώς ήρθατε στο SpotX για Windows
+3
View File
@@ -36,6 +36,9 @@
Error = "Error"
FileLocBroken = "Location of Spotify files is broken, uninstall Spotify client and run the script again"
Spicetify = "Spicetify detected, it must be installed after SpotX, open recommended actions in FAQ ? [Y/N]"
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
NoRestore = "SpotX has already been installed, xpui.bak not found. `nPlease uninstall Spotify client and run Install.bat again"
InstallComplete = "installation completed"
HostInfo = "Unwanted URLs found in hosts file"
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Le damos la bienvenida a SpotX para Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Tervetuloa SpotX:n Windowsiin
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Maligayang pagdating sa SpotX para sa Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Bienvenue sur SpotX pour Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
SpotX for Windows में आपक स्वगत है
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Üdvözöllek a SpotX Windowsos telepítőjében
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Selamat datang di SpotX untuk Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Benvenuti a SpotX per Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
SpotX Windows用にようこそ
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Witamy w SpotX dla Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Bem-vindo ao SpotX para Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Bine ați venit la SpotX pentru Windows
+3
View File
@@ -36,6 +36,9 @@
Error = "Ошибка"
FileLocBroken = "Расположение файлов Spotify нарушено, удалите клиент Spotify и снова запустите скрипт"
Spicetify = "Обнаружен Spicetify, он должен быть установлен после SpotX, открыть рекомендуемые действия в FAQ ? [Y/N]"
DefenderPrompt = "Добавить исключения в Microsoft Defender для предотвращения ложных срабатываний? [Y/N]"
DefenderAdded = "Исключения добавлены в Microsoft Defender"
DefenderFailed = "Исключения не добавлены в Microsoft Defender"
NoRestore = "SpotX уже был установлен, но файл для восстановления xpui.bak не найден. `nУдалите клиент Spotify и снова запустите Install.bat"
InstallComplete = "Установка завершена"
HostInfo = "В файле hosts найдены нежелательные Url-адреса"
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Welcome to SpotX for Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Välkommen till SpotX för Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Windows SpotXக்க வரவற்கிம்
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Windows için SpotX'e Hoşgeldiniz
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Ласкаво просимо до SpotX для Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
Chào mừng đến với SpotX cho Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
歡迎使用 SpotX Windows
+3
View File
@@ -1,4 +1,7 @@
[PSCustomObject]@{
DefenderPrompt = "Add exclusions to Microsoft Defender to prevent false positives? [Y/N]"
DefenderAdded = "Exclusions added to Microsoft Defender"
DefenderFailed = "Microsoft Defender exclusions were not added"
Welcome = "
欢迎使用 SpotX Windows 版本