A CLI to merge your Spotify playlists.
| Name | User | Description | Link |
|---|---|---|---|
| Mike's Monthly Playlists | Mike H. Borthwick | A compilation of Mike's 100+ Monthly Playlists (Last Updated: Feb 2025). | Open on Spotify |
- Docker (recommended for running the auth proxy server)
export ARCH="darwin-arm64" # macOS (Apple Silicon)
# export ARCH="darwin-amd64" # macOS (Intel)
# export ARCH="linux-amd64" # Linux (x86_64)
curl -o mergify -L "https://github.com/mhborthwick/mergify/releases/latest/download/mergify-${ARCH}"
chmod +x mergify
sudo mv mergify /usr/local/bin/Usage: mergify <command> [flags]
Flags:
-h, --help Show context-sensitive help.
Commands:
create [flags]
Combines the tracks from the playlists in your CLI config into a new playlist
Run "mergify <command> --help" for more information on a command.flowchart TD
A["π ~/.mergify/config.json"] -->|Reads Config| B["π» Mergify CLI"]
B -->|Requests Token| C["π Auth Proxy Server"]
C -->|Creates Playlist| D["π΅ Spotify Web API"]
You will need to create a Spotify app to obtain your client ID and secret for authentication.
-
Visit the Spotify Developer Dashboard
-
Create a new Spotify app
-
In the app settings, add http://localhost:3000/callback to the
Redirect URIsfield
Clone this repo:
git clone git@github.com:mhborthwick/mergify.gitGo to the auth directory and create a .env file:
cd mergify/auth
touch .envAdd your client ID and secret to .env:
CLIENT_ID=<replace_with_your_client_id>
CLIENT_SECRET=<replace_with_your_client_secret>Now, start the auth proxy server using Docker Compose:
make auth-upAlternatively, run the following commands:
cd mergify/auth
docker compose upThe auth server runs at http://localhost:3000.
-
Open
http://localhost:3000in your browser. -
Click
Login with Spotify. -
Log in to your Spotify account and grant access, if prompted.
Add a ~/.mergify/config.json file:
touch ~/.mergify/config.jsonDefine the playlists that you want to merge as an array:
{ "playlists": [ "Playlist 1", "Playlist 2", "Playlist 3", "Playlist 4", "Playlist 5" // ... ] }