Skip to main content

No project description provided

Project description

Spotcrates

A set of tools for finding and managing music on Spotify

Code Coverage

Installation

Requirements

Spotcrates requires Python 10 or newer. You will also need a Spotify account.

Install from PyPI

pip install spotcrates

Configuration

Spotcrates will need, at minimum, credentials for accessing your Spotify account. You may also specify playlists to subscribe to, among other settings.

Initial Configuration File

Spotcrates can create an initial configuration file for itself. It will write to the specified configuration file location, i.e. what you configure with -c or --config_file. If you don't specify anything, Spotcrates will use a platform-specific configuration file location, e.g. /home/$USER/.config/spotcrates/spotcrates_config.toml on Linux. The output of spotcrates -h includes the default location for your configuration file.

spotcrates init-config

Spotify API Credentials

This bit is not terribly user-friendly as it's assumed that developers will be the ones creating these credentials. Since this app runs as a script on your own machine, you'll need to create your own credentials. You will need a Client ID and a Client Secret. The process is a little involved, and the Spotify docs on the subject are a bit opaque for the casual user (as I very recently was). These pages do a pretty good job describing the process:

Note that these projects are mainly interested in extracting data for their respective applications, so the instructions are geared to that end.

Once you have your client ID and client secret, paste them into your Spotcrates configuration file in the [spotify] section:

[spotify]
client_id = "(your ID here)"
client_secret = "(your secret here)"

Testing Your Credentials

Spotcrates will request and cache authorization info the first time you use your Spotify credentials. The cache location is platform-specific. On Linux, it's usually at /home/$USER/.cache/spotcrates/spotcrates_auth_cache.

To trigger this step, you can try listing your playlists:

spotcrates list-playlists

Spotcrates will initiate an authorization process with Spotify via your default browser. If the authorization succeeds, the browser tab will close itself, and your playlists will be listed on the command line.

Customizable Settings for Spotify

These settings can be changed from their defaults, though you won't usually need to do so. They are defined under the [spotify] config file heading.

  • auth_cache: The location of the Spotify authorization cache. This defaults to your platform's default cache location base, plus spotcrates/spotcrates_auth_cache.
  • auth_scopes: A list of authorization scopes that Spotcrates requests. The default scopes are ["playlist-modify-private", "playlist-read-private"].

Playlists

These settings control playlist-related commands like daily or randomize. They can be customized under the [playlists] heading in the configuration file.

  • daily_mix_target: The name of the playlist to target, which is created if it does not exist. Defaults to "Now."
  • daily_mix_prefix: The prefix of the "Daily Mix" playlists to be aggregated. Defaults to "Daily Mix."
  • daily_mix_excludes: The prefix of the playlists that contain tracks to exclude. Defaults to "Overplayed."

Subscriptions

These settings are for the subscriptions command. They can be configured under the [subscriptions] configuration file heading.

  • subscriptions_target: The name of the playlists where the new subscriptions will be appended. Created if the playlist does not exist. Defaults to NewSubscriptions.
  • max_age: The maximum age of a track in a playlist for it to be considered "new." Values can be English expressions like 2 weeks or 96 hours. Defaults to 3 days.
  • include_zero_timestamps: Whether to include tracks with an added_at of 1970-01-01T00:00:00Z. Some Spotify playlists do not set a useful added_at value. This flag includes those tracks despite their not passing the max_age test.

Subscription Playlists

These are the playlist groups used by subscriptions and related commands. All groups are included by default. The values are the "spotify IDs" listed in the list-playlists command. These playlist groups are configured under the [subscriptions.playlists] section of the configuration file.

[subscriptions.playlists]
# IRL ANGEL, Twin Peaks Vibes, Folk Fabrique,
# FADO PORTUGAL, While You Work
quiet = ["37i9dQZF1DX7Ocjwy96xTX", "38rrtWgflrw7grB37aMlsO", "37i9dQZF1DX62XscWX9t6h",
"67waO0NR8HTySxtB7wfMBZ", "6bUIofrj5PWNIeb67DbUqf"]
# Japanese Shoegaze, Modern Psychedelia, Adrenaline Coding
noisy = ["2uiYiQFpynkWCpIXcBGir9", "37i9dQZF1DX8gDIpdqp1XJ", "3JEvwuKbVKoggEA75gWqET"]
# State of Jazz, Jazz-Funk, Jazz Funk (Instrumental),
# Jazz Funk & Groove
jazz = ["37i9dQZF1DX7YCknf2jT6s", "37i9dQZF1DWUb0uBnlJuTi", "4xRrCdkn4r5lrDOElek5oC",
"2puFFdGTID0iJdQtjLvhal"]

