Maubot plugin for the homelab media stack (Seerr/Emby/Sonarr/Radarr/NZBGet/qBt)
- LidarrClient (api/v1) with lookup, profile/folder discovery, and add_artist - !media music <query> — MusicBrainz lookup via Lidarr, numbered list cached per (room, sender) - !media music add <query|N> — POST /api/v1/artist with profile/folder defaults (auto-picks first if not set in config). Carries through images/genres/links from the lookup result and kicks off a search for missing albums by default. - New config block 'lidarr' with optional quality_profile_id / metadata_profile_id / root_folder_path overrides. |
||
|---|---|---|
| media_bot | ||
| .gitignore | ||
| base-config.yaml | ||
| LICENSE | ||
| maubot.yaml | ||
| README.md | ||
maubot-media
Maubot plugin: Matrix bot for the homelab media stack — Seerr, Emby, Sonarr, Radarr, NZBGet, qBittorrent.
Commands
!media help # command list
# Search & request (Seerr)
!media search <query> # top results across movies + tv
!media request <query> # request top hit
!media request <query> --tv # force TV match
!media request <query> --movie # force movie match
!media requests # your pending/processing requests
!media trending # what's trending
# Library & playback (Emby)
!media nowplaying # active sessions
!media recent [movies|tv] # recently added (default: both)
!media watched # what you recently finished
# Downloads (Sonarr/Radarr/NZBGet/qBittorrent)
!media queue # combined Sonarr + Radarr queue
!media activity # NZBGet + qBt — current downloads
!media upcoming # Sonarr calendar, next 7 days
!media missing # Sonarr wanted/missing
How it works
The plugin runs in maubot on im (Hetzner) and calls each service over Tailscale:
| Service | URL |
|---|---|
| Seerr | http://192.168.1.80:5056 |
| Sonarr | http://192.168.1.80:8989 |
| Radarr | http://192.168.1.80:7878 |
| Emby | http://192.168.1.120:8096/emby |
| NZBGet | http://192.168.1.122:6789 |
| qBittorrent | http://192.168.1.122:8082 |
Each Matrix sender is mapped to per-service user IDs via plugin config (Seerr user ID, Emby user ID). Senders not in the user_map are rejected.
Build
cd ~/maubot-media
zip -rq com.3ddbrewery.media-v0.1.0.mbp maubot.yaml base-config.yaml media_bot/ README.md -x '*/__pycache__/*'
Upload via the maubot web UI at https://matrix.fails.me/_matrix/maubot, or use the upload curl flow documented in docs/media-bot.md.
Config
See base-config.yaml. After upload, set real values via the maubot UI's instance config tab.