A boring Spotify CLI client
Project description
Spotidry
Summary
Spotidry is a real dry & boring command-line client for Spotify.
My main motivation for this project is to have a simple client that allows me to save the currently-playing song to my Liked Tracks. I also added play/pause/next/previous commands.
One of the best use cases for spotidry is to integrate it into a polybar/tmux/vim status line. You can also map some key-bindings or foot-pedals to send spotidry command.
Below, is a demo video showing some basic spotidry commands, along with a tmux integration.
Installation
It is recommended to install spotidry using uv:
uv tool install spotidry
Alternatively, you can install from PyPI:
pip install --user spotidry
spotidry --setup
Note: I have only tested spotidry on Linux.
Development
To set up a local development environment:
-
Clone the repository:
git clone https://github.com/mikeboiko/spotidry.git cd spotidry
-
Install the tool in editable mode:
uv tool install --editable .
-
Run type checking:
uv run basedpyright spotidry
Deployment
The deployment process to PyPI and GitHub Releases is automated via GitHub Actions.
Manual Steps
To trigger a new release:
- Update Changelog: Add release notes for the new version in
CHANGELOG.md. - Bump Version: Update the version number in
spotidry/__init__.py. - Commit & Push: Commit these changes and push to the
masterbranch.
Automated Steps
Once the tag is pushed, the GitHub Action will automatically:
- Build the package (
sdistandwheel). - Check the package metadata with
twine. - Create a GitHub Release with the built artifacts and auto-generated notes.
- Publish the package to PyPI.
Note: Ensure the
PYPI_API_TOKENsecret is set in the GitHub repository settings.
Setup
Spotify API
You will need to register your app at My Dashboard to get the credentials necessary to make authorized calls (a client id and client secret).
Select the Web API scope.
You can set your redirect URI to something like "http://127.0.0.1:9999"
Configuration
Configure your Spotify API variables in ~/.config/spotidry/spotidry.yaml
client_id: '<ID>'
client_secret: '<SECRET>'
redirect_uri: 'http://127.0.0.1:9999'
Tmux Integration
I'm using the popular .tmux config.
I have configured spotidry to update 1/s in ~/.tmux/.tmux.conf.local:
tmux_conf_theme_status_right='#(flock -n /tmp/spotidry.lock spotidry 2>/dev/null; sleep 1) #{prefix}#{pairing} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '
Polybar Integration
Add the following module to ~/.config/polybar/config.ini
[module/spotidry]
type = custom/script
exec = ~/.local/bin/spotidry
exec-if = test -f ~/.local/bin/spotidry
click-left = ~/.local/bin/spotidry --next 2> /dev/null
click-middle = ~/.local/bin/spotidry --save 2> /dev/null
click-right = ~/.local/bin/spotidry --play 2> /dev/null
interval = 1
Usage
The first time you run spotidry, you will be prompted to authorize the app in your browser.
Run spotidry --help to see all commands/options.
usage: spotidry [-h] [-v] [-s] [-p] [-n] [--previous]
Spotify CLI client
options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-s, --save toggle liked track status
-p, --play play/pause track
-n, --next play next track
--previous play previous track/skip to beggining of current track
Note, in order to re-authorize, delete ~/.cache/spotidry.yaml... Yes, I will provide a CLI flag for this eventually.
Roadmap
- Save currently playing song to Liked Tracks
- Add volume controls/status
- Add output string customization
- Add socks/https proxy option
Contributions
Contributions are always welcome!
Feel free to submit an issue or a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spotidry-0.0.7.tar.gz.
File metadata
- Download URL: spotidry-0.0.7.tar.gz
- Upload date:
- Size: 24.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62b814bba4e6a5b7df201fdceff21bf2702449205ec26dd8bac5915b2691d738
|
|
| MD5 |
910eb7fe31ab29a988a8b617cbed711e
|
|
| BLAKE2b-256 |
2a4ca3ca0de4af9e1712f44ec83dd2933f27c2ca9650c93e636773ecadfd4713
|
File details
Details for the file spotidry-0.0.7-py3-none-any.whl.
File metadata
- Download URL: spotidry-0.0.7-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7481dad07b9ec93d3492309a592d87873fa608b8abf71c40bbcd50219342dba2
|
|
| MD5 |
d916121adcf6bcb7a437015e8dd1933f
|
|
| BLAKE2b-256 |
b4f8924d6f2b79a7e91e6f9035b8230a12fad2d2800b855fd7b033410827f29a
|