Commands

The installation script puts the command spotcrates in your Python environment (e.g. /.pyenv/shims/spotcrates). The command spotcrates commands lists all of the commands available along with a short description of each.

Note that Spotcrates will accept the shortest unique command substring, so for example you can run spotcrates sub for the subscriptions command.

daily

spotcrates daily collects the contents of the "Daily Mix" playlists, filters them against an exclusion list ("Overplayed" by default), and adds them to the end of a target list ("Now" by default).

subscriptions

spotcrates subscriptions adds new tracks from configured playlists to the target playlist, filtering for excluded entries. Three days is the default maximum age for a track to be considered "new."

list-playlists

spotcrates list-playlists lists playlists' name, owner, track count, and description. The command accepts -f for filter expressions and -s for sort expressions. (TODO: add description of filter and search expressions and link to it here)

Search Patterns

The command list-playlists accepts search filters passed via the -f option. Multiple filter expressions are separated by commas.

Search Examples

spotcrates li -f jazz

List playlists where any field contains the string "jazz" (case-insensitive)

PLAYLIST NAME                    SIZE  ID                       OWNER            DESCRIPTION
Jazz Piano Classics              100   37i9dQZF1DX5q7wCXFrkHh   spotify          The classic piano recordings in Jazz. Cover: Oscar Peterson
Acid Jazz                        90    37i9dQZF1DWXHghfFFOaS6   spotify          Where hip-hop and soul meets jazz. Cover: Digable Planets
Jazz Funk                        6     61Q9DgzF3f1ULr3i1uRyUy   cmayes3          
Acid Jazz                        3     1h6rEPX9qRpBCBbjuAysMz   cmayes3          
General Jazz                     513   1j6ndSnyYn6oUlnwpGiRWc   cmayes3          
Jazz Funk (Instrumental)         272   4xRrCdkn4r5lrDOElek5oC   1226030890       
Instrumental Acid Jazz Mix       50    37i9dQZF1EIgnEnn8SKPjM   spotify          Instrumental Acid Jazz music picked just for you
State of Jazz                    100   37i9dQZF1DX7YCknf2jT6s   spotify          New jazz for open minds. Cover: Walter Smith III
Jazz-Funk                        200   37i9dQZF1DWUb0uBnlJuTi   spotify          Jazz. But funky. Cover: Takuya Kuroda
Jazz                             1     6VH2cw8n115fbQ7Ls2wzdR   cmayes3          
FaLaLaLaLa GREAT BIG Christmas V 4051  6A2Kj9cWUpuu0UcEbWVf5E   kingofjingaling  Over 170 hours of classic Christmas music. The focus is on classic Christma

spotcrates li -f o:spotify,n:rise

List playlists where the owner contains spotify and name contains rise.

PLAYLIST NAME                    SIZE  ID                       OWNER            DESCRIPTION
Rise                             230   37i9dQZF1DWUOhRIDwDB7M   spotify          Positive and uplifting ambient instrumental tracks.

spotcrates li -f n:ends:villains

List playlists where name ends with villains.

PLAYLIST NAME                    SIZE  ID                       OWNER            DESCRIPTION
classical music for villains     66    0zkl7eKzuUit1QRPVKtga2   225uye2hek5id23t 

Search Fields

The default search field is all.

  • spotify_id
  • playlist_name
  • size
  • owner
  • playlist_description
  • all: Search any/all of the above fields.

Search Types

The default search type is contains.

  • contains
  • equals
  • starts
  • ends
  • greater
  • less
  • greater_equal
  • less_equal

Sort Patterns

The command list-playlists accepts sort filters passed via the -s option. Multiple sort expressions are separated by commas.

Sort Examples

