jochen 9db000a07f bazarr: the runtime serves its watcher and tools, and its servarr step is a run-once process (hq ADR 0198)
The mesh-bazarr container and the mesh-bazarr-servarr step container go with the Dockerfile, build bases, bus credential and state directory. The step runs node on the bundle and reads the sonarr and radarr bindings where the mesh writes them; it still runs again when one changes.
2026-10-04 00:45:22 +02:00

mesh-media-catalog

The media chain as Novox Mesh modules, one per directory under modules/: the servarr trio (sonarr, radarr, lidarr), bazarr, the downloaders (nzbget, qbittorrent), jackett, bookshelf, plex and its companions (tautulli, kometa), and ombi.

It is a catalogue in the exact shape of novox/mesh-catalog: the same manifest vocabulary, the same rules, checked the same way. It is separate because this chain is one system that only talks to itself — jackett-api, sonarr-api, radarr-api, lidarr-api and plex-api are exchanged among these modules and consumed by nothing else except home-assistant — and because what runs here is one operator's media stack, pinned to the builds in use, not shared infrastructure. Provisions cross repositories freely: lidarr requires postgres-database from the catalogue's postgres, every module requires route; the mesh resolves a requirement by name and never by where the manifest lives.

Conventions

  • A manifest names the software's own ports and nothing of the machine: machine ports are assigned by the mesh, per node. No host:container pairs, no pins in an assignment.
  • A manifest names no installation: no hostnames, paths of a particular machine, or people. Names come from ${bound:route:name}, places from ${dir:<id>}, values from settings.
  • Every secret a module needs is declared under own-secrets (minted, or accepted once for an adopted instance); a provision's credential arrives with its binding.
  • Each module carries a small runtime sidecar (tools/index.ts, built by its Dockerfile on the mesh-tools bases) with a few query tools — the working example to extend.

Before pushing, check every manifest together, the way registration does:

mesh-controller module check modules/*/module.json

Register a module from this repository through the forge seat:

module add /<m>.json --source novox/mesh-media-catalog --self --path modules/<m> --ref main --commit <sha>
build novox/mesh-media-catalog --self --path modules/<m> --ref main
S
Description
The media chain as mesh modules: servarr, downloaders, jackett, plex and its companions
Readme
239 KiB
Languages
TypeScript 98%
Python 1.9%