Sign inSign up

snoozyman/quefy

By snoozyman

•Updated 8 days ago

Multi-user YouTube, Spotify, and SoundCloud audio streaming rooms. Self-hosted, Docker-ready.

Image
Web servers
0

8.1K

snoozyman/quefy repository overview

⁠Docker Guide

Quefy is available as a Docker image for easy deployment.

⁠Quick Start

⁠Using Pre-built Images

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

⁠Using Docker Compose

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

⁠Building Locally

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

⁠Image Tags

TagDescription
latestLatest stable release
v0.2.3Specific version (e.g., v0.2.3, v0.2.4)
0.2Latest patch for minor version (e.g., 0.1.x)

⁠Environment Variables

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
VariableDefaultDescription
PORT3000HTTP server port
YT_DLP_COOKIESdata/cookies.txtPath 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_URIhttp://localhost:3000/api/spotify/callbackOAuth redirect URI
SPOTIFY_MARKETUSMarket code for Spotify search results

⁠Volume Mounts

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
⁠Cookies File (Optional — legacy method)

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.

⁠Production Deployment

⁠With Reverse Proxy

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;
    }
}
⁠With Traefik
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"
⁠Updating

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

⁠Unraid

A Community Applications template is available via Snoozyman/unraid-templates⁠. Once approved, search for quefy directly in the Unraid Apps tab.

⁠Troubleshooting

⁠Container exits immediately

Check logs:

docker logs quefy
⁠yt-dlp / SoundCloud errors

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 playback fails
  • Firefox — the Web Playback SDK does not work in Firefox. Use Chrome or Edge.
  • 403 / license errors — the track may not be available in your region. Try setting SPOTIFY_MARKET to match your account country.
⁠Port already in use

Change the host port:

docker run -d -p 8080:3000 snoozyman/quefy:latest

Access at http://localhost:8080

⁠Architecture

  • Base image: node:22-bookworm-slim
  • Build stage: oven/bun:latest
  • Includes: yt-dlp, ffmpeg, curl, ca-certificates
  • Exposes: Port 3000

⁠Source

Tag summary

Content type

Image

Digest

sha256:d4f81b542…

Size

336.5 MB

Last updated

2 months ago

docker pull snoozyman/quefy