https://github.com/nbonamy/tidal_streamer
https://github.com/nbonamy/tidal_streamer
Last synced: 4 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/nbonamy/tidal_streamer
- Owner: nbonamy
- License: apache-2.0
- Created: 2023-03-18T23:06:53.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2025-02-23T18:51:18.000Z (4 months ago)
- Last Synced: 2025-06-04T06:14:23.253Z (29 days ago)
- Language: JavaScript
- Size: 416 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# tidal-streamer
A server that enables streaming TIDAL music to a TIDAL connect device without using TIDAL app. This can be useful for a [Vinyl Emulator](https://www.hackster.io/mark-hank/sonos-spotify-vinyl-emulator-3be63d) for instance.
## Setup
tidal-streamer relies on the `mdns` package which itself has some system depenencies. Please check the `mdns` [installation guide](https://www.npmjs.com/package/mdns) else the following command will fail. Once done you can install dependencies:
`npm install`
## Configuration
You need to specify a valid TIDAL API application `client_id` and `client_secret`. You can get those by creating an App on the [TIDAL Developer Portal](https://developer.tidal.com/). Once you have created it, rename`config.sample.yml` to `config.yml` and replace the `app` section with:
```
app:
client_id:
client_secret:
```You can now run the server. It will display a link you need to navigate to authorize it. After that you are all good: the server will display the port it is listening on so! Now it's time to build whatever app you have in mind such as an [Android TV app](https://github.com/nbonamy/tidal_streamer_tv)!
## API Endpoints
### User
| Path | Method | Parameters | Explanation |
|-------------------------------|--------|---------------------|--------------------------------------------------|
| `/user/feed` | GET | none | Get user feed |
| `/user/shortcuts` | GET | none | Get user shortcuts |
| `/user/artists` | GET | none | Get user artists |
| `/user/albums` | GET | none | Get user albums |
| `/user/playlists` | GET | none | Get user playlists |
| `/user/tracks` | GET | none | Get user tracks |
| `/user/mixes` | GET | none | Get user mixes |
| `/user/new/albums` | GET | none | Get new albums |
| `/user/new/tracks` | GET | None | Get new tracks |
| `/user/recent/albums` | GET | none | Get recent albums |
| `/user/recent/artists` | GET | none | Get recent artists |
| `/user/recommended/albums` | GET | none | Get recommended albums |### Metadata
| Path | Method | Parameters | Explanation |
|--------------------------------|--------|---------------------|--------------------------------------------------|
| `/info/album/:id` | GET | album id | Get album information |
| `/info/playlist/:id` | GET | album id | Get playlist information |
| `/info/artist/:id/albums` | GET | album id | Get artist's albums |
| `/info/artist/:id/singles` | GET | album id | Get artist's singles |
| `/info/artist/:id/compilations`| GET | album id | Get artist's compilations |
| `/info/artist/:id/toptracks` | GET | album id | Get artist's top tracks |
| `/info/artist/:id/radio` | GET | album id | Get artist's radio |
| `/info/artist/:id/similar` | GET | album id | Get similar artists |
| `/info/genres` | GET | none | Get genres |
| `/info/genre/:id/tracks` | GET | genre id | Get tracks of a genre |
| `/info/mix/:id/tracks` | GET | mix id | Get tracks of a mix |
| `/lyrics/:id` | GET | track id | Get track lyrics |
| `/search/artist` | GET | query | Search for artists |
| `/search/album` | GET | query | Search for albums |
| `/search/track` | GET | query | Search for tracks |
| `/search/track/digest` | GET | query | Search for tracks (digest) |### Streamer
| Path | Method | Parameters | Explanation |
|-------------------------------|--------|---------------------|--------------------------------------------------|
| `/list` | GET | none | List available devices |
| `/ping` | GET | none | Ping the server |
| `/status` | GET | none | Get status of a device |
| `/play/tracks` | POST | body, position | Play tracks |
| `/play/album/:id` | GET | id, position | Play an album |
| `/play/playlist/:id` | GET | id, position | Play a playlist |
| `/play/mix/:id` | GET | id, position | Play a mix |
| `/enqueue/:position` | POST | body, position | Enqueue tracks |
| `/dequeue/:position` | POST | position | Dequeue a track |
| `/reorderqueue/:from/:to` | POST | from, to | Reorder the queue |
| `/play` | POST | none | Play the current track |
| `/pause` | POST | none | Pause the current track |
| `/stop` | POST | none | Stop the current track |
| `/next` | POST | none | Play the next track |
| `/prev` | POST | none | Play the previous track |
| `/trackseek/:position` | POST | position | Seek to a specific track position |
| `/timeseek/:progress` | POST | progress | Seek to a specific time |
| `/volume/down` | POST | none | Decrease the volume |
| `/volume/up` | POST | none | Increase the volume |### Playlist
| Path | Method | Parameters | Explanation |
|-------------------------------|--------|---------------------|--------------------------------------------------|
| `/playlist/create` | POST | title, description | Create a playlist |
| `/playlist/add` | POST | playlistId, trackIds| Add tracks to a playlist |## Advanced
If you want the server to listen on specific ports, you can configure this in config.yml:
```
port: 8000
wsport: 8001
```If you have multiple TIDAL connect devices, you can specify which one to stream to by adding it's friendly name or IPv4 address in config.yml:
```
device: My TIDAL connect device
```## TODO
- N/A