Releases: Mincka/spotcast
Release list
v6.6.0
Spotcast is now available in German.
Changes
- The integration is now available in German. The configuration flow, the options form and all ten service definitions are translated, bringing the shipped languages to English, French and German (thanks @vlntnwbr, #63).
Project changes
- Translation files are covered by a consistency test.
strings.jsonandtranslations/en.jsonmust stay identical, and every other language file must expose the same keys with the same{placeholder}tokens and no blank strings. New languages are picked up automatically, so a missing key can no longer fall back to English unnoticed (#64).
Adding a language
Copy custom_components/spotcast/translations/en.json to <code>.json, translate the values, and open a pull request. The consistency test will tell you if a key or a {placeholder} went missing.
Full changelog: v6.5.4...v6.6.0
v6.5.4
Fixes
-
A
401from the Spotify API on a token the session still considers valid no longer surfaces as a coordinator error: the account forces a token refresh and retries the call once. Spotify occasionally rejects a freshly refreshed token (Access token missing), which previously failed the whole update cycle:HTTP Error for GET to .../v1/me/player/devices returned 401 due to Access token missing Unexpected error fetching spotcast_... dataA
401means the request never executed, so the retry is safe for the playback writes too. If the rejection is ever caused by Spotcast rather than Spotify, the newSpotify rejected the access token for <url>warning makes it visible. -
The desktop session keeps its refresh token when Spotify omits
refresh_tokenfrom a refresh response. The response previously replaced the stored token wholesale, which would have left the session unable to refresh at all.
Full changelog: v6.5.3...v6.5.4
v6.5.3
Hardening against Spotify server instability, migration off the Web API endpoints removed by the February 2026 platform changes, and new device management options.
Fixes
- The playlists and liked songs count lookups are cached (5 minutes at the default refresh rate) instead of hitting the Spotify API on every update cycle, cutting steady-state API calls per account by roughly 40% (#54).
- When Spotify's API returns repeated server errors, the coordinator reports "Spotify API temporarily unavailable (server errors)" instead of the misleading
http status: 429that the spotipy library hard-codes on retry exhaustion (#54, spotipy-dev/spotipy#805). Genuine rate limits keep the previous message. - A server error (5xx) from Spotify's token endpoint (
accounts.spotify.com) is treated as a temporary outage like any other Spotify 5xx: one clear error line and a 30 second refresh backoff, instead ofToken request for spotcast failed (unknown): unknown_errorfollowed by a raw503, message='Service Unavailable'error on every cycle. Genuine token failures (4xx) now include the HTTP status in the log. - The device manager applies the same 30 second backoff after a failed device refresh instead of retrying every cycle during an outage.
- A failed refresh logs one error instead of two: the profile malfunction binary sensor no longer duplicates the coordinator's error line (#54).
- The stale-device purge survives Home Assistant restarts (unavailability timestamps are persisted) and also removes devices left over from previous Spotcast versions once they exceed the timeout (#56).
- System health no longer leaks Spotify account ids or usernames into bug reports, and the
Device Registration Endpointcheck reports real reachability instead of alwaysunreachable.
Changes
- New per-account options: the number of days before unavailable devices are removed (default 7, 0 = immediately), and a device filter (deny or allow mode, with case-insensitive name patterns such as
*Jam*) controlling which Spotify Connect devices get amedia_playerentity (#56). See the configuration guide. - Migrated off the Spotify Web API endpoints removed by the February 2026 platform changes, which are rejected for Spotify applications created after 2026-02-11 (#57):
like_media/unlike_medianow use/me/library, and playlist track listing uses/playlists/{id}/items. Both replacements also work for older applications. - Removed the unused artist top-tracks helper; its endpoint was removed by Spotify with no replacement.
Deprecations
- The
spotcast/categoriesWebSocket endpoint is deprecated: Spotify removed Browse categories with no replacement for applications created after 2026-02-11 (older applications are grandfathered for now). The endpoint returns an empty list with a warning instead of raising, and will be removed in a future release.
Housekeeping
- The codebase is pylint-clean (10.00/10) and the dependency security alerts (PyJWT in the dev lock, CairoSVG in the dev requirements) are resolved.
Full changelog: v6.5.2...v6.5.3
v6.5.3-beta.10
Over v6.5.3-beta.9: transient Spotify outages are now handled cleanly end to end.
- A server error (5xx) from Spotify's token endpoint (
accounts.spotify.com) is treated as a temporary outage like any other Spotify 5xx: one clear error line and a 30 second refresh backoff, instead ofToken request for spotcast failed (unknown): unknown_errorfollowed by a raw503, message='Service Unavailable'error on every cycle. Genuine token failures (4xx) now log the HTTP status. - The Spotify Connect device manager applies the same 30 second backoff after a failed device refresh; it previously bypassed the backoff and retried every cycle during an outage.
- Housekeeping: the codebase is now pylint-clean (10.00/10) and the dev-environment dependency alerts (PyJWT, CairoSVG) are resolved.
See v6.5.3-beta.2 for the feature list of the 6.5.3 line.
v6.5.3-beta.9
Over v6.5.3-beta.8: the French description of the device filter mode now uses the translated labels (Refuser/Autoriser) instead of the raw deny/allow values. No functional changes. See v6.5.3-beta.2 for the feature list.
v6.5.3-beta.8
Over v6.5.3-beta.7: the filter pattern example in the options dialog now renders as code (*Jam*, Pixel 7 Pro); the field description is markdown, so the wildcards previously displayed as italics instead of asterisks. No functional changes. See v6.5.3-beta.2 for the feature list.
v6.5.3-beta.7
Over v6.5.3-beta.6:
- System health no longer leaks Spotify account ids/usernames: accounts are numbered (
Account 1 Public Token, ...) so pasting System Health into a bug report stays anonymous. Device Registration Endpoint: unreachablewas a false alarm, fixed: the check passed a bare hostname instead of a URL, so it always failed without testing anything. Device registration itself was never broken.
See v6.5.3-beta.2 for the feature list.
v6.5.3-beta.6
Over v6.5.3-beta.5: the device filter mode dropdown shows capitalized, translated labels (Deny/Allow, fr: Refuser/Autoriser) instead of the raw values. No functional changes; see v6.5.3-beta.2 for the feature list.
v6.5.3-beta.5
Over v6.5.3-beta.4: the options dialog now uses short field labels with proper helper text under each field (en + fr) instead of explanations crammed into the labels. No functional changes; see v6.5.3-beta.2 for the feature list.
v6.5.3-beta.4
Over v6.5.3-beta.3:
- The stale purge of entities restored from previous versions now also removes their device registry entry. Legacy entities (created before the stable-identity rework) carry unique ids that cannot be mapped back to device identifiers, so beta.3 would have removed the entity but left an empty device shell; the purge now goes through the entity's device id, keeping devices that still have other entities.
- Documentation: options table in the README, worked deny/allow filter examples in the configuration guide, and an architecture section on the February 2026 Spotify API removals, the grandfathered client id behavior, and spotipy's fake-429 quirk.
See v6.5.3-beta.2 for the full feature list.