Jellyfin
These days I'm running Jellyfin as a NixOS module.
Additional Settings
Allow movie collections within movies
Dashboard -> Libraries -> Display panel -> Check "Group movies in collections"
Archive
Saved for archive purposes
Jellyfin is the volunteer-built media solution that puts you in control of your media. Stream to any device from your own server, with no strings attached. Your media, your server, your way.
Docker
Bellow is my compose file for Jellyfin, be careful as It differs from the original LSIO Jellyfin compose setup.
Note: You can also just pass one large folder to Docker which has all your media. Then use Jellyfin UI to add individual folders as your content sources. Again, my compose is for my use case, and all my shares are broken up ZFS datasets so I'm able to snapshot, rollback, and send/receive smaller datasets without needing to perform tasks on all the HUGE amounts of media data.
Super handy to just zfs send -v tank/media/tv@${DATE}-backup | ssh remoteLocation zfs receive chopper/media/tv
You do not need to follow my naming convention for the Volumes
I pass to docker, this is legacy from my Kodi days🤯. Make it more human readable so when you are in the Jellyfin UI setting up your media libraries it is painfully obvious which folders hold which types of media. This way you can propery set your scrapers.
- /mnt/share/anime/tv:/data/anime-tv
- /mnt/share/documentary/tv:/data/documentary-series
- /mnt/share/movies:/data/movies
- /mnt/share/anime/movies:/data/anime-movies
- /mnt/share/documentary/movies:/data/documentary-movies
- /mnt/share/kids:/data/kids
docker-compose.yaml
---
version: '2.4'
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
mem_limit: 4G
environment:
- PUID=1000 # Set UID of user
- PGID=100 # Set GID of user
- TZ=${LOCATION}
- JELLYFIN_PublishedServerUrl=${FQDN-JELLYFIN}
#- DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel
devices:
- /dev/dri:/dev/dri
volumes:
- ${DATA-JELLYFIN}:/config
- /mnt/cache:/config/cache
- /mnt/share/tv:/data/tvshows
- /mnt/share/anime/tv:/data/tvshows2
- /mnt/share/documentary/tv:/data/tvshows3
- /mnt/share/movies:/data/movies
- /mnt/share/anime/movies:/data/movies2
- /mnt/share/documentary/movies:/data/movies3
- /mnt/share/kids:/data/movies4
- /mnt/share/3d/movies:/data/movies5
- /mnt/share/3d/documentary:/data/movies6
- /mnt/share/standup/movies:/data/movies7
- /mnt/share/standup/tv:/data/tvshows4
- /mnt/share/tedtalks:/data/movies8
- /mnt/share/skateboarding:/data/sk8
ports:
- 8096:8096
networks:
- swag
# Live TV metadata provider zap2xml
# zap2xml:
# image: shuaiscott/zap2xml:latest
# container_name: zap2xml
# restart: unless-stopped
# volumes:
# - ${DATA-ZAP2XML}:/data
# environment:
# - USERNAME=${USER-ZAP2XML}
# - PASSWORD=${PASS-ZAP2XML}
# - OPT_ARGS=-I -D
# - XMLTV_FILENAME=xmltv.xml
networks:
swag:
external: true
Jellyfin
Folder Structure
There are great docs from the Koid project here that talk naming convention for scraping metadata and artwork. These concepts hold true for Jellyfin.
Theme
Artwork Size
For 4K monitors you should proportionally upscale but keep aspect ratio of background and backdrops.
Name | Size |
---|---|
Background / Drops | 1920px x 1080px |
Playlist Poster | 389px x 389px |
Banner | 1000px x 185px |
Poster | 1000px x 1500px |
TV Seasons | 1000px x 1500px |
TV Series | 1000px x 562px |
Logo | 800px x 310px |
Thumb Small | 500px x 281px |
Thumb Alt. | 400px x 155px |
Thumb HD | 1000px x 562px |
Troubleshooting
inotify limit
inotify watches limit reached
When checking the docker logs I was throwing this error, as your directory grows the default 8192
will not suffice. You can increase this value on the docker host system to resolve.
I found the solution through reddit which pointed me to the Jellyfin docs here.
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p