docker run -d \
--name sendspin-image-server \
--network host \
-e DATA_DIR=/data \
-v sendspin-data:/data \
-v /path/to/your/photos:/app/images \
ghcr.io/vantreeseba/sendspin-image-server:main
--network hostis required for mDNS multicast to work. Without it the server cannot advertise itself or discover clients on the local network.
Open http://<your-docker-host>:8928 to access the UI.
If your Docker daemon runs on a different machine (e.g. a home server at docker.lan):
export DOCKER_HOST=tcp://docker.lan:2375
docker pull ghcr.io/vantreeseba/sendspin-image-server:main
docker rm -f sendspin-image-server
docker run -d \
--name sendspin-image-server \
--network host \
-e DATA_DIR=/data \
-v sendspin-data:/data \
-v /path/to/photos:/app/images \
ghcr.io/vantreeseba/sendspin-image-server:main
Mount a volume or host directory at /data and set DATA_DIR=/data. The server writes sendspin.db there, storing all provider configurations and per-client settings across restarts.
# Named volume (recommended)
-v sendspin-data:/data -e DATA_DIR=/data
# Or a host path
-v /srv/sendspin:/data -e DATA_DIR=/data
Without DATA_DIR, the server runs without persistence — providers and assignments must be reconfigured after each restart.
The built-in local provider looks for images at /app/images inside the container. Mount your photo directory there:
-v /path/to/your/photos:/app/images
Supported formats: JPEG, PNG, BMP, WebP.
services:
sendspin-image-server:
image: ghcr.io/vantreeseba/sendspin-image-server:main
container_name: sendspin-image-server
network_mode: host
restart: unless-stopped
volumes:
- sendspin-data:/data
- /path/to/your/photos:/app/images
environment:
DATA_DIR: /data
SLIDESHOW_INTERVAL: "120" # server-wide default; override per client in UI
DITHER_ALGO: floyd-steinberg # server-wide default; override per client in UI
volumes:
sendspin-data:
With an Immich provider (added via UI after first start, or pre-configured):
environment:
DATA_DIR: /data
SLIDESHOW_INTERVAL: "120"
Immich credentials are stored in the database after you add the provider through the UI — no environment variables needed.
| Environment variable | CLI flag | Default | Description |
|---|---|---|---|
SLIDESHOW_INTERVAL | --interval | 120 | Seconds between image advances (server-wide default; overridable per client) |
DITHER_ALGO | --dither-algo | floyd-steinberg | Default dither algorithm; overridable per client in the UI |
DATA_DIR | --data-dir | (none) | Path for SQLite persistence. Omit to run stateless. |
| — | --host | 0.0.0.0 | Bind address for both servers |
| — | --port | 8927 | WebSocket (Sendspin protocol) port |
| — | --http-port | 8928 | HTTP / REST API / Web UI port |
| — | --name | Sendspin Image Server | Server display name (shown in mDNS and client handshake) |
| — | --log-level | INFO | One of DEBUG, INFO, WARNING, ERROR, CRITICAL |
Content type
Image
Digest
sha256:813b3fca2…
Size
95.9 MB
Last updated
27 days ago
docker pull vantreeseba/sendspin-image-server