diff --git a/jellyfin/readme.md b/jellyfin/readme.md
index abfecdb..bc354eb 100644
--- a/jellyfin/readme.md
+++ b/jellyfin/readme.md
@@ -33,30 +33,33 @@ Starting point for me was [this viggy96 repo](https://github.com/viggy96/contain
├── jellyfin_cache/
├── jellyfin_config/
├── .env
- └── docker-compose.yml
+ └── compose.yml
```
* `/mnt/bigdisk/...` - a mounted media storage share
* `jellyfin_cache/` - cache, includes transcodes
* `jellyfin_config/` - configuration
* `.env` - a file containing environment variables for docker compose
-* `docker-compose.yml` - a docker compose file, telling docker how to run the containers
+* `compose.yml` - a docker compose file, telling docker how to run the containers
You only need to provide the two files.
The directories are created by docker compose on the first run.
-# docker-compose
+# compose
-Relatively simple compose.
-The only special thing being the passthrough of the graphic card
-for hardware accelerated transcoding.
-This is done in the `devices` section along with permissions in `group_add`.
+A relatively simple compose.
-This basic setup worked for me with modern intel and amd cpus with igpu,
-but how to setup things might change over time so one should check
-[the official documentation](https://jellyfin.org/docs/general/administration/hardware-acceleration/intel#configure-with-linux-virtualization)
+The only atypical thing is the **passthrough** of the graphic card
+for hardware accelerated transcoding.
+In the `devices` section a passthrough of a graphic card is done,
+`/dev/dri/renderD128` refering to the first gpu of the system
+In `group_add` section permissions are set.
+You want to execute the command: `getent group render | cut -d: -f3`
+to get the correct group number for you system and set it in.
-`docker-compose.yml`
+This all can be left as is even if no gpu is planned to be used.
+
+`compose.yml`
```yml
services:
@@ -73,13 +76,12 @@ services:
volumes:
- ./jellyfin_config:/config
- ./jellyfin_cache:/cache
- - /mnt/smb_share/filmy_1:/media/filmy_1:ro
- - /mnt/smb_share/filmy_2:/media/filmy_2:ro
- - /mnt/smb_share/filmy_3:/media/filmy_3:ro
- - /mnt/smb_share/shows:/media/shows:ro
+ - /mnt/bigdisk/tv:/media/tv:ro
+ - /mnt/bigdisk/movies:/media/movies:ro
+ - /mnt/bigdisk/music:/media/music:ro
ports:
- - "8096:8096"
- - "1900:1900/udp"
+ - "8096:8096" # webGUI
+ - "1900:1900/udp" # autodiscovery on local networks
networks:
default:
@@ -107,15 +109,87 @@ Caddy is used, details
`Caddyfile`
```
-jellyfin.{$MY_DOMAIN} {
+tv.{$MY_DOMAIN} {
reverse_proxy jellyfin:8096
}
```
-# First run
+# The first run
-
+
+
+Click through basic setup.
+
+WORK IN PROGRESS
+
+WORK IN PROGRESS
+
+WORK IN PROGRESS
+
+# Transcoding
+
+### The basics
+
+* a **video file** is just a bunch of pictures - **frames**,
+ somehow packed in to one file.
+* To save up disk space and bandwidth its **compressed** using some video
+ standard/codec.
+ * MPEG-2 - stuff of the past
+ * **H.264** - the most common now
+ * **H.265** - also called **HEVC**, fast spreading, 50% improved over H.264
+ * **AV1** - the future, open codec - no licencing fees, more improvements
+* Ways to transcode
+ * **Software** - cpu does the job, uses some library, it is **very cpu heavy**
+ a phone doing a software playback would either stutter, or be through
+ the entire battery in 30 minutes.
+ * **Hardware** - there is a dedicated hardware - a tiny part of a cpu/gpu/soc
+ that is designed for just one thing - to transcode a specific video standard.
+ That means it is **extremely efficient** at it.
+* Terminology
+ * **Decode** - taking a compressed video file and turning it into a viewable format.
+ * **Encode** - compressing raw video in to a specific video format
+ * **Transcode** - converting a video format in to a different format,
+ consists of both decode and encode steps
+
+
+Ideally you deploy jellyfin somewhere with an igpu to get hardware accelerated
+transcoding, but it is far from required.
+For most people, majority of media will be in H.264 or H.265 which will be
+**direct play** - no transcoding required on most devices.
+Even if theres occasional need to transcode, average cpu can do one or two streams.
+
+If you plan to serve more people and have larger library you should
+definitly plan to have something with igpu
+
+#### HDR
+
+The issue starts with 4k content, of which majority also uses
+HDR - High Dynamic Range. This is for benefit of HDR TVs, monitors, phones,...
+To play on non-HDR devices transcoding is always required and not just typical
+transcoding, but also tonemapping as trancoding HDR content without it will make colors seem
+heavily desaturated - washed out.
+
+* Not all devices like phones, PCs - browsers, TVs, streaming boxes,...
+ have build in support for all these standard.
+* If video is in H.265 but firefox on linux cant decode it,
+ jellyfin detects this and transcodes it to something that can be played.
+
+
+
+
+
+
+
+The above compose basic setup worked for me
+
+* ryzen 1700, headless, without any gpu
+* modern intel cpus with igpu - n200, i5-125600k
+* modern amd ryzens with igpu - 7700x, 5500GT
+
+but how to setup things might change over time so one should check
+[the official documentation](https://jellyfin.org/docs/general/administration/hardware-acceleration/intel#configure-with-linux-virtualization)
+
# Specifics of my setup
@@ -133,7 +207,7 @@ jellyfin.{$MY_DOMAIN} {
Description=12TB truenas mount
[Mount]
- What=//10.0.19.19/Dataset-01
+ What=//10.0.19.11/Dataset-01
Where=/mnt/bigdisk
Type=cifs
Options=ro,username=ja,password=qq,file_mode=0700,dir_mode=0700,uid=1000
@@ -176,8 +250,8 @@ than NAS.
Manual image update:
-- `docker-compose pull`
-- `docker-compose up -d`
+- `docker compose pull`
+- `docker compose up -d`
- `docker image prune`
# Useful