services: frame-stream-player: build: . image: frame-stream-player:latest container_name: frame-stream-player restart: unless-stopped ports: - "3000:3000" environment: PORT: "3000" NODE_ENV: production YT_DLP_TIMEOUT_MS: "45000" # split: smoothest, two upstream connections. # relay: one upstream connection, separate audio/frame ffmpeg workers. # single: one upstream connection and one ffmpeg worker; fallback only. PLAYBACK_CONNECTION_MODE: relay FFMPEG_LOG_LEVEL: warning FFMPEG_INPUT_SEEKABLE: "0" FFMPEG_HTTP_RECONNECT: "1" FFMPEG_HTTP_RECONNECT_DELAY_MAX: "2" FFMPEG_HTTP_RECONNECT_MAX_RETRIES: "4" FFMPEG_HTTP_RECONNECT_ON_HTTP_ERROR: "5xx" METADATA_PROBE_ENABLED: "0" METADATA_PROBE_TIMEOUT_MS: "4000" DEFAULT_FPS: "24" DEFAULT_FRAME_WIDTH: "960" JPEG_QUALITY: "7" DEFAULT_AUDIO_BITRATE: "160k" DEFAULT_AUDIO_CHANNELS: "2" DEFAULT_AUDIO_SAMPLE_RATE: "48000" MAX_WS_BUFFER_BYTES: "2097152" MAX_AUDIO_QUEUE_BYTES: "4194304" MAX_RELAY_BRANCH_QUEUE_BYTES: "8388608" RECENT_URLS_PATH: /app/data/recent-urls.json FAVORITES_PATH: /app/data/favorites.json # Set this and mount a host directory below to enable Play Local. # LOCAL_VIDEOS: /app/local-videos extra_hosts: - "host.docker.internal:host-gateway" volumes: - frame-stream-data:/app/data # - /path/on/host/videos:/app/local-videos:ro # CPU decoding is the default and does not need device passthrough. # # Optional Intel/AMD VAAPI device passthrough: # devices: # - "/dev/dri:/dev/dri" # # Optional NVIDIA passthrough with Docker Compose v2: # gpus: all volumes: frame-stream-data: