mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-04-27 03:53:10 -04:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
299cb025f1
|
|||
|
b737db93be
|
|||
|
953719e796
|
@@ -5,7 +5,7 @@
|
|||||||
[](https://github.com/SoPat712/allstarr/pkgs/container/allstarr)
|
[](https://github.com/SoPat712/allstarr/pkgs/container/allstarr)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
|
||||||
A media server proxy that integrates music streaming providers with your local library. Works with **Jellyfin** and **Subsonic-compatible** servers. When a song isn't in your local library, it gets fetched from your configured provider, downloaded, and served to your client. The downloaded song then lives in your library for next time.
|
A media server proxy that integrates music streaming providers with your local library. Works with **Jellyfin** servers. When a song isn't in your local library, it gets fetched from your configured provider, downloaded, and served to your client. The downloaded song then lives in your library for next time.
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
@@ -39,7 +39,6 @@ The proxy will be available at `http://localhost:5274`.
|
|||||||
Allstarr includes a web UI for easy configuration and playlist management, accessible at `http://localhost:5275`
|
Allstarr includes a web UI for easy configuration and playlist management, accessible at `http://localhost:5275`
|
||||||
<img width="1664" height="1101" alt="image" src="https://github.com/user-attachments/assets/9159100b-7e11-449e-8530-517d336d6bd2" />
|
<img width="1664" height="1101" alt="image" src="https://github.com/user-attachments/assets/9159100b-7e11-449e-8530-517d336d6bd2" />
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
- **Playlist Management**: Link Jellyfin playlists to Spotify playlists with just a few clicks
|
- **Playlist Management**: Link Jellyfin playlists to Spotify playlists with just a few clicks
|
||||||
@@ -76,7 +75,6 @@ The web UI updates your `.env` file directly. Changes persist across container r
|
|||||||
|
|
||||||
There's an environment variable to modify this.
|
There's an environment variable to modify this.
|
||||||
|
|
||||||
|
|
||||||
**Recommended workflow**: Use the `sp_dc` cookie method alongside the [Spotify Import Plugin](https://github.com/Viperinius/jellyfin-plugin-spotify-import?tab=readme-ov-file).
|
**Recommended workflow**: Use the `sp_dc` cookie method alongside the [Spotify Import Plugin](https://github.com/Viperinius/jellyfin-plugin-spotify-import?tab=readme-ov-file).
|
||||||
|
|
||||||
### Nginx Proxy Setup (Optional)
|
### Nginx Proxy Setup (Optional)
|
||||||
@@ -87,20 +85,20 @@ This service only exposes ports internally. You can use nginx to proxy to it, ho
|
|||||||
server {
|
server {
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
server_name your-domain.com;
|
server_name your-domain.com;
|
||||||
|
|
||||||
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
||||||
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
|
||||||
# Security headers
|
# Security headers
|
||||||
add_header Strict-Transport-Security "max-age=31536000" always;
|
add_header Strict-Transport-Security "max-age=31536000" always;
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
|
||||||
# Streaming settings
|
# Streaming settings
|
||||||
proxy_buffering off;
|
proxy_buffering off;
|
||||||
proxy_request_buffering off;
|
proxy_request_buffering off;
|
||||||
proxy_read_timeout 600s;
|
proxy_read_timeout 600s;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://allstarr:8080;
|
proxy_pass http://allstarr:8080;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
@@ -119,7 +117,7 @@ This project brings together all the music streaming providers into one unified
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Dual Backend Support**: Works with Jellyfin and Subsonic-compatible servers (Navidrome, Airsonic, etc.)
|
- **Dual Backend Support**: Works with Jellyfin
|
||||||
- **Multi-Provider Architecture**: Pluggable system for streaming providers (Deezer, Qobuz, SquidWTF)
|
- **Multi-Provider Architecture**: Pluggable system for streaming providers (Deezer, Qobuz, SquidWTF)
|
||||||
- **Transparent Proxy**: Sits between your music clients and media server
|
- **Transparent Proxy**: Sits between your music clients and media server
|
||||||
- **Automatic Search**: Searches streaming providers when songs aren't local
|
- **Automatic Search**: Searches streaming providers when songs aren't local
|
||||||
@@ -139,43 +137,21 @@ This project brings together all the music streaming providers into one unified
|
|||||||
## Supported Backends
|
## Supported Backends
|
||||||
|
|
||||||
### Jellyfin
|
### Jellyfin
|
||||||
|
|
||||||
[Jellyfin](https://jellyfin.org/) is a free and open-source media server. Allstarr connects via the Jellyfin API using your Jellyfin user login. (I plan to move this to api key if possible)
|
[Jellyfin](https://jellyfin.org/) is a free and open-source media server. Allstarr connects via the Jellyfin API using your Jellyfin user login. (I plan to move this to api key if possible)
|
||||||
|
|
||||||
**Compatible Jellyfin clients:**
|
**Compatible Jellyfin clients:**
|
||||||
|
|
||||||
- [Feishin](https://github.com/jeffvli/feishin) (Mac/Windows/Linux)
|
- [Feishin](https://github.com/jeffvli/feishin) (Mac/Windows/Linux)
|
||||||
<img width="1691" height="1128" alt="image" src="https://github.com/user-attachments/assets/c602f71c-c4dd-49a9-b533-1558e24a9f45" />
|
<img width="1691" height="1128" alt="image" src="https://github.com/user-attachments/assets/c602f71c-c4dd-49a9-b533-1558e24a9f45" />
|
||||||
|
|
||||||
|
|
||||||
- [Musiver](https://music.aqzscn.cn/en/) (Android/iOS/Windows/Android)
|
- [Musiver](https://music.aqzscn.cn/en/) (Android/iOS/Windows/Android)
|
||||||
<img width="523" height="1025" alt="image" src="https://github.com/user-attachments/assets/135e2721-5fd7-482f-bb06-b0736003cfe7" />
|
<img width="523" height="1025" alt="image" src="https://github.com/user-attachments/assets/135e2721-5fd7-482f-bb06-b0736003cfe7" />
|
||||||
|
|
||||||
|
|
||||||
- [Finamp](https://github.com/jmshrv/finamp) (Android/iOS)
|
- [Finamp](https://github.com/jmshrv/finamp) (Android/iOS)
|
||||||
|
|
||||||
- [Finer Player](https://monk-studio.com/finer) (iOS/iPadOS/macOS/tvOS)
|
- [Finer Player](https://monk-studio.com/finer) (iOS/iPadOS/macOS/tvOS)
|
||||||
|
|
||||||
_Working on getting more currently_
|
|
||||||
|
|
||||||
### Subsonic/Navidrome
|
|
||||||
[Navidrome](https://www.navidrome.org/) and other Subsonic-compatible servers are supported via the Subsonic API.
|
|
||||||
|
|
||||||
**Compatible Subsonic clients:**
|
|
||||||
|
|
||||||
#### PC
|
|
||||||
- [Aonsoku](https://github.com/victoralvesf/aonsoku)
|
|
||||||
- [Feishin](https://github.com/jeffvli/feishin)
|
|
||||||
- [Subplayer](https://github.com/peguerosdc/subplayer)
|
|
||||||
- [Aurial](https://github.com/shrimpza/aurial)
|
|
||||||
|
|
||||||
#### Android
|
|
||||||
- [Tempus](https://github.com/eddyizm/tempus)
|
|
||||||
- [Substreamer](https://substreamerapp.com/)
|
|
||||||
|
|
||||||
#### iOS
|
|
||||||
- [Narjo](https://www.reddit.com/r/NarjoApp/)
|
|
||||||
- [Arpeggi](https://www.reddit.com/r/arpeggiApp/)
|
|
||||||
|
|
||||||
> **Want to improve client compatibility?** Pull requests are welcome!
|
> **Want to improve client compatibility?** Pull requests are welcome!
|
||||||
|
|
||||||
### Incompatible Clients
|
### Incompatible Clients
|
||||||
@@ -198,13 +174,12 @@ Choose your preferred provider via the `MUSIC_SERVICE` environment variable. Add
|
|||||||
|
|
||||||
- A running media server:
|
- A running media server:
|
||||||
- **Jellyfin**: Any recent version with API access enabled
|
- **Jellyfin**: Any recent version with API access enabled
|
||||||
- **Subsonic**: Navidrome or other Subsonic-compatible server
|
|
||||||
- **Docker and Docker Compose** (recommended) - includes Redis and Spotify Lyrics API sidecars
|
- **Docker and Docker Compose** (recommended) - includes Redis and Spotify Lyrics API sidecars
|
||||||
- Redis is used for caching (search results, playlists, lyrics, etc.)
|
- Redis is used for caching (search results, playlists, lyrics, etc.)
|
||||||
- Spotify Lyrics API provides synchronized lyrics for Spotify tracks
|
- Spotify Lyrics API provides synchronized lyrics for Spotify tracks
|
||||||
- Credentials for at least one music provider (IF NOT USING SQUIDWTF):
|
- Credentials for at least one music provider (IF NOT USING SQUIDWTF):
|
||||||
- **Deezer**: ARL token from browser cookies
|
- **Deezer**: ARL token from browser cookies
|
||||||
- **Qobuz**: User ID + User Auth Token from browser localStorage ([see Wiki guide](https://github.com/V1ck3s/octo-fiesta/wiki/Getting-Qobuz-Credentials-(User-ID-&-Token)))
|
- **Qobuz**: User ID + User Auth Token from browser localStorage ([see Wiki guide](<https://github.com/V1ck3s/octo-fiesta/wiki/Getting-Qobuz-Credentials-(User-ID-&-Token)>))
|
||||||
- **OR** [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) for manual installation (requires separate Redis setup)
|
- **OR** [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) for manual installation (requires separate Redis setup)
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@@ -212,47 +187,39 @@ Choose your preferred provider via the `MUSIC_SERVICE` environment variable. Add
|
|||||||
### Environment Setup
|
### Environment Setup
|
||||||
|
|
||||||
1. **Create your environment file**
|
1. **Create your environment file**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Edit the `.env` file** with your configuration:
|
2. **Edit the `.env` file** with your configuration:
|
||||||
|
|
||||||
**For Jellyfin backend:**
|
**Server Settings:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Backend selection
|
# Backend selection
|
||||||
BACKEND_TYPE=Jellyfin
|
BACKEND_TYPE=Jellyfin
|
||||||
|
|
||||||
# Jellyfin server URL
|
# Jellyfin server URL
|
||||||
JELLYFIN_URL=http://localhost:8096
|
JELLYFIN_URL=http://localhost:8096
|
||||||
|
|
||||||
# API key (get from Jellyfin Dashboard > API Keys)
|
# API key (get from Jellyfin Dashboard > API Keys)
|
||||||
JELLYFIN_API_KEY=your-api-key-here
|
JELLYFIN_API_KEY=your-api-key-here
|
||||||
|
|
||||||
# User ID (from Jellyfin Dashboard > Users > click user > check URL)
|
# User ID (from Jellyfin Dashboard > Users > click user > check URL)
|
||||||
JELLYFIN_USER_ID=your-user-id-here
|
JELLYFIN_USER_ID=your-user-id-here
|
||||||
|
|
||||||
# Music library ID (optional, auto-detected if not set)
|
# Music library ID (optional, auto-detected if not set)
|
||||||
JELLYFIN_LIBRARY_ID=
|
JELLYFIN_LIBRARY_ID=
|
||||||
```
|
```
|
||||||
|
|
||||||
**For Subsonic/Navidrome backend:**
|
|
||||||
```bash
|
|
||||||
# Backend selection
|
|
||||||
BACKEND_TYPE=Subsonic
|
|
||||||
|
|
||||||
# Navidrome/Subsonic server URL
|
|
||||||
SUBSONIC_URL=http://localhost:4533
|
|
||||||
```
|
|
||||||
|
|
||||||
**Common settings (both backends):**
|
|
||||||
```bash
|
```bash
|
||||||
# Path where downloaded songs will be stored
|
# Path where downloaded songs will be stored
|
||||||
DOWNLOAD_PATH=./downloads
|
DOWNLOAD_PATH=./downloads
|
||||||
|
|
||||||
# Music service to use: SquidWTF, Deezer, or Qobuz
|
# Music service to use: SquidWTF, Deezer, or Qobuz
|
||||||
MUSIC_SERVICE=SquidWTF
|
MUSIC_SERVICE=SquidWTF
|
||||||
|
|
||||||
# Storage mode: Permanent or Cache
|
# Storage mode: Permanent or Cache
|
||||||
STORAGE_MODE=Permanent
|
STORAGE_MODE=Permanent
|
||||||
```
|
```
|
||||||
@@ -260,7 +227,7 @@ Choose your preferred provider via the `MUSIC_SERVICE` environment variable. Add
|
|||||||
See the full `.env.example` for all available options including Deezer/Qobuz credentials.
|
See the full `.env.example` for all available options including Deezer/Qobuz credentials.
|
||||||
|
|
||||||
3. **Configure your client**
|
3. **Configure your client**
|
||||||
|
|
||||||
Point your music client to `http://localhost:5274` instead of your media server directly.
|
Point your music client to `http://localhost:5274` instead of your media server directly.
|
||||||
|
|
||||||
> **Tip**: Make sure the `DOWNLOAD_PATH` points to a directory that your media server can scan, so downloaded songs appear in your library.
|
> **Tip**: Make sure the `DOWNLOAD_PATH` points to a directory that your media server can scan, so downloaded songs appear in your library.
|
||||||
@@ -272,21 +239,24 @@ For detailed configuration options, see [CONFIGURATION.md](CONFIGURATION.md).
|
|||||||
If you prefer to run Allstarr without Docker:
|
If you prefer to run Allstarr without Docker:
|
||||||
|
|
||||||
1. **Clone the repository**
|
1. **Clone the repository**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/SoPat712/allstarr.git
|
git clone https://github.com/SoPat712/allstarr.git
|
||||||
cd allstarr
|
cd allstarr
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Restore dependencies**
|
2. **Restore dependencies**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dotnet restore
|
dotnet restore
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Configure the application**
|
3. **Configure the application**
|
||||||
|
|
||||||
Edit `allstarr/appsettings.json`:
|
Edit `allstarr/appsettings.json`:
|
||||||
|
|
||||||
**For Jellyfin:**
|
**For Jellyfin:**
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"Backend": {
|
"Backend": {
|
||||||
@@ -303,33 +273,18 @@ If you prefer to run Allstarr without Docker:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**For Subsonic/Navidrome:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"Backend": {
|
|
||||||
"Type": "Subsonic"
|
|
||||||
},
|
|
||||||
"Subsonic": {
|
|
||||||
"Url": "http://localhost:4533",
|
|
||||||
"MusicService": "SquidWTF"
|
|
||||||
},
|
|
||||||
"Library": {
|
|
||||||
"DownloadPath": "./downloads"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **Run the server**
|
4. **Run the server**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd allstarr
|
cd allstarr
|
||||||
dotnet run
|
dotnet run
|
||||||
```
|
```
|
||||||
|
|
||||||
The proxy will start on `http://localhost:5274` by default.
|
The proxy will start on `http://localhost:5274` by default.
|
||||||
|
|
||||||
5. **Configure your client**
|
5. **Configure your client**
|
||||||
|
|
||||||
Point your music client to `http://localhost:5274` instead of your media server directly.
|
Point your music client to `http://localhost:5274` instead of your media server directly.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
@@ -341,7 +296,6 @@ If you prefer to run Allstarr without Docker:
|
|||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
|
||||||
- **Playlist Search**: Subsonic clients like Aonsoku filter playlists client-side from a cached `getPlaylists` call. Streaming provider playlists appear in global search (`search3`) but not in the Playlists tab filter.
|
|
||||||
- **Region Restrictions**: Some tracks may be unavailable depending on your region and provider.
|
- **Region Restrictions**: Some tracks may be unavailable depending on your region and provider.
|
||||||
- **Token Expiration**: Provider authentication tokens expire and need periodic refresh.
|
- **Token Expiration**: Provider authentication tokens expire and need periodic refresh.
|
||||||
|
|
||||||
@@ -356,7 +310,6 @@ GPL-3.0
|
|||||||
- [Jellyfin Spotify Import Plugin](https://github.com/Viperinius/jellyfin-plugin-spotify-import?tab=readme-ov-file) - The plugin that I **strongly** recommend using alongside this repo
|
- [Jellyfin Spotify Import Plugin](https://github.com/Viperinius/jellyfin-plugin-spotify-import?tab=readme-ov-file) - The plugin that I **strongly** recommend using alongside this repo
|
||||||
- [Jellyfin](https://jellyfin.org/) - The free and open-source media server
|
- [Jellyfin](https://jellyfin.org/) - The free and open-source media server
|
||||||
- [Navidrome](https://www.navidrome.org/) - The excellent self-hosted music server
|
- [Navidrome](https://www.navidrome.org/) - The excellent self-hosted music server
|
||||||
- [Subsonic API](http://www.subsonic.org/pages/api.jsp) - The API specification
|
|
||||||
- [Hi-Fi API](https://github.com/binimum/hifi-api) - These people do some great work, and you should thank them for this even existing!
|
- [Hi-Fi API](https://github.com/binimum/hifi-api) - These people do some great work, and you should thank them for this even existing!
|
||||||
- [Deezer](https://www.deezer.com/) - Music streaming service
|
- [Deezer](https://www.deezer.com/) - Music streaming service
|
||||||
- [Qobuz](https://www.qobuz.com/) - Hi-Res music streaming service
|
- [Qobuz](https://www.qobuz.com/) - Hi-Res music streaming service
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ public static class AppVersion
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Current application version.
|
/// Current application version.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string Version = "1.3.0";
|
public const string Version = "1.3.3";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user