LavaSrc plugin config (preferPartnerApi, customTokenEndpoint, spDc)
doesn't bind from YAML in Lavalink 4. Added a one-shot sidecar container
that applies the config via PATCH endpoint after Lavalink becomes healthy.
Also cleaned up DEBUG logging.
Spotify changed their API in Feb 2026 - playlists now require anonymous
tokens via the Partner API. The default anonymous token endpoint is
blocked from server IPs. Added a custom Dockerfile for spotify-tokener
with Chromium installed, and configured LavaSrc to use Partner API with
the tokener endpoint. Playlists now load successfully.
- spotify URL resolution was broken (500 NPE): preferPartnerApi +
customTokenEndpoint depended on dead spotify-tokener (-32000)
- remove tokener service from compose, remove dead SPOTIFY_* env from
bot container (bot code never used them)
- spotify metadata now resolves via standard client credentials,
playback is mirrored to SoundCloud via scsearch providers (ISRC/QUERY)
lavalink/plugins/youtube-plugin-1.18.2.jar never reached the repo - the
'*.jar' ignore rule silently dropped it from git add. Add an exception and
force-add the jar so Lavalink actually loads the YouTube source.
Lavalink 4.2.2 re-downloads/verifies config-declared plugins on startup and
failed writing to the git-managed plugins bind mount (Permission denied,
container uid 322 vs root-owned files after git pull). Jars in the plugins
directory are loaded directly; remove the duplicate config block.
- Add spotify-tokener service (ghcr.io/topi314/spotify-tokener:master)
- Configure lavasrc to use it via customTokenEndpoint
- Enable preferPartnerApi for playlist loading via Partner API
- spotify-tokener handles the TOTP token generation properly
- lavasrc 4.8.2 uses /tracks endpoint for playlists (4.8.3 /items
returns 401 for new Spotify apps)
- Remove preferPartnerApi (anonymous token extraction broken on
current Spotify web player)
- playlistLoadLimit stays at 10 (1000 tracks)