Fix generation JSON/Lyria errors, add Winamp player, and ship Echoes of the Sahel.

Harden DeepSeek JSON parsing with retry, pre-sanitize Lyria prompts, and instrumental fallback. Add pure HTML Winamp skin at /winamp with playlist export support.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-07 16:38:52 +01:00
parent ec4ca4b7c0
commit 6e92841352
15 changed files with 782 additions and 38 deletions
+16 -2
View File
@@ -136,7 +136,21 @@ At the default cap of 10 new songs/day with Lyria Pro, projected max spend is **
| GET | `/api/songs` | Saved library |
| POST | `/api/songs/{id}/play` | Play a saved track |
| GET | `/stream/{file}` | MP3 stream |
| GET | `/player` | Web UI |
| GET | `/player` | Full DJ dashboard |
| GET | `/winamp` | Winamp-style HTML player (streams `/stream/{file}` locally) |
## Winamp player (pure HTML)
Lightweight **Winamp 2.xstyle** skin — no React, no API required for playback. Shuffles saved songs from the embedded playlist.
| Where | URL |
|-------|-----|
| **Local** (with server) | **http://127.0.0.1:8787/winamp** — streams via `/stream/{file}` |
| **Public** (tinqs.com LFS) | **https://tinqs.com/tinqs/live-radio/src/branch/main/gateway/winamp.html** |
Controls: play/pause, stop, prev/next, shuffle, volume, clickable playlist. Same `/*__PLAYLIST__*/` embed as `gateway/index.html` — updated by `python -m ozan_radio export-web` or automatically when the server saves a track.
Full dashboard (`/player`) still needed for DJ chat, Lyria compose, and settings.
## Magenta RealTime 2 (optional live layer)
@@ -172,7 +186,7 @@ After generating new tracks locally, refresh the public page:
```powershell
python -m ozan_radio export-web
git add gateway/index.html gateway/playlist.json
git add gateway/index.html gateway/winamp.html gateway/playlist.json
git commit -m "Update public radio playlist"
git push
```