Skip to main content

spicetify-websocket

PyPI Version GitHub License Read the Docs

An asynchronous Python wrapper and WebSocket server for controlling the Spotify desktop client via Spicetify and the spicetify-connect-api extension.

✨ Features

  • ⚡ Real-time Push Events: Instant updates for song changes, volume, seeking, ping heartbeats, and playback state.
  • 🎮 Full Playback Control: Play, pause, skip, seek, volume, repeat, shuffle, and ping latency checks.
  • 🔑 API Key Security: Optional token authorization for securing command execution and event streaming.
  • 🔒 Secure WebSockets (WSS): Built-in SSL/TLS support via ssl_context or certfile/keyfile.
  • 🛠️ Convenience Decorators: Easy event listening with syntax like @server.on_song_changed.
  • 🏷️ Fully Typed: Pydantic V2 models (TrackInfo, PlayerState, RepeatMode).
  • 🔄 Async & Non-blocking: Built on asyncio and websockets for maximum performance.

⚙️ Installation

Python 3.10 or higher is required.

pip install spicetify-websocket

📋 Prerequisites

To use this library, ensure you have:

  1. Spotify Desktop Client installed.
  2. Spicetify CLI installed and configured.
  3. The spicetify-connect-api extension enabled in Spicetify.

📚 Documentation & Guides

Explore the official documentation for detailed references and setup guides:

  • 📖 API Reference – Full documentation for SpotifyServer, models, decorators, and exceptions.
  • 💡 Code Examples – Runnable scripts for basic usage, API key auth, and WSS encryption.
  • 🛠️ Deployment Guides – Step-by-step guides for local WSS setups and production VPS deployment.

🚀 Example Usage

import asyncio
from spicetify import RepeatMode, SpotifyServer, TrackInfo


async def main():
    async with SpotifyServer() as server:

        # Events
        @server.on_song_changed
        def callback(track: TrackInfo):
            print("New song is playing:", track.title)
            print("Artist/s:", ", ".join(artist.name for artist in track.artists))

        # Wait until Spicetify client connects
        await server.wait_for_connection()

        # Playback State
        is_playing: bool = await server.get_is_playing()
        print("Is Spotify playing:", is_playing)

        # Playback Controls
        await server.play_url(url="https://open.spotify.com/intl-de/track/55pBIZO1cqoldeqpp5WR7H?si=57cde33a1bd34ac9")
        await server.set_volume(percent=75)
        await server.set_repeat(mode=RepeatMode.TRACK)

        # Keep the server running to receive events
        await asyncio.Event().wait()


if __name__ == "__main__":
    asyncio.run(main())

📻 Events Reference

Event Name Convenience Decorator Callback Payload Type Description
InitialState @server.on_initial_state PlayerState Fired immediately when Spicetify connects.
SongChanged @server.on_song_changed TrackInfo Fired when a new track starts playing.
PlayPauseChanged @server.on_play_pause_changed PlayerState Fired when playback state changes.
VolumeChanged @server.on_volume_changed float (0–100%) Fired when volume level changes.
RepeatChanged @server.on_repeat_changed RepeatMode Fired when repeat mode changes (OFF, CONTEXT, TRACK).
ShuffleChanged @server.on_shuffle_changed bool Fired when shuffle mode is toggled.
SeekChanged @server.on_seek_changed int (ms) Fired when timeline position is manually changed.
Ping @server.on_ping datetime (UTC) Fired on periodic heartbeat pings from Spicetify.

Metadata

Release files for spicetify-websocket 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spicetify-websocket 0.2.0
File Size Uploaded
spicetify_websocket-0.2.0.tar.gz 19.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spicetify-websocket 0.2.0
File Interpreter ABI Platform
spicetify_websocket-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.7 kB

Release files / spicetify_websocket-0.2.0.tar.gz

Download URL spicetify_websocket-0.2.0.tar.gz
Size 19.4 kB
Tags Source
SHA-256 checksum
How to use checksums
3440bfe7f32e3936adf70de624e029823fcea95e0eced122ff202bf64f3883e7
BLAKE2b-256 checksum
How to use checksums
4106ce2f835484813f78efa670820941cc61d4780f9cdfb191f2edd82655d667
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release files / spicetify_websocket-0.2.0-py3-none-any.whl

Download URL spicetify_websocket-0.2.0-py3-none-any.whl
Size 14.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d542e41c72119646eeac9eda291698e770ca9a2116abaa9aa01f2922a806361a
BLAKE2b-256 checksum
How to use checksums
3ecba8d746fba140ed32dbe7db4cf00bd1f42e941864ce44389466efa1ac70d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.1

2 release files

0.3.0

2 release files

This release

0.2.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page