cli

Command-line tool to customize Spotify client. Supports Windows, MacOS, and Linux.

LGPL-2.1 License

Downloads
640
Stars
17.5K
Committers
102

Bot releases are hidden (Show)

cli - v2.6.2

Published by afonsojramos about 3 years ago

Adds

  • Configurable blur size to popup lyrics (Thanks @ZT2wo)
  • Minor version tag support for CSS mappings (Thanks @itsmeow)
  • CSS Mappings (Thanks @TheGeeKing)

Instructions

Install by running:

spicetify upgrade

Make sure you run this after upgrading:

spicetify restore backup apply
cli - v2.6.1

Published by afonsojramos about 3 years ago

Fixes

  • Updated CSS Map

Instructions

Install by running:

spicetify upgrade

Make sure you run this after upgrading:

spicetify restore backup apply
cli - v2.6.0

Published by afonsojramos about 3 years ago

Fixes:

  • Spicetify.ReactComponent.ContextMenu hook
  • Spicetify.ReactComponent.RightClickMenu hook
  • Spicetify.ReactComponent.Menu hook
  • Spicetify.React hook
  • Spicetify.Platform hook
  • Removes disable_sentry hook, meaning it no longer needs to be disabled in the config
  • App React symbol injection
  • Spicetify.Player.getProgress() and getProgressPercent() functions

Instructions

Install by running:

spicetify upgrade

Make sure you run this after upgrading:

spicetify restore backup apply
cli -

Published by khanhas over 3 years ago

Change

  • Custom assets location: in previous version, Spotify allowed us to put assets some extra files supporting theme in "glue-resources" folder and access them via url "https://local_resources_host/". From v1.1.62, the feature was taken away so this location change is to reflect that. Custom assets are now placed in "xpui" and can be accessed directly.

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.

Fix

  • Missing login page
  • home_config and sidebar_config should definitely work stably now. Try them out if you haven't.

Make sure you run this after upgrading:

spicetify restore backup apply

Notes to Dribbblish theme users: Update the theme, there are some major changes.

cli -

Published by khanhas over 3 years ago

Fix

  • new-releases: Relative date doesn't save
  • fullAppDisplay: append to body directly instead of video container
  • popupLyrics: script path for worker
  • "appchange" event for Home page
  • sidebar_config: Items overlap with scrollbar

Change

  • Some colors and CSS tunes for SpicetifyDefault theme.
  • Refactor Spicetify.Menu and Spicetify.ContextMenu:
    • Spicetify.ContextMenu.SubMenu no longer has icon parameter.
    • Note for extension makers: All of public interfaces are still the same, some extra method are added. But if you are using internal members, there are some changes internally so you might want to double check.

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
cli -

Published by khanhas over 3 years ago

Add

  • Additional option "sidebar_config": Enable ability to arrange and hide items on sidebar.
    • Turn on "Sidebar config" mode in Profile menu (top right button with your username), then hover on sidebar items (not playlists) to show customization buttons.
    • There are 3 regions: Stick, Normal and Hidden. Items in Stick region would stay up top and on top all the time. Items in Normal region would scroll when you scroll on the sidebar.
    • Remember to turn off "Sidebar config" mode after you finish customizing.

image

  • Additional option "home_config": Enable ability to arrange sections in Home page.
    • Navigate to Home page, turn on "Home config" mode in Profile menu, then hover on sections to show customization buttons.
    • There are 3 regions: Stick, Normal and Lowered. Items in Stick region would stay up top and can be re-arrange. It's useful for some sections you particular like but Spotify somehow put them way too far down. Item in Normal region would stay as they are originally and can't be re-arranged. Items in Lowered region would be pushed to bottom. Put sections you don't like in there.
    • Some sections are always available in Home page. Some sections are more situational and dynamic (e.g: Christmas, genres, ...), their availabilities depend on when Spotify wants them to promote to you. And I have no control over that, so don't report bug when one of your sticky sections disappears.

image

  • Spicetify.Locale API: Get UI text using stock i18n.
    • Custom apps names and a few UI text in custom apps are also applied Spicetify.Locale. They should show up in your language now.

Fix

  • Patch fix for v1.1.62
  • Lyrics Plus app: add Genius new page layout parser.
cli -

Published by khanhas over 3 years ago

Change

  • Reddit app: display posts as soon as possible, instead of waiting until all post are fetched. Useful for users who live in country with garbage internet like Australia.
  • Lyrics Plus app: scroll to top when track changes (in unsynced and genius mode).
  • Reddit, Lyrics Plus, New Releases app: Move config menu button into Profile menu (top right button with your username).
  • Reddit, Lyrics Plus app: top bar items and sort popup menu should look like native popup menu now.
  • Spicetify.Player.addEventListener: re-add "appchange" event. Please revise global.d.ts for updated documentation.

