Octo-Fiesta

Octo-Fiesta

Docker app from grtgbln's Repository

Overview

A Subsonic API proxy server that transparently integrates Deezer as a music source. When a song is not available in your local Navidrome library, it is automatically fetched from Deezer, downloaded, and served to your Subsonic-compatible client. The downloaded song is then added to your library, making it available locally for future listens.

Octo-Fiesta

A Subsonic API proxy server that transparently integrates multiple music streaming providers as sources. When a song is not available in your local Navidrome library, it is automatically fetched from your configured provider, downloaded, and served to your Subsonic-compatible client. The downloaded song is then added to your library, making it available locally for future listens.

Why "Octo-Fiesta"?

The name was randomly generated by GitHub when creating the repository. We found it amusing and somewhat fitting for a music application. After all, "fiesta" evokes a party atmosphere, which goes well with music streaming. So we kept it!

Features

  • Multi-Provider Architecture: Pluggable music service system supporting multiple streaming providers
  • Transparent Proxy: Acts as a middleware between Subsonic clients and your Navidrome server
  • Seamless Integration: Automatically searches and streams music from your configured provider when not available locally
  • Automatic Downloads: Songs are downloaded on-the-fly and cached for future use
  • External Playlist Support: Search, discover, and download playlists with automatic M3U generation
  • Hi-Res Audio Support: Up to 24-bit/192kHz FLAC quality
  • Full Metadata Embedding: Complete ID3 tags and embedded cover art
  • Synced Lyrics: Time-synced lyrics for external tracks via LRCLIB (OpenSubsonic getLyricsBySongId), shown on the very first listen and saved as .lrc sidecars for downloaded files
  • Organized Library: Downloads saved in clean Artist/Album/Track folder structure

Supported Music Providers

Provider Credentials Required Max Quality Playlist Support
SquidWTF No FLAC 24-bit No
Qobuz Yes FLAC 24-bit/192kHz Yes
Deezer Yes FLAC 16-bit Yes
Yandex Music Yes FLAC 16-bit Yes

See the Supported Music Providers wiki page for detailed information.

Compatible Clients

Platform Clients
Desktop Aonsoku, Feishin, Supersonic, Subplayer, Aurial
Android Navic, Tempus, Substreamer, Yuzic, Wavio
iOS Navic, Narjo, BeatsX, Yuzic

See the Compatible Clients wiki page for details and incompatible clients.

Quick Start

Requirements

  • A running Navidrome server (or other Subsonic-compatible server)
  • Docker and Docker Compose (recommended) or .NET 9.0 SDK

Docker Installation

# Clone the repository
git clone https://github.com/V1ck3s/octo-fiesta.git
cd octo-fiesta

# Configure
cp .env.example .env
nano .env  # Edit with your settings

# Start
docker-compose up -d

The proxy will be available at http://localhost:5274. Point your Subsonic client to this URL instead of your Navidrome server.

See the Installation wiki page for detailed instructions including manual installation.

Configuration

See the Configuration wiki page for all available settings.

Getting Credentials

Architecture

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  Subsonic       │────▶│   Octo-Fiesta    │────▶│   Navidrome     │
│  Client         │◀────│   (Proxy)        │◀────│   Server        │
│  (Aonsoku)      │     │                  │     │                 │
└─────────────────┘     └────────┬─────────┘     └─────────────────┘
                                 │
                                 ▼
                        ┌─────────────────┐
                        │ Music Providers │
                        │  - Deezer       │
                        │  - Qobuz        │
                        │  - SquidWTF     │
                        └─────────────────┘

Limitations

  • Playlist Search: Streaming provider playlists appear in global search but may not show in the Playlists tab due to client-side filtering.
  • Playlist Display: Due to Subsonic API limitations, playlists appear at the end of the album list with a music note icon. See Playlists for details.
  • Token Expiration: Provider authentication tokens expire and need periodic refresh.

Documentation

Full documentation is available in the Wiki:

Need help? Please check the Wiki before opening an issue.

Contributing

Contributions are welcome! See the Development & Contributing guide.

# Build
dotnet build

# Run tests
dotnet test

License

GPL-3.0

Acknowledgments

Install Octo-Fiesta on Unraid in a few clicks.

Find Octo-Fiesta in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Octo-Fiesta Review the template variables and paths Click Install

Requirements


        Requires a Deezer account and a separate Subsonic-compatible server.
    

Details

Repository
ghcr.io/v1ck3s/octo-fiesta:latest
Last Updated2026-07-17
First Seen2026-01-03

Runtime arguments

Web UI
http://[IP]:[PORT:8080]/
Network
bridge
Privileged
false

Template configuration

Web UI PortPorttcp

Container Port: 8080

Target
8080
Default
5274
Value
5274
Subsonic - ServiceVariable

The Subsonic-compatible music service to use (e.g. Deezer, Qobuz, SquidWTF)

Target
Subsonic__MusicService
Default
SquidWTF
Value
SquidWTF
Subsonic - URLVariable

