# 160 — Vinyl music widgets

Approved by the user on 2026-10-03, including live Kodi testing and hosting deployment.

- Home: Vinyl after MyTV, Estuary `disc.png`, optional in skin settings.
- The existing six-slot editor supplies all Vinyl music sources, including the four Favorites subtypes.
- Defaults: AI curator and Discover, 20 entries, original Vinyl order, square covers, open tracks.
- Sources: latest curator playlists from `featured.curatorPlaylists`, recommended playlists from
  `featured.playlists`, tracks, albums, artists, own playlists, genres, radio-show tracks, favorite tracks,
  favorite playlists, favorite albums and favorite artists. Own and favorite playlists use distinct API flags.
- Limits: 10/20/30/50; source/title/random ordering; square/landscape layouts (genres: categories).
- Click: open collection, play all, shuffle; tracks: play single, play from selection in the displayed order, queue.
- Radio entries expose a show's music playlist. The web player's overlapping moderator audio/mix is not reproduced.
- Login via username and PIN in addon settings. Only session token, user ID and display name persist in addon data.
- REST, covers and music stream URLs use `https://hosting.pilsfree.net/chudy/proxy/4017/api/vinyl/`.
  Media uses Vinyl's read-only anonymous authorization; user session tokens never enter item URLs.
- Cache-only Home builders; service refresh every 15 minutes. Account-specific files, atomic publication,
  previous valid data retained after fetch failure. Settings gear: Refresh all widgets, including existing sources.

Implementation: `wcs/vinyl/`, existing `wcs/skin/slots.py`, `wcs/library2/clicks.py`,
`wcs/library2/rows.py`, `service.py`, Home/settings XML and generated slot includes.
No Estuary includes, fonts or textures were changed for Vinyl. New localization IDs: addon 32500–32536,
skin 31998–31999, in cs/sk/en. Addon provides audio as well as video.

Targeted verification in Kodi 21.3 with DjC: source counts and all four limits, title ordering,
collection tracks for every source, own/favorite separation, cover HTTP response and ranged stream response
for every source, actual audio playback for single/all/shuffle/play-from/queue, Favorites subtype creation
and editing, saved editor settings, manual refresh, and cache retention on failure.
The probe `scripts/library_harness/vinyl_probe.py` returns counts/check results without credentials.
Python compilation and changed XML parsing passed. These checks sample playback; they do not certify every
track in the server library or indefinite external-service availability.
