Maintainerr makes managing your media easy.
- Do you hate being the janitor of your server?
- Do you have a lot of media that never gets watched?
- Do your users constantly request media, and let it sit there afterward never to be touched again?
If you answered yes to any of those questions, you need Maintainerr. It's a one-stop shop for handling those outlier shows and movies that take up precious space on your server.
- Configure rules specific to your needs, based on several available options from Plex, Jellyfin, Seerr, Radarr, Sonarr and Tautulli.
- Switch between Plex and Jellyfin as your media server, with automatic rule migration.
- Manually add media to a collection if it is not included after rule execution. (for one-off items that do not match a rule set)
- Selectively exclude media from being added to a collection, even if it matches a rule.
- Show a collection containing rule-matched media on the media server home screen for a specific duration before deletion. Think "Leaving soon".
- Optionally, use a manual collection, in case you don't want Maintainerr to add & remove collections at will.
- Manage media straight from the collection within your media server. Maintainerr will sync and add or exclude media to/from the internal collection.
- Remove or unmonitor media from *arr
- Clear requests from Seerr
- Delete files from disk
Currently, Maintainerr supports rule parameters from the following apps:
Docker images for amd64 & arm64 are available from these sources:
- ghcr.io/maintainerr/maintainerr <--- recommended
- maintainerr/maintainerr
Data is saved inside the container at /opt/data. It is recommended to mount a persistent volume to this location in your Docker run command or Compose file. Make sure this directory is readable and writable by the user specified in the 'user' setting. If no 'user' setting is configured, the volume should be accessible by UID:GID 1000:1000.
For more information, visit the installation guide.
Docker run:
docker run -d \
--name maintainerr \
-e TZ=Europe/Brussels \
-v ./data:/opt/data \
-u 1000:1000 \
-p 6246:6246 \
--restart unless-stopped \
ghcr.io/maintainerr/maintainerr:latestDocker Compose:
services:
maintainerr:
image: ghcr.io/maintainerr/maintainerr:latest # or ghcr.io/maintainerr/maintainerr:development (to test unreleased changes)
container_name: maintainerr
user: 1000:1000
volumes:
- type: bind
source: ./data
target: /opt/data
environment:
- TZ=Europe/Brussels
# - BASE_PATH=/maintainerr # uncomment if you're serving maintainerr from a subdirectory
# - UI_HOSTNAME=:: # uncomment if you want to listen on IPv6 instead (default 0.0.0.0)
# - UI_PORT=6247 # uncomment to change the UI port (default 6246)
# - GITHUB_TOKEN=ghp_yourtoken # Optional: GitHub Personal Access Token for higher API rate limits (60/hr without, 5000/hr with token)
ports:
- 6246:6246
restart: unless-stoppedFor more information, please consult the documentation
- Since v3,
/api/media-serveris the canonical API for media-server operations. - Deprecated
/api/plexroutes remain as a transition layer and are translated to the current abstraction-based implementation. /api/collectionsand other app-specific endpoints are internal application APIs and are not a backward-compatible Plex contract.- Deprecated
/api/plexroutes will be removed in a future major version.
To get an indication of which features are most desired, you can vote for them
Maintainerr is heavily inspired by Seerr (Overseerr / Jellyseerr). Some parts of Maintainerr's code are direct copies. Big thanks to the Seerr team!