spotcrates li -f n:jazz -s name

Name contains jazz; sort by name ascending.

PLAYLIST NAME                    SIZE  ID                       OWNER            DESCRIPTION
Acid Jazz                        90    37i9dQZF1DWXHghfFFOaS6   spotify          Where hip-hop and soul meets jazz. Cover: Digable Planets
Acid Jazz                        3     1h6rEPX9qRpBCBbjuAysMz   cmayes3          
General Jazz                     513   1j6ndSnyYn6oUlnwpGiRWc   cmayes3          
Instrumental Acid Jazz Mix       50    37i9dQZF1EIgnEnn8SKPjM   spotify          Instrumental Acid Jazz music picked just for you
Jazz                             1     6VH2cw8n115fbQ7Ls2wzdR   cmayes3          
Jazz Funk                        6     61Q9DgzF3f1ULr3i1uRyUy   cmayes3          
Jazz Funk (Instrumental)         272   4xRrCdkn4r5lrDOElek5oC   1226030890       
Jazz Piano Classics              100   37i9dQZF1DX5q7wCXFrkHh   spotify          The classic piano recordings in Jazz. Cover: Oscar Peterson
Jazz-Funk                        200   37i9dQZF1DWUb0uBnlJuTi   spotify          Jazz. But funky. Cover: Takuya Kuroda
State of Jazz                    100   37i9dQZF1DX7YCknf2jT6s   spotify          New jazz for open minds. Cover: Walter Smith III

spotcrates li -f jazz,size:ge:100 -s size:desc

Any field contains jazz; size is greater than or equal to 100, sort by size descending.

PLAYLIST NAME                    SIZE  ID                       OWNER            DESCRIPTION
FaLaLaLaLa GREAT BIG Christmas V 4051  6A2Kj9cWUpuu0UcEbWVf5E   kingofjingaling  Over 170 hours of classic Christmas music. The focus is on classic Christma
General Jazz                     513   1j6ndSnyYn6oUlnwpGiRWc   cmayes3          
Jazz Funk (Instrumental)         272   4xRrCdkn4r5lrDOElek5oC   1226030890       
Jazz-Funk                        200   37i9dQZF1DWUb0uBnlJuTi   spotify          Jazz. But funky. Cover: Takuya Kuroda
Jazz Piano Classics              100   37i9dQZF1DX5q7wCXFrkHh   spotify          The classic piano recordings in Jazz. Cover: Oscar Peterson
State of Jazz                    100   37i9dQZF1DX7YCknf2jT6s   spotify          New jazz for open minds. Cover: Walter Smith III

Sort Types

The default sort type is ascending, i.e. a-z.

  • ascending
  • descending

randomize

spotcrates randomize (playlist1) (playlist2)... randomizes the playlists with the given names, IDs, or in the given collections.

copy

spotcrates copy (source) (dest) copies a playlist into a new playlist. You may optionally specify a destination playlist name; the default is to name the destination based on the source name with the general form f"{source_name}-{count:02d}".

commands

spotcrates commands displays a summary of the available commands.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spotcrates-0.7.2.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spotcrates-0.7.2-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file spotcrates-0.7.2.tar.gz.

File metadata

  • Download URL: spotcrates-0.7.2.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/6.9.3-76060903-generic

File hashes

Hashes for spotcrates-0.7.2.tar.gz
Algorithm Hash digest
SHA256 08e144631a303f470cd824510cb86fd0533ce999add4e6531ebd4e6e02e6ad83
MD5 ea42f81ba6cfcd41c02cd1a6998166cf
BLAKE2b-256 a52e2a9f0ff15c00dbbae813b3082c5cf7fa36cf32d399a1c747b9b841985e09

See more details on using hashes here.

File details

Details for the file spotcrates-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: spotcrates-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/6.9.3-76060903-generic

File hashes

Hashes for spotcrates-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 72a2cc4fbb2eabccfc0b89ed8c537fe0159f669776a3a7d0ece6b8a49ab7f296
MD5 43f873a03bd07ffe1393a894e9c3f47f
BLAKE2b-256 daa888ad206ea7234c7f687c787153f698de738925d1f00fd8431293508e1d58

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page