feat: split backend into lib/ modules + add squid.wtf (Qobuz) download backend

- backend/lib/config.js  — CONFIG from env (adds DOWNLOAD_BACKEND, SQUID_QUALITY)
- backend/lib/jobs.js    — jobs Map, updateJob(), log()
- backend/lib/metadata.js — iTunes, artwork, lyrics, sanitize helpers
- backend/lib/ytdlp.js   — yt-dlp download cascade + shared embedMetadata()
- backend/lib/squid.js   — ALTCHA PoW solver, Qobuz search/download via squid.wtf
- backend/lib/downloader.js — backend selector: ytdlp | squid | auto (squid-first + fallback)
- novasonic-server.js thinned to Express routes only, imports from lib/
- docker-compose: mount full backend/ dir, install deps outside read-only volume
- .env.example: document DOWNLOAD_BACKEND and SQUID_QUALITY

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-05-02 20:44:26 +02:00
1 parent 2d71fdce6a
commit ac8d26bf9d
9 files changed
+858 -557

No files matched your search

+14 -3
View File
@@ -5,9 +5,20 @@ NAVIDROME_URL=https://music.yourdomain.com
BACKEND_URL=https://novasonic-api.yourdomain.com
# Absolute path to your Navidrome music library on the host
# This exact path is used inside the container — no subdirectory is added
MUSIC_PATH=/srv/navidrome/music
AUDIO_FMT=mp3 # mp3 | flac | opus | best
AUDIO_QUALITY=0 # 0 = best quality
AUDIO_FMT=mp3 # mp3 | flac | opus | best (used by yt-dlp)
AUDIO_QUALITY=0 # 0 = best quality (used by yt-dlp)
MAX_PARALLEL=2
# Download backend: ytdlp | squid | auto
# ytdlp - always use yt-dlp
# squid - always use squid.wtf (Qobuz)
# auto - try squid.wtf first, fall back to yt-dlp if not found (default)
DOWNLOAD_BACKEND=auto
# Quality for squid.wtf / Qobuz downloads
# mp3 - MP3 320 kbps
# flac - FLAC 16-bit / 44.1 kHz
# hi-res - FLAC 24-bit / 96 kHz
SQUID_QUALITY=mp3