Fix

  • Lyrics Plus app: colorful background bug
  • Lyrics Plus app: Genius alternative format causes repeated annotation bug
  • Bookmark ext: add bookmark playlist from context menu and bookmark bug from context menu in friends sidebar
  • Shuffle+ ext: multiple track selections shuffle

Please make sure you run:

spicetify restore backup apply

after upgrading spicetify to receive these new changes and fixes.

cli -

Published by khanhas over 3 years ago

Add

Change

Fix

cli -

Published by khanhas over 3 years ago

Add

  • 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.
    image

  • Noisy background option for Lyrics Plus

Fix

Previous release note (in case you missed it): https://github.com/khanhas/spicetify-cli/releases/tag/v2.2.4

cli -

Published by khanhas over 3 years ago

Add

  • New custom app New Releases: Aggregate all fresh releases from your followed artists and podcasts. Release types filter, time range are customizable via Settings menu. Remember to hit Refresh after configuring.
    image
  • Lyrics Plus:
    • Settings menu: You can customize colors, swap providers priority and input Musximatch token now.
    • Version selector for Genius mode: If there are multiple versions or translations found, just select from drop down menu and it will switch to chosen version.
      image
  • Reddit, New Releases apps' cards can be right clicked to open their context menus now
  • Generate 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);

Fix

Improvement

  • Shuffle+ fetch playlist, library way faster by using protobuf request.
  • Spicetify.PopupModal can mount a React element as now (check New Release and Lyrics Plus "Settings.js" for example usage)
cli - Patch fix for v1.1.59.714; New Custom app

Published by khanhas over 3 years ago

Fix

  • 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.

Add

cli -

Published by khanhas over 3 years ago

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.

Fix

  • CSS variables for some extensions and reddit app

Add

"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:

  • Regexp find key: <file>_find_<index>
  • Replace key: <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.

cli -

Published by khanhas over 3 years ago

Previous release note: https://github.com/khanhas/spicetify-cli/releases/tag/v2.1.0

Change

  • Colors names from spicetify v1 are no longer relevant and somewhat misleading to new theme makers. Since themes designed for legacy Spotify are not possible to port over, backward compatibility is out of the table. I decided to completely change them to more accurate and shorter names.

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.

Add

  • Custom app Reddit: Fetch and display shared playlists/albums/tracks from subreddits. Posts can be accessed and play immediately via play button. Unfortunately, context menu is not yet implemented.
    You can add, remove and arrange subreddits in config menu (pen icon button). Sorting options are also available on the right of app header.

image

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.

Fix

  • Search input visibility
  • fullAppDisplay.js high GPU usage. Using canvas to draw background, blur transition is butter cutting smooth.
  • Some RTL rule removals
cli - spicetify v2 official release

Published by khanhas over 3 years ago

Release note

Spotify version 1.1.59 recently is rolled out for all users and it not longer contains legacy apps assets. If your Spotify is automatically upgraded and you wish to continue using legacy interface, downgrade using installer from third party source, then turn off auto-update. And you can continue to use spicetify v1.2.1 with community theme, extensions and custom apps support.

  • 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.
    image

  • 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.
      image

    • 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.
      image

    • 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.
      image

    • 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.

cli -

Published by khanhas over 3 years ago

Fix

  • webnowplaying.js: Fix misspelt API name
  • popupLyrics.js credit

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
cli - Initial support for XPUI

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
cli -

Published by khanhas over 3 years ago

Fix

  • Lyrics app bug

Add

  • Provide binary package for MacOS ARM-64 platform (M1 chip)
cli -

Published by khanhas over 3 years ago

Add:

  • 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.

image
To install, run:

spicetify config extensions loopyLoop.js
spicetify apply

Fix:

  • 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.

cli -

Published by khanhas about 4 years ago

Add:

  • Command upgrade: automatically fetch and upgrade spicetify to latest release.
  • Config setting check_spicetify_upgrade: notify user whenever there is new spicetify release.
    It's off by default so please run spicetify config check_spicetify_upgrade 1 to turn on.
  • XDG_CONFIG_HOME support for MacOS
  • Extension bookmark.js: Now store track context. When user open track link, they will be navigated to playlist/album context that track was played from. #233
  • Extension newRelease.js: Now show release type (Album/EP/Single/Episode) #247

Command backup and apply now work slightly faster thanks to goroutine implementation.

cli -

Published by khanhas over 4 years ago

Add:

  • API Spicetify.colorExtractor: More generic version of Spicetify.getAblumArtColor, it accepts all type of URI that have artwork (playlist, album, track, artist, show, ...)

Fix:

  • High CPU usage bug #231
  • #229