A Python application to automate the management of cover art, posters, and fanart for your Jellyfin libraries.
Primarily made for Posters from ThePosterDB and Mediux
.zip files from sources like ThePosterDB and MediUX for easy bulk imports.mediux.txt.The recommended method is to use Docker.
Create a docker-compose.yml and configure it with your environment variables.
services:
jellyfinupdateposter:
image: iceshadow/jellyfinupdateposter:latest
container_name: jellyfinupdateposter
restart: unless-stopped
environment:
- JELLYFIN_URL=http://jellyfin:8096
- JELLYFIN_API_KEY=your-jellyfin-api-key
- TMDB_API_KEY=your-tmdb-api-key
- INCLUDE_EPISODES=false
- TZ=Europe/Berlin
- ENABLE_WEBHOOK=false
- SCHEDULED_TIMES=06:00,12:00,18:00 # Optional
volumes:
- ./your-local-path:/mount
ports:
- "8080:8080" # Required only if ENABLE_WEBHOOK=true
Start the container.
docker compose up -d
git clone https://github.com/Iceshadow1404/JellyfinUpdatePoster
cd JellyfinUpdatePoster
pip install -r requirements.txt
.env file in the root directory and add your configuration variables (see below).--force flag.
python main.py
JELLYFIN_URL: Required. The URL of your Jellyfin server.JELLYFIN_API_KEY: Required. Your Jellyfin API key.TMDB_API_KEY: Required. Your TMDb API key.INCLUDE_EPISODES: Set to true or false to manage episode images. Defaults to false.ENABLE_WEBHOOK: Set to true to enable the webhook trigger. Defaults to false.IGNORE_CONTENT_CHANGED: Set to true to disable content change detection and always skip processing Defaults to false.SCHEDULED_TIMES: Optional comma-separated list of HH:MM times to run scheduled updates.TZ: Optional timezone for scheduling, e.g., America/New_York.The primary workflow is to place your image files or .zip archives into the RawCover directory. The application processes them automatically based on the file naming conventions.
MovieName (Year)/poster.extShowName (Year)/poster.extShowName (Year)/Season01.extShowName (Year)/S01E02.extposter.extbackdrop.ext (placed in the same folder as a poster)The application creates and uses the following directory structure inside your mounted volume (/mount):
.
├── RawCover/ # Drop new image files and ZIPs here
├── Cover/ # Processed and organized artwork
├── Consumed/ # Source files are moved here after processing
└── Replaced/ # Old artwork is archived here when updated
For questions or help, you can message iceshadow_ on Discord or create an issue.
This project is licensed under the MIT License.
247 commits
2 commits
Python
99.6%
A Python application to automate the management of cover art, posters, and fanart for your Jellyfin libraries.
Primarily made for Posters from ThePosterDB and Mediux
.zip files from sources like ThePosterDB and MediUX for easy bulk imports.mediux.txt.The recommended method is to use Docker.
Create a docker-compose.yml and configure it with your environment variables.
services:
jellyfinupdateposter:
image: iceshadow/jellyfinupdateposter:latest
container_name: jellyfinupdateposter
restart: unless-stopped
environment:
- JELLYFIN_URL=http://jellyfin:8096
- JELLYFIN_API_KEY=your-jellyfin-api-key
- TMDB_API_KEY=your-tmdb-api-key
- INCLUDE_EPISODES=false
- TZ=Europe/Berlin
- ENABLE_WEBHOOK=false
- SCHEDULED_TIMES=06:00,12:00,18:00 # Optional
volumes:
- ./your-local-path:/mount
ports:
- "8080:8080" # Required only if ENABLE_WEBHOOK=true
Start the container.
docker compose up -d
git clone https://github.com/Iceshadow1404/JellyfinUpdatePoster
cd JellyfinUpdatePoster
pip install -r requirements.txt
.env file in the root directory and add your configuration variables (see below).--force flag.
python main.py
JELLYFIN_URL: Required. The URL of your Jellyfin server.JELLYFIN_API_KEY: Required. Your Jellyfin API key.TMDB_API_KEY: Required. Your TMDb API key.INCLUDE_EPISODES: Set to true or false to manage episode images. Defaults to false.ENABLE_WEBHOOK: Set to true to enable the webhook trigger. Defaults to false.IGNORE_CONTENT_CHANGED: Set to true to disable content change detection and always skip processing Defaults to false.SCHEDULED_TIMES: Optional comma-separated list of HH:MM times to run scheduled updates.TZ: Optional timezone for scheduling, e.g., America/New_York.The primary workflow is to place your image files or .zip archives into the RawCover directory. The application processes them automatically based on the file naming conventions.
MovieName (Year)/poster.extShowName (Year)/poster.extShowName (Year)/Season01.extShowName (Year)/S01E02.extposter.extbackdrop.ext (placed in the same folder as a poster)The application creates and uses the following directory structure inside your mounted volume (/mount):
.
├── RawCover/ # Drop new image files and ZIPs here
├── Cover/ # Processed and organized artwork
├── Consumed/ # Source files are moved here after processing
└── Replaced/ # Old artwork is archived here when updated
For questions or help, you can message iceshadow_ on Discord or create an issue.
This project is licensed under the MIT License.
247 commits
2 commits
Python
99.6%