soulsync/requirements.txt
Broque Thomas 77a781caba Pin yt-dlp in requirements.txt, drop pip install from entrypoint
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.
2026-04-26 18:02:20 -07:00

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