The URL of your Subsonic server

Target
Subsonic__Url
Default
http://IP_ADDRESS:4533
Value
http://IP_ADDRESS:4533
Subsonic - Admin UsernameVariable

Admin username to perform actions on Navidrome server that require admin permissions

Target
SUBSONIC_ADMIN_USERNAME
Subsonic - Admin PasswordVariable

Admin password to perform actions on Navidrome server that require admin permissions

Target
SUBSONIC_ADMIN_PASSWORD
Subsonic - Download ModeVariable

Determines whether to download individual tracks or entire albums when a track is requested.

Target
Subsonic__DownloadMode
Default
Track|Album
Explicit FilterVariable

Filter songs based on explicit content.

Target
Subsonic__ExplicitFilter
Default
All|ExplicitOnly|CleanOnly
Auto-UpgradeVariable

Re-download tracks when higher quality is available

Target
Subsonic__AutoUpgradeQuality
Default
false|true
Folder TemplateVariable

Folder template for organizing downloaded files.

Target
Subsonic__FolderTemplate
Default
{artist}/{album}/{track} - {title}}
Value
{artist}/{album}/{track} - {title}}
Deezer - ARL TokenVariable

Your Deezer ARL token for accessing Deezer content

Target
Deezer__Arl
Deezer - ARL Token FallbackVariable

Fallback Deezer ARL token if the primary one fails

Target
Deezer__ArlFallback
Deezer - QualityVariable

Preferred audio quality for Deezer downloads. Remove to default to highest.

Target
Deezer__Quality
Default
FLAC|MP3_320|MP3_128
Qobuz - User Auth TokenVariable

Your Qobuz user authentication token for accessing Qobuz content

Target
Qobuz__UserAuthToken
Qobuz - User IDVariable

Your Qobuz user ID

Target
Qobuz__UserId
Qobuz - QualityVariable

Preferred audio quality for Qobuz downloads (e.g. FLAC, FLAC_24_HIGH, FLAC_24_LOW, FLAC_16, MP3_320)

Target
Qobuz__Quality
SquidWTF - SourceVariable

The backend source to use for SquidWTF downloads

Target
SquidWTF__Source
Default
Qobuz|Tidal|AmazonMusic
SquidWTF - QualityVariable

Preferred audio quality for SquidWTF downloads. Qobuz: 27 (FLAC 24-bit), 7 (FLAC 16-bit), 6 (MP3 320), 5 (MP3 128). Tidal: HI_RES_LOSSLESS, LOSSLESS. AmazonMusic: FLAC_24 (24-bit), FLAC_16 (16-bit), AAC (256kbps), OPUS, ATMOS

Target
SquidWTF__Quality
SquidWTF - TimeoutVariable

Number of seconds to wait for a response from the SquidWTF instance before timing out.

Target
SquidWTF__InstanceTimeoutSeconds
Default
5
Value
5
Yandex - OAuth TokenVariable

OAuth token for API access.

Target
Yandex__OAuthToken
Yandex - QualityVariable

Preferred audio quality for Yandex downloads.

Target
Yandex__Quality
Default
FLAC|AAC_64|MP3_192|AAC_192|AAC_256|MP3_320
Yandex - LanguageVariable

Language for the API responses. Curated playlists and some album titles will be translated into that language.

Target
Yandex__Language
Default
ru
Value
ru
Yandex - Include Unavailable TracksVariable

Allow show tracks in search results, playlists and albums that are marked unavailable for listening

Target
IncludeUnavilable
Default
false|true
Playlist SupportVariable

When enabled, allows searching and downloading playlists. Starring a playlist triggers automatic download of all tracks and creates an M3U file

Target
Subsonic__EnableExternalPlaylists
Default
true|false
Downloads PathPath

Path to store downloaded files

Target
/app/downloads
Default
/mnt/user/appdata/octo_fiesta/downloads
Value
/mnt/user/appdata/octo_fiesta/downloads
Playlists FolderVariable

M3U playlist files will be created in {DOWNLOAD_PATH}/{PLAYLISTS_DIRECTORY}/

Target
Subsonic__PlaylistsDirectory
Default
playlists
Value
playlists
Internal Downloads PathVariable

Internal path to downloaded files. Not recommended to change.

Target
Library__DownloadPath
Default
/app/downloads
Value
/app/downloads
App EnvironmentVariable

Set the ASP.NET Core environment. Not recommended to change.

Target
ASPNETCORE_ENVIRONMENT
Default
Production
Value
Production
Storage ModeVariable

Set the storage mode for downloaded files.

Target
Subsonic__StorageMode
Default
Permanent|Temporary
Value
Permanent
Cache Duration (Hours)Variable

Duration in hours to cache files if using Temporary storage mode.

Target
Subsonic__CacheDurationHours
Default
1
Value
1
Internal PortVariable

Internal port. Not recommended to change.

Target
INTERNAL_PORT
Default
8080
Value
8080