The shipper reads the ai-radio app's library/index.json format (verified against synthetic fixture incl. Python float created_at via UnixTime unmarshaler).
To wire the real thing:
Point LIBRARY_DIR at the running generator's library
Run shipper loop; confirm titles show on stereo display
Tune NEWNESS_BIAS for fresh-song latency
Known contract: index.json fields id/genre/title/style/filename/duration/created_at/rating. Disliked (rating=-1) tracks are excluded from air.
SUPERSEDED — canonical repo is now frank/ai-radio-two. Mirrored there as issue #4 (see frank/ai-radio-two#4-#1).
The shipper reads the ai-radio app's `library/index.json` format (verified against synthetic fixture incl. Python float `created_at` via UnixTime unmarshaler).
To wire the real thing:
1. Point `LIBRARY_DIR` at the running generator's library
2. Run shipper loop; confirm titles show on stereo display
3. Tune `NEWNESS_BIAS` for fresh-song latency
Known contract: index.json fields id/genre/title/style/filename/duration/created_at/rating. Disliked (rating=-1) tracks are excluded from air.
---
**SUPERSEDED** — canonical repo is now [frank/ai-radio-two](https://git.obahan.xyz/frank/ai-radio-two). Mirrored there as issue #4 (see frank/ai-radio-two#4-#1).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The shipper reads the ai-radio app's
library/index.jsonformat (verified against synthetic fixture incl. Python floatcreated_atvia UnixTime unmarshaler).To wire the real thing:
LIBRARY_DIRat the running generator's libraryNEWNESS_BIASfor fresh-song latencyKnown contract: index.json fields id/genre/title/style/filename/duration/created_at/rating. Disliked (rating=-1) tracks are excluded from air.
SUPERSEDED — canonical repo is now frank/ai-radio-two. Mirrored there as issue #4 (see frank/ai-radio-two#4-#1).