Multi-user YouTube, Spotify, and SoundCloud audio streaming rooms. Self-hosted, Docker-ready.
8.1K
Quefy is available as a Docker image for easy deployment.
Pull the latest image from Docker Hub:
docker pull snoozyman/quefy:latest
Run the container:
docker run -d \
--name quefy \
-p 3000:3000 \
snoozyman/quefy:latest
Access the app at http://localhost:3000
Create a docker-compose.yml file:
services:
quefy:
image: snoozyman/quefy:latest
container_name: quefy
restart: unless-stopped
ports:
- "3000:3000"
environment:
- PORT=3000
# YouTube / SoundCloud cookies (optional — can also upload via the room UI)
# - YT_DLP_COOKIES=/data/cookies.txt
# Spotify (optional — requires Premium account)
# - SPOTIFY_CLIENT_ID=
# - SPOTIFY_CLIENT_SECRET=
# - SPOTIFY_REDIRECT_URI=https://yourdomain.com/api/spotify/callback
# volumes:
# # Persist uploaded cookies and other data
# - ./data:/app/data
# # Or mount a cookies file directly (overrides UI upload)
# - ./cookies.txt:/data/cookies.txt:ro
Start the service:
docker compose up -d
Build the image from source:
git clone https://github.com/Snoozyman/quefy.git
cd quefy
docker build -t quefy:local .
docker run -d -p 3000:3000 quefy:local
| Tag | Description |
|---|---|
latest | Latest stable release |
v0.2.3 | Specific version (e.g., v0.2.3, v0.2.4) |
0.2 | Latest patch for minor version (e.g., 0.1.x) |
Pass environment variables using -e flag or in docker-compose.yml:
docker run -d \
-p 3000:3000 \
-e YT_DLP_COOKIES=/data/cookies.txt \
-e SPOTIFY_CLIENT_ID=... \
snoozyman/quefy:latest
| Variable | Default | Description |
|---|---|---|
PORT | 3000 | HTTP server port |
YT_DLP_COOKIES | data/cookies.txt | Path to cookies file (or upload via room UI) |
SPOTIFY_CLIENT_ID | (optional) | Spotify App Client ID |
SPOTIFY_CLIENT_SECRET | (optional) | Spotify App Client Secret |
SPOTIFY_REDIRECT_URI | http://localhost:3000/api/spotify/callback | OAuth redirect URI |
SPOTIFY_MARKET | US | Market code for Spotify search results |
Mount a persistent data/ directory to preserve uploaded cookies across container restarts:
docker run -d \
-p 3000:3000 \
-v ./data:/app/data \
snoozyman/quefy:latest
Mount a cookies file directly (alternative to the UI upload):
docker run -d \
-p 3000:3000 \
-v /path/to/cookies.txt:/data/cookies.txt:ro \
-e YT_DLP_COOKIES=/data/cookies.txt \
snoozyman/quefy:latest
Note: YouTube and SoundCloud cookies expire periodically. If cookies stop working, re-upload via the UI or mount a fresh cookies file.
Example Nginx configuration:
server {
listen 80;
server_name quefy.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
services:
quefy:
image: snoozyman/quefy:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.quefy.rule=Host(`quefy.example.com`)"
- "traefik.http.routers.quefy.entrypoints=websecure"
- "traefik.http.routers.quefy.tls.certresolver=letsencrypt"
- "traefik.http.services.quefy.loadbalancer.server.port=3000"
Pull the latest image and recreate the container:
docker compose pull
docker compose up -d
Or for standalone containers:
docker pull snoozyman/quefy:latest
docker stop quefy && docker rm quefy
docker run -d --name quefy -p 3000:3000 snoozyman/quefy:latest
A Community Applications template is available via Snoozyman/unraid-templates. Once approved, search for quefy directly in the Unraid Apps tab.
Check logs:
docker logs quefy
Some videos and tracks require authentication. Upload cookies via the room UI, or mount a cookies file — see Cookies File section above.
SoundCloud DRM-protected tracks cannot be played on any platform. These tracks will show a clear error message when queued.
SPOTIFY_MARKET to match your account country.Change the host port:
docker run -d -p 8080:3000 snoozyman/quefy:latest
Access at http://localhost:8080
node:22-bookworm-slimoven/bun:latestContent type
Image
Digest
sha256:d4f81b542…
Size
336.5 MB
Last updated
2 months ago
docker pull snoozyman/quefy