Release v1.3.0: Multi-source downloads, audio analyzer resilience, mobile improvements

Major Features:
- Multi-source download system (Soulseek/Lidarr with fallback)
- Configurable enrichment speed control (1-5x)
- Mobile touch drag support for seek sliders
- iOS PWA media controls (Control Center, Lock Screen)
- Artist name alias resolution via Last.fm
- Circuit breaker pattern for audio analysis

Critical Fixes:
- Audio analyzer stability (non-ASCII, BrokenProcessPool, OOM)
- Discovery system race conditions and import failures
- Radio decade categorization using originalYear
- LastFM API response normalization
- Mood bucket infinite loop prevention

Security:
- Bull Board admin authentication
- Lidarr webhook signature verification
- JWT token expiration and refresh
- Encryption key validation on startup

Closes #2, #6, #9, #13, #21, #26, #31, #34, #35, #37, #40, #43
This commit is contained in:
Your Name
2026-01-06 20:07:33 -06:00
parent 8fe151a0d1
commit cc8d0f6969
242 changed files with 20562 additions and 7725 deletions
+26 -12
View File
@@ -135,8 +135,8 @@ services:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidify_lidarr
environment:
- PUID=1000
- PGID=1000
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
volumes:
- lidarr_config:/config
@@ -151,8 +151,8 @@ services:
image: lscr.io/linuxserver/prowlarr:latest
container_name: lidify_prowlarr
environment:
- PUID=1000
- PGID=1000
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
volumes:
- prowlarr_config:/config
@@ -181,8 +181,8 @@ services:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: lidify_qbittorrent
environment:
- PUID=1000
- PGID=1000
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
- WEBUI_PORT=8080
volumes:
@@ -200,8 +200,8 @@ services:
image: lscr.io/linuxserver/sabnzbd:latest
container_name: lidify_sabnzbd
environment:
- PUID=1000
- PGID=1000
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
volumes:
- sabnzbd_config:/config
@@ -225,16 +225,32 @@ services:
MUSIC_PATH: /music
BATCH_SIZE: ${AUDIO_ANALYSIS_BATCH_SIZE:-10}
SLEEP_INTERVAL: ${AUDIO_ANALYSIS_INTERVAL:-5}
NUM_WORKERS: ${AUDIO_ANALYSIS_WORKERS:-8}
# Default workers reduced from 8 to 2 for stability (Issue #26 fix)
# Each worker requires 1-1.5GB RAM normally, up to 2-3GB peak
NUM_WORKERS: ${AUDIO_ANALYSIS_WORKERS:-2}
# CPU thread limiting per worker (default 1 for conservative CPU usage)
THREADS_PER_WORKER: ${AUDIO_ANALYSIS_THREADS_PER_WORKER:-1}
volumes:
# Music library (read-only)
- ${MUSIC_PATH:-./music}:/music:ro
- audio_analyzer_models:/app/models
# NOTE: Models are baked into the Docker image at /app/models
# No volume mount needed - previously this caused models to be hidden by empty volume
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
# Memory limits prevent OOM kills (Issue #26 fix)
# 6G limit = safe for 2 workers at 2-3GB peak each
# 2G reservation = minimum guaranteed memory
deploy:
resources:
limits:
memory: 6G
cpus: '4'
reservations:
memory: 2G
# Disabled by default - enable when needed
profiles:
- audio-analysis
@@ -244,8 +260,6 @@ volumes:
postgres_data:
backend_cache:
backend_logs:
# Audio analysis
audio_analyzer_models:
# External services
lidarr_config:
prowlarr_config: