Command-line tool to customize Spotify client. Supports Windows, MacOS, and Linux.
LGPL-2.1 License
Bot releases are hidden (Show)
Published by afonsojramos about 3 years ago
Install by running:
spicetify upgrade
Make sure you run this after upgrading:
spicetify restore backup apply
Published by afonsojramos about 3 years ago
Install by running:
spicetify upgrade
Make sure you run this after upgrading:
spicetify restore backup apply
Published by afonsojramos about 3 years ago
disable_sentry
hook, meaning it no longer needs to be disabled in the configInstall by running:
spicetify upgrade
Make sure you run this after upgrading:
spicetify restore backup apply
For example, my theme requires "placeholder.svg" file. To make it available to use, put it in assets
folder and make sure overwrite_assets
field in config file is on.
MINE
├───assets
│ └───placeholder.svg
├───colors.ini
└───user.css
In CSS, you can query them as if it's a local file:
.playlist {
background-image: url("./placeholder.svg");
}
Or Javacsript:
const svgContent = await fetch("placeholder.svg")
You can take advantage of this to replace stock assets, change some images files that you don't like how they look. If you just want add extra files, it's best practice to put your files in a deeper folder so you don't accidentally replace anything.
Make sure you run this after upgrading:
spicetify restore backup apply
Notes to Dribbblish theme users: Update the theme, there are some major changes.
Spicetify.Menu
and Spicetify.ContextMenu
:
Spicetify.ContextMenu.SubMenu
no longer has icon
parameter.If you had problem with home_config
in v2.3.0, they should be fixed now. After upgrade spicetify, please run:
spicetify restore backup apply
Spicetify.Locale
API: Get UI text using stock i18n.
Spicetify.Locale
. They should show up in your language now.Spicetify.Player.addEventListener
: re-add "appchange" event. Please revise global.d.ts for updated documentation.Please make sure you run:
spicetify restore backup apply
after upgrading spicetify to receive these new changes and fixes.
Bookmark extension: bookmark from context menu https://github.com/khanhas/spicetify-cli/issues/731
New Releases app: new configurations
Date locale
: Override date language and format. You should input a locale code if you want it to be in your language or a specific flavor of your language. https://github.com/khanhas/spicetify-cli/issues/712
Relative date
: Switch to relative date format, e.g.: "Today", "Yesterday", "2 Days ago", ...Spicetify.Topbar
API: Easier way for your extension to add a button in top bar. Check example usage in default extensions.
Re-add Bookmark extension: Store and access pages, play tracks or tracks in specific time. Useful for who wants to check out an artist, album later without following them or writing their names down. Tracks are context-awared, accessing or playing them will put it to context that it was bookmarked from.
Noisy background option for Lyrics Plus
spicetify-config.json
https://github.com/khanhas/spicetify-cli/issues/699
Previous release note (in case you missed it): https://github.com/khanhas/spicetify-cli/releases/tag/v2.2.4
spicetify-config.json
file in app folder. It contains current theme name, current color scheme name and all color schemes. https://github.com/khanhas/spicetify-cli/issues/624
const spiceConfig = await fetch("spicetify-config.json").then(a => a.json);
console.log(spiceConfig.theme_name, spiceConfig.scheme_name, spiceConfig.schemes);
Published by khanhas over 3 years ago
Patch fix for v1.1.59.714: CSS names should be normal now and other parts rely on translated CSS should work
Patch fix for v1.1.56: Mainly for Linux user which Spotify version is still stuck at v1.1.56. All spicetify functionalities should work now.
Upgrade spicetify, reinstall Spotify then run spicetify backup apply
.
Please close your Issue if this version fix your problem.
v2.1.0 release note: https://github.com/khanhas/spicetify-cli/releases/tag/v2.1.0
v2.2.1 release note: https://github.com/khanhas/spicetify-cli/releases/tag/v2.2.1
Please stop making new Issue about your theme for legacy Spotify doesn't work on new Spotify. I already mentioned it multiple times why it happened and there is nothing I can do about it.
"Patch" function: find and replace app assets for more flexible modification. Define regexp find string and replace string in [Patch]
section in config file. They should follow this form:
<file>_find_<index>
<file>_repl_<index>
or replace all key: <file>_repl_all_<index>
"file" can be any assets files in $spotify_location/Apps/xpui
folder
"index" should be unique for each pair of find and replace.
If both "repl" and "repl_all" are defined, "repl_all" is prioritized.
Capturing regexp group is also supported, you can specify group in replace string as ${0}
, ${1}
, ${2}
, ....
For example, "Your Library" button on sidebar leads to Playlists collection by default and I don't like like that. I want it to lead to my saved Albums page instead:
[Patch]
xpui.js_find_1 = to:"/collection"
xpui.js_repl_all_1 = to:"/collection/albums"
After I run spicetify apply
, all occurrences of to:"/collection"
would be changed to to:"/collection/albums"
. Which means "Your Library" page is no longer follow its default behaviours, that opens its first tab "Playlists". Instead, it starts at Albums tab. You can tweak it to lead to "/collection/artists"
or "/collection/podcasts"
if you prefer.
Previous release note: https://github.com/khanhas/spicetify-cli/releases/tag/v2.1.0
For example, this is one of color schemes of SpicetifyDefault with new colors names:
[pink-white]
; Pink on White background
text = 000000
subtext = 3D3D3D
main = FAFAFA
sidebar = FAFAFA
player = FAFAFA
card = ffd5d1
shadow = F0F0F0
selected-row = 404040
button = FE6F61
button-active = FE6F61
button-disabled = 535353
tab-active = e9e9e9
notification = FE6F61
notification-error = e22134
misc = BFBFBF
Moreover, CSS variables also have new form: --spice-<color key>
for hex color code and --spice-rgb-<color key>
for rrr,ggg,bbb format.
Example CSS using new color CSS variables:
.main-contextMenu-menu {
background-color: var(--spice-button);
color: var(--spice-subtext);
border-bottom: 1px rgba(var(--spice-rgb-selected-row), 0.5);
}
Note that these color keys above are base keys, it's essential for UI to display correctly. But you can always extends to as many colors key as you want in your color scheme sections. And CSS variables forms above are still applicable.
After you upgrade to this spicetify version, run spicetify restore backup
once.
Then run spicetify config custom_apps reddit
to add custom app "reddit" to config file
Finally, run spicetify apply
and enjoy.
Exposed Spicetify.React
and Spicetify.ReactDOM
are ready to use to create, render and mount react components.
Automatically remove Star Wars easter egg, it tracks key stroke and scan URIs too frequently.
fullAppDisplay.js
high GPU usage. Using canvas to draw background, blur transition is butter cutting smooth.Published by khanhas over 3 years ago
From v2.0, spicetify only supports new Spotify (v1.1.56 or later). Because of new design infrastructure, all themes made for legacy Spotify are incompatible and nothing I can do about it.
Elements and CSS class names are translated to readable and consistent form. You can start making new theme if you want to. Default theme "SpicetifyDefault" included in package consists of various color schemes, try them out and make your own.
Spicetify APIs are mostly compatible with previous version. Please revise existing extensions and global.d.ts
for updated documentation.
Default extensions include in package:
autoSkipExplicit.js
: Auto skip explicit tracks. Turn on in profile menu.
autoSkipVideo.js
: Auto skip videos
fullAppDisplay.js
: Full app artwork display. Access display mode via icon on top bar.
Right click while in display mode to open config menu. Double anywhere to close.
keyboardShortcut.js
: Add a few convenient keyboard shortcut and Vim navigation mode (hit F)
loopyLoop.js
: Loop over a portion of track. Right click at progress bar to open up menu.
NEW popupLyrics.js
: Picture-in-picture window displays lyrics.
Click at microphone icon on top bar to open the window. Right click at same icon to open config menu.
Turn off service that you're not comfortable to use or not available in your region. Swap their positions to priotise which service to try first.
shuffle+.js
: True shuffle with no bias.
Right click at playlist/album/artist/podcast and choose "Play with Shuffle+".
NEW You can turn on "Auto shuffle" to automatically play with shuffle+, no need to right click anymore. Just hit play button while browsing for playlists, albums, shows.
NEW By default, Shuffle+ plays artist's top 10 tracks. Turn on "Shuffle artist discography" to play their entire album discography.
trashbin.js
: Throw artists and tracks to trash bin and never hear them ever again (automatically skip).
Right click at artist or track and choose "Throw to Trashbin" in context menu. You can take them out of trash bin also via right click menu.
webnowplaying.js
: Specifically made for Rainmeter community. Send track metadata and control player.
Custom app: it's still possible to make and inject custom app with spicetify. But app has to built from ground up and app developer has to be familiar with React JS.
Previous version default app "reddit" and "genius-spicetify" are not possible to port over at the moment.
New config file name is "config-xpui.ini". Please run spicetify -c
to know where it is.
To install, please follow instructions in wiki
If you already had spicetify before, please run spicetify upgrade
.
Note: Windows user, please just use Powershell method. I don't have management over Choco and Scoop packages to update them right now.
Previous release note: v2.0.0
To install, please use the same install script but annotate version parameter:
Windows:
Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/khanhas/spicetify-cli/master/install.ps1" -OutFile $env:TEMP\install.ps1
Invoke-Expression "$env:TEMP\install.ps1 2.0.1"
Linux/MacOS:
curl -fsSL https://raw.githubusercontent.com/khanhas/spicetify-cli/master/install.sh -o /tmp/install.sh
sh /tmp/install.sh 2.0.1
Published by khanhas over 3 years ago
From v2.0.0, Spicetify solely works on XPUI interface only and is incompatible with legacy one. If you prefer legacy Spotify with fully themes, extensions, custom app support, please use Spicetify v1.2.1. This version is still experimental and there are a lot of work in progress:
Spicetify APIs are mostly implemented and are somewhat compatible with previous version. There are a few important changes you should know:
Spicetify.CosmosAPI
is replaced with Spicetify.CosmosAsync
. Please take a look at existing extensions and documentation in global.d.ts file to know how to use and modify your extensions accordingly.Spicetify.ContextMenu
is partly implemented, only Item
is usable.Spicetify.Menu
is not implemented.Spicetify.BridgeAPI
, Spicetify.LiveAPI
are deprecated.Spicetify.getAblumArtColors
is deprecated, please use Spicetify.colorExtractor
instead.Spicetify.PlaybackControl
has completely new functions set. They are straight forward, easier to use and requires less parameters. Please revise global.d.ts for its new documentation.New APIs:
Spicetify.Mousetrap
: Keyboard shortcut library. Documentation: https://craig.is/killing/mice
Spicetify.Platform
: Contains vast array of Spotify internal API, I don't have time to document them, please explore in devtool Console.Elements class names are translated to more readable forms, hopefully they are consistent across versions. You can start working on your theme. But I have to remind you that your theme from legacy Spotify will not be compatible, hence you have to build new one from ground up.
Default extensions are partly working. Not working ones are temporarily removed, they are probably added later if I have time to update them.
Reddit app is removed. I haven't found a replacement for custom apps since new Spotify does not rely on iframe anymore.
New config file should locate at same place as your previous config file but its name now is config-xpui.ini
To install, please use the same install script but annotate version parameter:
Windows:
Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/khanhas/spicetify-cli/master/install.ps1" -OutFile $env:TEMP\install.ps1
Invoke-Expression "$env:TEMP\install.ps1 2.0.0"
Linux/MacOS:
curl -fsSL https://raw.githubusercontent.com/khanhas/spicetify-cli/master/install.sh -o /tmp/install.sh
sh /tmp/install.sh 2.0.0
FullAppDisplay extension: Options to display album title, icons (thanks @JulienMaille), show all artists (@OlegWock) and switch to full screen mode (thanks @diegodalbosco).
Full screen mode can be activate with hotkey F11 (thanks @mendelsimon).
NewReleases extension: Options to show podcast only and ignore all new release (thanks @yougotwill).
Shuffle+ extension: Support for nested folders (thanks @iurimateus).
Huge improvement on Vim mode of KeyboardShortcut extensions: Keystroke popups is positioned correctly, play buttons in album pages are now recognised (they used to be hidden and therefore unrecognized by the extension).
New extension LoopyLoop: File name: loopyLoop.js
Provide ability to mark start and end points on progress bar and automatically loop over that track's portion.
To install, run:
spicetify config extensions loopyLoop.js
spicetify apply
FullAppDisplay: Undefined artist bug (thanks @kion).
FullAppDisplay: Wrong song duration after skipping (thanks @LambArchie).
NewRelease: Fix issue when podacast wasn't marked as listened (thanks @OlegWock).
Clean up redundant code (thanks @bakesnake).
Automatically recognize new Windows Store Spotify location.
Stop color
command proceeding when there is no theme configured.
Ignore fatal error from fetching new spicetify-cli release and proceed.
upgrade
: automatically fetch and upgrade spicetify to latest release.check_spicetify_upgrade
: notify user whenever there is new spicetify release.spicetify config check_spicetify_upgrade 1
to turn on.XDG_CONFIG_HOME
support for MacOSbookmark.js
: Now store track context. When user open track link, they will be navigated to playlist/album context that track was played from. #233newRelease.js
: Now show release type (Album/EP/Single/Episode) #247Command backup
and apply
now work slightly faster thanks to goroutine implementation.