Loomis is a collection of services to assist in your Plex and Emby media management.
- Playlist Sync
- Allows the syncing of Plex Collections to Emby Playlists
Each service can be configured independently. Each service allows for a cron rate on when to run.
Loomis offers a pre-compiled docker image
Use docker compose to run Loomis
---
services:
loomis:
image: brikim/loomis:latest
container_name: loomis
security_opt:
- no-new-privileges:true
environment:
- TZ=America/Chicago
volumes:
- /docker/loomis/config:/config
- /docker/loomis/logs:/logs
- /pathToMedia:/media
restart: unless-stoppedNote
📝 /media folder can not be read only for all services to function correctly
| Env | Function |
|---|---|
| TZ | specify a timezone to use |
| Volume | Function |
|---|---|
| /config | Path to a folder containing config.yml used to setup Loomis |
| /logs | Path to a folder to store Loomis log files |
| /media | Path to your media files. Used by services to monitor your media files |
A configuration file is required to use Loomis. Create a config.conf file in the volume mapped to /config
{
"plex": {
"servers": [
{
"server_name": "Server1",
"url": "http://0.0.0.0:32400",
"api_key": "",
"tracker_url": "http://0.0.0.0:0",
"tracker_api_key": "",
"media_path": "/media/"
},
{
"server_name": "Server2",
"media_path": "/media/",
"url": "http://0.0.0.0:32401",
"api_key": "",
"tracker_url": "http://0.0.0.0:0",
"tracker_api_key": ""
}
]
},
"emby": {
"servers": [
{
"server_name": "Server1",
"url": "http://0.0.0.0:8096",
"api_key": "",
"tracker_url": "http://0.0.0.0:0",
"tracker_api_key": "",
"media_path": "/media/"
},
{
"server_name": "Server2",
"url": "http://0.0.0.0:8097",
"api_key": "",
"tracker_url": "http://0.0.0.0:0",
"tracker_api_key": "",
"media_path": "/media/"
}
],
},
"apprise_logging": {
"enabled": true,
"url": "http://0.0.0.0:0",
"key": "apprise",
"message_title": "Test loomis notification"
},
"playlist_sync": {
"enabled": true,
"cron_comment": "Non-Standard cron expression. First digit is seconds so leave this as 0 if this accuracy is not needed and fill in the rest with standard cron expression",
"cron": "0 0 */2 * * *",
"time_for_emby_to_update_seconds": 1,
"time_between_syncs_seconds": 1,
"plex_collection_sync": [
{"server": "Server1", "library": "Server1_LibraryName", "collection_name": "plexCollectionName", "target_emby_servers": [{"server": "Server1"}, {"server": "Server2"}]}
]
},
"watch_state_sync": {
"enabled": true,
"cron_run_rate": "0 0 */2 * * *",
"users": [
{"plex": [{"server": "Server1", "user_name": "User1", "can_sync": true}], "emby": [{"server": "Server1", "user_name": "User1"}, {"server": "Server2", "user_name": "User1"}]},
{"plex": [{"server": "Server1", "user_name": "User2", "can_sync": false}], "emby": [{"server": "Server1", "user_name": "User2"}, {"server": "Server2", "user_name": "User2"}]}
]
}
}You only have to define the variables for servers in your system. For plex only define plex_url and plex_api_key in your file. The emby and jellyfin variables are not required.
| Media Server | Function |
|---|---|
| plex | A list of plex servers used |
| emby | A list of emby servers used |
Not required unless wanting to send Warnings or Errors to Apprise
| Apprise | Function |
|---|---|
| enabled | Enable the function with 'True' |
| url | Url including port to your apprise server |
| key | Apprise key to be used to send notifications |
| message_title | Title to put in the title bar of the message |
Playlist Sync will sync Plex Collections to Emby Playlists with the same name. This will run at the scheduled rate and update the Emby playlist to match the Plex collection.
| playlist_sync | Function |
|---|---|
| enabled | Enable the sync watch service |
| cron | Rate at which to run this service. Non-Standard cron expression. First digit is seconds so leave this as 0 if this accuracy is not needed and fill in the rest with standard cron expression |
| time_for_emby_to_update_seconds | How many seconds to give the Emby server to update |
| time_between_syncs_seconds | How many seconds to give the Emby server between sync updates |
1 to many plex collections can be synced
| plex_collection_sync | Function |
|---|---|
| server | The name of the plex server for this collection. Must be in the plex server list. |
| library | The name of the plex library that contains this collection. |
| collection_name | The name of the collection to sync. |
| target_emby_servers | A list of emby servers to sync the plex collection. |