You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(spotify): play single Spotify tracks via librespot
Add a Spotify playback path for Premium accounts. Spotify exposes no
downloadable audio, so unlike the yt-dlp-backed services this uses
librespot to authenticate as a Connect device and decode the DRM
Ogg/Vorbis stream in-process.
- `looper spotify login` runs the OAuth browser flow once and caches
reusable credentials.
- A new `PlaybackInput::Spotify` variant carries a `spotify:track:` URI.
`plugin::resolve_url` intercepts Spotify links before the yt-dlp check
so it works without yt-dlp installed.
- The Sink->Source bridge (src/spotify/sink.rs) connects librespot's
push model to rodio's pull model via a bounded channel: the sink
blocks under backpressure (throttling the decoder to real time) and
the source yields silence on underrun rather than ending, since
track-end is driven by PlayerEvent::EndOfTrack.
- AudioPlayer gains a Spotify branch that keeps the librespot Player
alive and self-loops the track on end-of-track. play_loop is
unchanged; the existing wall-clock loop counter handles it.
Pin vergen to 9.0.6: librespot-core's build script pulls vergen-gitcl
1.0.8 (needs vergen ^9.0.6), but vergen 9.1.0 bumps its internal
vergen-lib to 9.x and collides with vergen-gitcl's vergen-lib 0.1.6.
Single tracks only for now; playlists/albums return a clear error.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0 commit comments