brainstate

GioF71/spotconnect-docker · source

Snapshot 0 · 2026-11-04T12:47:27Z · Shell · MIT

Content fingerprintbec505164d37b12f92ceea26d8d0b800f3a6c5114665bb8255bc0aea9f99f62c

GitHub description at capture

Easily run SpotConnect (both UPnP and AirPlay modes) with docker

README at capture

# spotconnect-docker

A docker image for [SpotConnect](https://github.com/philippe44/SpotConnect).  
This repository replaces the previous [airplay](https://github.com/GioF71/spotconnect-airplay-docker) and [upnp](https://github.com/GioF71/spotconnect-upnp-docker) separate variants of the project, which will be no longer updated.  
The latest images include version [0.20.11](https://github.com/philippe44/SpotConnect/releases/tag/0.20.11).  

## References

This is based on [this project](https://github.com/philippe44/SpotConnect) by [philippe44](https://github.com/philippe44).  
In UPnP mode (`SPOTCONNECT_MODE=upnp`), it will let you use your upnp renderers (including those created with [upmpdcli](https://github.com/GioF71/upmpdcli-docker) and [mpd](https://github.com/giof71/mpd-alsa-docker)) as Spotify Connect devices.  
In AirPlay mode (`SPOTCONNECT_MODE=raop`), it will let you use your AirPlay renderers as Spotify Connect devices, including those that you have created using [Shairport Sync](https://github.com/mikebrady/shairport-sync).  

## Links

REPOSITORY|DESCRIPTION
:---|:---
Source code|[GitHub](https://github.com/GioF71/spotconnect-docker)
Docker images|[Docker Hub](https://hub.docker.com/r/giof71/spotconnect)

## Build

Simply build using the following:

```text
docker build . -t giof71/spotconnect:latest
```

## Configuration

Configuration is available through a set of environment variables.  
There are currently just a few variables available to set, but more will come as soon as possible.  

VARIABLE|DESCRIPTION
:---|:---
PUID|Group used to run the application, defaults to `1000`
PGID|Group used to run the application, defaults to `1000`
PREFER_STATIC|Prefer `-static` version of the executable, defaults to `no`
VORBIS_BITRATE|Set the vorbis bitrate to `320`, `160` or `96`, defaults to `320`
STORE_CRED_XML|Set to `yes` to store credentials in the configuration file (`-j`), defaults to `no`
SPOTCONNECT_MODE|SpotConnect mode: `upnp` or `raop` (for AirPlay), defaults to `upnp`
OUTPUT_CODEC|Codec for the UPnP version, see [here](https://github.com/philippe44/SpotConnect?tab=readme-ov-file#upnp), possible values [here](#output-codec-values)
UPNP_HTTP_CONTENT_LENGTH_MODE|For UPnP mode only, see [here](https://github.com/philippe44/SpotConnect#http-content-length-and-transfer-modes), possible values [here](#http-content-length-modes-upnp-only)
UPNP_HTTP_CACHING_MODE|Caching mode for UPnP mode only, possible values [here](#http-caching-modes-upnp-only) 
APPLETV_PAIRING_MODE|Runs in Apple TV Pairing mode, see issue [#1](https://github.com/GioF71/spotconnect-docker/issues/1)
CONFIG_FILE_PREFIX|Prefix for the config file, empty by default
LOG_LEVEL_ALL|Enables log of type `all` using the provided value
LOG_LEVEL_MAIN|Enables log of type `main` using the provided value, possible values [here](#log-level-values)
LOG_LEVEL_UTIL|Enables log of type `util` using the provided value, possible values [here](#log-level-values)
LOG_LEVEL_UPNP|Enables log of type `upnp` using the provided value, possible values [here](#log-level-values)
LOG_LEVEL_RAOP|Enables log of type `raop` using the provided value, possible values [here](#log-level-values)
ENABLE_AUTO_NETWORK|Allows to automatically set NETWORK_SELECT, defaults to `yes`, but this does not override an explicitly set `NETWORK_SELECT` variable anyway
NETWORK_SELECT|Sets the network interface or ip and optionally port
AUTO_NETWORK_URL|Used for selecting the network to use, defaults to `1.1.1.1`
NETWORK_USE_IP|Use ip instead of network card for `-b`, defaults to `yes`

### HTTP Content length modes (UPnP only)

From the application's own help text:

```text
-g -3|-2|-1|0|<n> HTTP content-length mode (-3:chunked(*), -2:if known, -1:none, 0:fixed, <n> your value)
```

So the variable `UPNP_HTTP_CONTENT_LENGTH_MODE` can be set accordingly.

### HTTP Caching modes (UPnP only)

From the application's own help text:

```text
-A 0|1|2 HTTP caching mode (0=memory, 1=memory but claim it's infinite(*), 2=on disk)
```

So the variable `UPNP_HTTP_CACHING_MODE` can be set accordingly.

### Output Codec values

#### Output Codec values for UPnP

From the application's own help text:

```text
-c mp3[:<rate>]|opus[:<rate>]|vorbis[:rate]|flc[:0..9]|wav|pcm audio format send to player (flac)
```

So possible values include but are not limited to the following list: `flc`, `flc:5`, `wav`, `mp3`, `mp3:320`, etc.  

#### Output Codec values for AirPlay

From the application's own help text:

```text
-c <alac|pcm> audio format send to player (alac)
```

So possible values are `alac` and `pcm`.  

### Log Level Values

Please note that the possible values for the variables starting with `LOG_LEVEL_` are the following: `error`, `warn`, `info`, `debug`, `sdebug`.

## Generate a configuration file

You can generate a configuration file for the upnp version using the following command:

```text
docker run -it \
  --user 1000:1000 \
  --network host \
  --rm \
  -v ${PWD}:/config \
  --entrypoint /app/bin/spotupnp-linux \
  giof71/spotconnect \
  -i /config/spotconnect-upnp-new.xml
```

The option `--user 1000:1000` is needed if the current directory is owned by your user (use the correct uid/gid if they are not 1000 and 1000 respectively).  
This will result in a new file named `spotconnect-upnp-new.xml` in you current directory.  
Similarly the command for the airplay version is like the following:

```text
docker run -it \
  --user 1000:1000 \
  --network host \
  --rm \
  -v ${PWD}:/config \
  --entrypoint /app/bin/spotraop-linux \
  giof71/spotconnect \
  -i /config/spotconnect-airplay-new.xml
```

The resulting file will be of course named `spotconnect-airplay-new.xml`.  
You can then modify your configuration files to your needs and use them in the your compose file(s) by putting them in the `/config` volume.

## Run

Simple docker-compose files below.  

### UPnP Mode

```text
---
version: "3"

volumes:
  config:

services:
  spotconnect-upnp:
    image: giof71/spotconnect:latest
    container_name: spotconnect-upnp
    network_mode: host
    environment:
      - SPOTCONNECT_MODE=upnp
      - PUID=1000
      - PGID=1000
    volumes:
      - config:/config
    restart: unless-stopped
```

### AirPlay Mode

```text
---
version: "3"

volumes:
  config:

services:
  spotconnect-airplay:
    image: giof71/spotconnect:latest
    container_name: spotconnect-airplay
    network_mode: host
    environment:
      - SPOTCONNECT_MODE=raop
      - PUID=1000
      - PGID=1000
    volumes:
      - config:/config
    restart: unless-stopped
```

## Changelog

The changelog of the upstream project is available [here, on the upstream repo](https://github.com/philippe44/SpotConnect/blob/master/CHANGELOG).  

DATE|DESCRIPTION
:---|:---
2026-10-04|Bump to version [0.20.11](https://github.com/philippe44/SpotConnect/releases/tag/0.20.11)
2026-09-18|Bump to version [0.20.9](https://github.com/philippe44/SpotConnect/releases/tag/0.20.9)
2026-09-14|Bump to version [0.20.8](https://github.com/philippe44/SpotConnect/releases/tag/0.20.8)
2026-09-09|Bump to version [0.20.7](https://github.com/philippe44/SpotConnect/releases/tag/0.20.7)
2026-09-07|Bump to version [0.20.6](https://github.com/philippe44/SpotConnect/releases/tag/0.20.6)
2026-08-08|Bump to version [0.20.5](https://github.com/philippe44/SpotConnect/releases/tag/0.20.5)
2026-08-06|Bump to version [0.20.4](https://github.com/philippe44/SpotConnect/releases/tag/0.20.4)
2026-07-21|Bump to version [0.20.3](https://github.com/philippe44/SpotConnect/releases/tag/0.20.3)
2025-12-25|Bump to version [0.20.1](https://github.com/philippe44/SpotConnect/releases/tag/0.20.1)
2025-10-11|Build for arm/v5 instead of arm/v6
2025-10-11|Bump to version [0.10.1](https://github.com/philippe44/SpotConnect/releases/tag/0.10.1)
2024-09-11|Do not save credentials to xml file (`-j`) by default
2024-09-10|Add support for http caching mode (`-A`)
2024-09-10|Add support for http content length mode (`-g`)
2024-09-10|Add support for output codec (`-c`)
2024-03-11|Prefer ip over iface for the select network interface
2024-03-09|Auto select network interface (see [#3](https://github.com/GioF71/spotconnect-docker/issues/3))
2024-03-06|Bump to version [0.9.2](https://github.com/philippe44/SpotConnect/releases/tag/0.9.2)
2024-01-26|Add support for log level of type `raop`
2024-01-26|Bump to version [0.9.1](https://github.com/philippe44/SpotConnect/releases/tag/0.9.1)
2024-01-15|Bump to version [0.9.0](https://github.com/philippe44/SpotConnect/releases/tag/0.9.0)
2024-01-10|Add support for log levels
2024-01-09|Bump to version [0.8.6](https://github.com/philippe44/SpotConnect/releases/tag/0.8.6)
2023-12-27|Bump to version [0.8.5](https://github.com/philippe44/SpotConnect/releases/tag/0.8.5)
2023-12-26|Bump to version [0.8.4](https://github.com/philippe44/SpotConnect/releases/tag/0.8.4)
2023-12-18|Bump to version [0.8.3](https://github.com/philippe44/SpotConnect/releases/tag/0.8.3)
2023-12-17|Bump to version [0.8.1](https://github.com/philippe44/SpotConnect/releases/tag/0.8.1)
2023-12-13|Support AppleTv Pairing mode (see [#1](https://github.com/GioF71/spotconnect-docker/issues/1))
2023-12-13|Bump to version [0.8.0](https://github.com/philippe44/SpotConnect/releases/tag/0.8.0)
2023-12-07|Bump to version [0.7.0](https://github.com/philippe44/SpotConnect/releases/tag/0.7.0)
2023-12-05|Bump to version [0.6.2](https://github.com/philippe44/SpotConnect/releases/tag/0.6.2)
2023-12-02|Bump to version [0.6.1](https://github.com/philippe44/SpotConnect/releases/tag/0.6.1)
2023-11-28|Bump to version [0.6.0](https://github.com/philippe44/SpotConnect/releases/tag/0.6.0)
2023-11-23|First working release