Libraries, the catalog, and the screens

You tell the operator where your media is and which metadata providers to use. It scans the media into a catalog, and every screen in the namespace shows that catalog. The API has three resources, all in a namespace:

For each Library, the operator runs Jobs, one at a time. A Job scans the volume on the Library’s schedule and writes rows into the namespace’s catalog. A webhook from Radarr, Sonarr, or Jellyfin runs the same scan over only the folders it names. In the same Job, beside the scan, the enrichment phases ask each provider that the Library names for metadata, and write the answers beside the media, as the .nfo files and the art that Kodi and Jellyfin read. The Job ends when the catalog pod confirms that it has the Job’s rows. Each Job reads and writes the catalog through a Corrosion agent on the Library’s catalog claim.

The catalog is built from the files on the volume, so the operator can always build it again.

A screen is a Player that media-operator owns. When the Player’s idle controller names this operator, the operator runs a pod on the Player’s display with a Corrosion agent and the media browser. The browser reads its own copy of the catalog, gets the remote’s presses over the message bus, and publishes what a person picked. The operator turns that into a Play.

Every Library in a namespace writes to the same catalog, and every screen in that namespace shows it.