Closes #367 (reported by JohnBaumb). The Docker entrypoint ran `pip install -U yt-dlp --quiet --no-cache-dir` on every container start. Three problems with that: - Non-deterministic startup: each restart could pick up a different yt-dlp version, making "works on my machine" debugging harder. - Network dependency at boot: PyPI being slow/unreachable gated the app coming up. - In-place upgrades inside running containers can race with active yt-dlp invocations and aren't a great pattern. Picked Option A from the issue: pin to an exact version in requirements.txt (`yt-dlp==2026.3.17`) and remove the entrypoint install entirely. yt-dlp comes baked into the image now via the existing `pip install -r requirements.txt` in the Dockerfile. Tradeoff: YouTube fixes ship via SoulSync releases now instead of "next container restart". The pin is documented inline with how to bump it. Net change: -3 entrypoint lines, requirements.txt pin tightened, WHATS_NEW '2.4.1' block opened (entries hidden until version bumps). 553 tests pass.
53 lines
1.1 KiB
Text
53 lines
1.1 KiB
Text
# SoulSync requirements
|
|
# Web application dependencies only
|
|
|
|
# Core web framework
|
|
Flask>=3.0.0
|
|
Flask-Limiter>=3.5.0
|
|
|
|
# Music service APIs
|
|
spotipy>=2.23.0
|
|
PlexAPI>=4.17.0
|
|
|
|
# HTTP and async support
|
|
requests>=2.31.0
|
|
aiohttp>=3.9.0
|
|
|
|
# Security and encryption
|
|
cryptography>=41.0.0
|
|
|
|
# Media metadata handling
|
|
mutagen>=1.47.0
|
|
Pillow>=10.0.0
|
|
|
|
# Text processing
|
|
unidecode>=1.3.8
|
|
beautifulsoup4>=4.12.0
|
|
|
|
# System monitoring
|
|
psutil>=6.0.0
|
|
|
|
# YouTube support
|
|
# Pinned to an exact version for reproducible builds. The Docker
|
|
# entrypoint used to `pip install -U yt-dlp` on every container start,
|
|
# which made startup non-deterministic and depended on PyPI being
|
|
# reachable. Bump this pin in a SoulSync release when yt-dlp ships a
|
|
# YouTube-fix update — that's the supported upgrade path now.
|
|
yt-dlp==2026.3.17
|
|
|
|
# Lyrics support
|
|
lrclibapi>=0.3.1
|
|
|
|
# Audio fingerprinting for download verification
|
|
pyacoustid>=1.3.0
|
|
|
|
# WebSocket client for Hydrabase connection
|
|
websocket-client>=1.7.0
|
|
|
|
# Tidal download support
|
|
tidalapi>=0.7.6
|
|
|
|
# WebSocket server for real-time UI updates
|
|
flask-socketio>=5.3.0
|
|
gunicorn>=25.3.0
|
|
simple-websocket>=1.1.0
|