The app allows to synchronize of playlists from one service to others.
- Spotify
- Yandex Music
- Node 24 (managed via
mise, seemise.toml)
Copy .env.example to .env and fill in the values.
| Variable | Required | Description |
|---|---|---|
SPOTIFY_CLIENT_ID / SPOTIFY_CLIENT_SECRET / SPOTIFY_REDIRECT_URI |
yes | Spotify OAuth app credentials (sync target). |
YANDEX_API_PROXY |
recommended | SOCKS5 proxy URL (e.g. socks5h://host:port) egressing from a RU/CIS box. api.music.yandex.net is geo-blocked elsewhere, so leaving this empty fetches directly and fails outside RU/CIS. |
YANDEX_API_BASE_URL |
no | Override the Yandex API base URL. Defaults to https://api.music.yandex.net. |
NOTIFY_URL |
no | tg-relay /send endpoint (e.g. https://relay.pkarpovich.space/send). When set, each sync run that has something to report (tracks added, a failed playlist, or an empty source) posts a Markdown status card; runs with nothing notable stay silent. Leave empty to disable notifications. |
NOTIFY_SECRET |
no | X-Secret header value sent with the notification POST. Only used when NOTIFY_URL is set. |
sync-config.json
{
"playlists": [
{
"type": "yandex",
"metadata": {
"id": "1004",
"userName": "flomaster-mc",
"name": "РЗТ Mainstream 2022"
},
"excludedTrackIds": [],
"targetPlaylists": [
{
"type": "spotify",
"metadata": {
"id": "5hawKrDsYBhjPKP88E8avR",
"name": "Spotify РЗТ Mainstream 2022"
}
}
]
}
]
}Build the app for production.
Run the app in production mode.
Run the app in development mode.
Run the unit test suite (node:test via tsx).