# 02-jellyfin.md

kstack:
  book: Centerpoint Home Lab
  chapter: Media & Entertainment
  page: Jellyfin
  tags: [jellyfin, media, streaming, open-source]
---

## Overview

Jellyfin is a free and open-source media server used as a secondary streaming
solution alongside Plex. It serves TV shows and movies from the same UnRAID NFS
share and is accessible on the LAN only.

## Access

| Type      | URL                              | Notes                               |
|-----------|----------------------------------|-------------------------------------|
| Internal  | `https://jellyfin.home.local`    | LAN access via Step-CA TLS          |
| Direct    | `http://192.168.1.85:8096`       | LAN direct access                   |

No external (internet-facing) route.

## Configuration

**Image:** `jellyfin/jellyfin:latest`
**Compose project:** Standalone (managed via Portainer)

### Ports

| Port   | Protocol | Purpose                              |
|--------|----------|--------------------------------------|
| `8096` | TCP      | Jellyfin web UI and API (host-bound) |

### Traefik Labels

```yaml
traefik.enable: "true"
traefik.http.routers.jellyfin.rule: Host(`jellyfin.home.local`)
traefik.http.routers.jellyfin.entrypoints: websecure
traefik.http.routers.jellyfin.tls: "true"
traefik.http.routers.jellyfin.tls.certresolver: step-ca
traefik.http.services.jellyfin.loadbalancer.server.port: 8096
```

### Environment Variables

| Variable  | Value             | Purpose       |
|-----------|-------------------|---------------|
| `PUID`    | `1000`            | User ID       |
| `PGID`    | `1000`            | Group ID      |
| `TZ`      | `America/Toronto` | Timezone      |

## Volumes / Bind Mounts

| Host Path                           | Container Path   | Purpose                            |
|-------------------------------------|------------------|------------------------------------|
| `/home/jeeves/docker/jellyfin/config` | `/config`      | Jellyfin database and settings     |
| `/home/jeeves/docker/jellyfin/cache`  | `/cache`       | Thumbnail and transcode cache      |
| `/mnt/Multimedia/TV`                | `/media/tv:ro`   | TV series (NFS from UnRAID, read-only) |
| `/mnt/Multimedia/Movies`            | `/media/movies:ro` | Movies (NFS from UnRAID, read-only) |

## Networks

| Network       | Purpose                          |
|---------------|----------------------------------|
| `traefik-net` | Exposes Jellyfin via Traefik     |

## Dependencies

- NFS mount `/mnt/Multimedia` must be healthy
- Step-CA for `jellyfin.home.local` TLS certificate

## Notes / Gotchas

- Media mounts are read-only (`:ro`) — Jellyfin cannot modify or delete source files.
- Jellyfin and Plex both mount the same NFS directories. Metadata and library scans
  are independent between the two servers.
- Hardware transcoding is available on Jellyfin but not explicitly configured — the
  `jellyfin/jellyfin:latest` image supports it via FFmpeg with Intel/NVIDIA hooks.
  Configure in Admin → Dashboard → Playback if needed.
- Port `8096` is also used by Emby (currently offline). Only one can be host-bound
  at a time — ensure Emby is stopped before starting Jellyfin and vice versa.

---
*Last Updated: 2026-06-16*