Jellyfin🔗
Jellyfin on tasuta meediasüsteem, mis annab teile kontrolli oma meedia haldamise ja voogedastuse üle. See on alternatiivne Emby-le ja Plex-ile, pakkudes meediat pühendatud serverist lõppkasutaja seadmetesse mitme rakenduse kaudu
Lisaks on kasutusel Proxmox host käest edasi jagatud AMD iGPU, et oleks parem Trickplay genereerimise aeg ja, et see kasutaks vähem CPU.
Saab ka sama juhendit kasutada ka dGPU edastamiseks LXCsse.
Seadistus🔗
Jellyfin Compose fail
# Jellyfin
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
devices:
- /dev/dri/renderD128:/dev/dri/renderD128 # AMD iGPU proxmox host käest
environment:
- PUID=0
- PGID=0
- TZ=Europe/Tallinn
group_add:
- "108" # render group
- "44" # video group, ei map-i 'video' gruppi hostist LXC-sse, kuna transkoodimiseks on peamiselt vaja 'render' gruppi. Dockeris 'video' grupi lisamine on igaks juhuks, kuid ligipääs 'card' seadmetele võib olla piiratud."
volumes:
- ./jellyfin:/config
- ./media/movies:/movies
- ./media/tv-shows:/tv-shows
ports:
- 8096:8096
cpus: '2.0' # et sitt ei tapaks kogu LXC ära kui ffprobe v library scan jookseb...
mem_limit: 5G # mem limit, et cache ei kasvaks lõpmatuseni
restart: unless-stopped
GPU kasutamine🔗
Kõigepealt mainin, et tegemist on unprivileged LXC-ga.
Proxmox host🔗
Kontrolli kas proxmox saab AMD iGPU kätte:
lspci -nnk | grep -EA3 'VGA|3D|Display'
Siin võiks kuvada, et kasutab driver amdgpu.
Vaata mis seadme faili nimi on:
ls -l /dev/dri
Failid mis algavad õiguste tabelis C... ja on gruppidega render ja video on õiged asjad.
renderD128 võiks olla faili nimi kui muid GPUsid ei ole ühendatud:
# ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 80 Mar 8 00:40 by-path
crw-rw---- 1 root video 226, 1 Mar 8 02:06 card1
crw-rw-rw- 1 root render 226, 128 Mar 8 00:40 renderD128
Installi draiverid:
apt update
apt install mesa-va-drivers vainfo -y
Kui tegemist mingi vana seadmega, siis võibolla on vajalik installida ka va-driver-all.
Kontroll:
vainfo --display drm --device /dev/dri/renderD128
Piisaks ka lihtsalt vainfo, aga kui tegemist headless serveriga, siis see on parem.
NB! Vajab tegelt restart teha peale installi, sest enne ei pruugi kuvada korrektset infot, aga selle sammu võib viimaseks jätta.
Nii proxmox host kui ka LXC masinas saa 'render' gruppi id:
getent group render
Proxmox sai 104
LXC sai 108
NB! Asenda need numbrid oma getent group render väljundiga!
Lisa proxmox-i root kasutajal õigus kaardistada hosti GID 104 konteinerisse:
echo "root:104:1" >> /etc/subgid
Kui see rida juba olemas on, ei tohi seda duplikeerida.
Saad kontrollida:
grep root /etc/subgid
Gruppi ID-de põhjal lisa lxc id.conf faili järgmine info:
nano /etc/pve/lxc/sinu_lxc_id.conf
# --- GPU Passthrough Configuration ---
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
# Example with the whole folder passed through, not used because file mount is more precise and safer.
# lxc.cgroup2.devices.allow: c 226:* rwm
# lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
# --- ID Mapping for Host(104) to LXC(108) ---
lxc.idmap: u 0 100000 65536
# 1. Map Container GIDs 0-107 to Host 100000-100107
lxc.idmap: g 0 100000 108
# 2. Map Container GID 108 (render) to Host GID 104 (render)
lxc.idmap: g 108 104 1
# 3. Map Container GIDs 109-65535 to Host 100109-165535
lxc.idmap: g 109 100109 65427
Jellyfin LXC🔗
installi draiverid:
apt update
apt install mesa-va-drivers vainfo -y
Saa 'video' gruppi id:
getent group video
Debian/Ubuntu puhul on video tavaliselt 44
Lisa compose faili jellyfin-ile juurde devices ja group_add:
devices:
- /dev/dri:/dev/dri
group_add:
- "108" # render group
- "44" # video group, ei map-i 'video' gruppi hostist LXC-sse, kuna transkoodimiseks on peamiselt vaja 'render' gruppi. Dockeris 'video' grupi lisamine on igaks juhuks, kuid ligipääs 'card' seadmetele võib olla piiratud."
Tee LXC-le restart, draiveri install nõuab seda.
Kontrolli kas töötab:
docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128
Kui kuvab erinevaid codec-e, siis korras.
Kui tahad 100% kindel olla, siis lae alla radeontop rakendus Proxmox peale ja pane Jellyfin-is Trickplay või Transcode jooksma ja Proxmox shell-i sisesta:
radeontop
Jellyfin WebUI🔗
Transcoding🔗
Mine jellyfin-is Dashboard > Playback > Transcoding
Lülita sisse Hardware acceleration ja vali VAAPI
VAAPI seadmeks vali renderD128 ja lülita sisse kõik codec-id mida seade toetab
Enamus tänapäevased seadmed peaks toetama kõike. AV1 tugi on olemas vaid uuematel (RDNA2/3 arhitektuuriga) kaartidel.
Pane linnuke "Enable hardware encoding" ette
Muid sätteid ma ei näppinud, aga võid:
Testida ja võibolla muuta H.265 / 264 CRF numbrit madalamaks
Linnuke panna "Allow subtitle extraction on the fly" sisse lülitada
Trickplay🔗
Mine Jellyfin-is Dashboard > Playback > Trickplay
Lülita sisse esimesed kahele linnukese kasti:
"Enable hardware decode"
"Enable hardware accelerated MJPEG encoding"
Lisaks võid panna linnukese järgmisse kasti ka kui tahad, et asi liiguks kiiremini kui sul on väga palju filme/saateid
"Only generate images from key frames"
Kõige alla soovitan ka muuta "FFmpeg Thread" numbrit
Mul on LXC-le antud 8 lõimu ja Jellyfin-ile antud 2 tuuma (mis peaks kaasama ka lõimud ehk kokku 4 lõimu?)
Kui jätab selle 0 peale, siis see kasutab kõike mis kätte saab ja võib tõmmata LXC umbe
Troubleshoot🔗
Kui millegipärsat ei tööta, siis proovi järgmisi soovitusi
- Anna õigus ligipääsuks (ma tegele ei ole kindel kas see on vajalik):
chmod 666 /dev/dri/renderD128 - Kui proxmox ei taha iGPU kasutada, siis võib aidata kui lisad
amdgpumodules conf faili:
echo "amdgpu" >> /etc/modules-load.d/amdgpu.conf
Või kui sa ei ole root kontoga:
sudo sh -c 'echo "amdgpu" >> /etc/modules-load.d/amdgpu.conf'
Peale resa võiks lspci käsk kuvada "kernel driver in use: amdgpu" - I dunno :)
Jellyfin webui kaudu🔗
Doc pooleli
Lisa conf rakenduses endas🔗
Custom CSS sätted🔗
Loe enne
Custom CSS-id võivad pidevalt katki minna
Kui on mingi viga siis enamus ajast lehe või rakenduse refresh teeb korda
Backdrops teeb ilusamaks
Peab olema sisse lülitatud üks kontopõhine säte! Töötab ka ilma, aga nii on palju ilusam
Settings > Display > Libraries > Backdrops
Kuna see on veits buggy säte mis lülitab iseennast välja vahest, siis kasutan pluginat selle force-imiseks
Abyss-Jellyfin
Projekt siin - https://github.com/AumGupta/abyss-jellyfin
Aga customisation tehtud tema veebilehe abiga - https://aumgupta.github.io/abyss-jellyfin/#customise
@import url('https://cdn.jsdelivr.net/gh/AumGupta/abyss-jellyfin@main/abyss.css');
/* Accent colour
Format: R, G, B (no rgb() wrapper)
Used for highlights, active states, progress bars. */
:root {
--abyss-accent: 255, 100, 120;
--abyss-radius: 12px;
--abyss-indicator: 55, 55, 55;
}
/* Custom font: Import any Google Font and override body. */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');
body {
font-family: "Inter", sans-serif;
}
Alternatiivid🔗
Ultrachromic
CSS võetud siit > https://github.com/CTalvio/Ultrachromic ja lisasin ka mõne enda muudatuse:
/* Ultrachromic by CTalvio */
/* Recommended */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/fixes.css');
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/jf_font.css');
/* Required */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/base.css');
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/accentlist.css');
/* Rounding */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/rounding.css');
/* Smaller cast list */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/smallercast.css');
/* Compact episode list */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/episodelist/episodes_grid.css');
/* Transparent top bar */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/header/header_transparent.css');
/* Login screen */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/login/login_minimalistic.css');
/* Input fields */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/fields/fields_border.css');
/* Watched / Unwatched indicators */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/cornerindicator/indicator_corner.css');
/* Skin type */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/type/dark_withaccent.css');
/* Title page */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/titlepage/title_banner-logo.css');
/* Progress bar */
@import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/progress/floating.css');
/* Style backdrop (personal: removed blur) */
.backdropImage {filter: saturate(120%) contrast(120%) brightness(40%);}
/* Login background not used because the image is 1080p, jellyfin will not handle it well */
/* Accent and roundingd */
:root {--accent: 98, 121, 205;}
:root {--rounding: 12px;}
/* Remove the gay ass play button from the middle of the image!!! */
.cardOverlayButton.cardOverlayButton-hover.itemAction.paper-icon-button-light.cardOverlayFab-primary,
.listItemImageButton.itemAction.paper-icon-button-light{
display:none;
}
Elegant fin
CSS võetud siit - https://github.com/lscambo13/ElegantFin
/* Elegantin Skin */
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/ElegantFin-jellyfin-theme-build-latest-minified.css");
/* Elegantin Media Bar Plugin */
@import url("https://cdn.jsdelivr.net/gh/lscambo13/ElegantFin@main/Theme/assets/add-ons/media-bar-plugin-support-latest-min.css");
/* Material Icon for LG + Some other Effects like Hover Change Layout of button.. */
:root{
--overlayPlayButtonPosition: 50%;
--cardHoverEffect: none;
--extraCardButtonsVisibility: block;
--iconPack: 'Material Icons';
}
Pluginad🔗
Plugin repod🔗
Pluginad mida ma kasutan nõuavad neid reposid:
Jellyfin Stable (official pluginad):
https://repo.jellyfin.org/files/plugin/manifest.json
File Transformation plugin (vajalik):
https://www.iamparadox.dev/jellyfin/plugins/manifest.json
Jellyfin-enhanced (nõuab vajalikku pluginat):
https://github.com/n00bcodr/Jellyfin-Enhanced
Jellyfin Tweaks (Force Enable Backdrops jaoks kasutan):
https://raw.githubusercontent.com/n00bcodr/JellyfinTweaks/main/manifest.json
Pluginad mida installida🔗
-
General
- Chapter Segments Provider
- Custom Tabs
- DLNA - ei tea kas tegelt vajalik
- File Transformation
- Home Screen Sections
- Jellyfin Tweaks
- JellyfinEnhanced
- Kodi Sync Queue
- Media Bar
- Playback Reporting
- Plugin Pages
- Reports
- Session Cleaner
- Simkl - valikuline, tracking service
- Trakt - valikuline, tracking service
- Transcode Killer
-
Metadata
- AniDB
- AniList
- AniSearch
- Artwork
- Fanart
- Kitsu
- Open Subtitles - Nõuab kontot, asendatud Bazarr-iga
- TMDb Box Sets
- Tvmaze
- TheTBDB
Pluginate seadistamine (tähestiku järjekorras)🔗
- AniDB

- AniList

- AniSearch

- Custom Tabs
Display Text:
> Requests
HTML content:
- Jellyfin Tweaks

- OMDb
Lülita sisse - Open Subtitles
Kontot vaja kui tahad nende käest sube alla laadida, aga ma kasutan nüüd Bazarr - Session Cleaner
30 päeva - TheTVDB

- Transcode Killer
Muutsin 1x1 reso peale, võibolla aitab sellega kui läheb transcode tööle isegi kui ei tohiks