Library Doctor Jellyfin — ghid

Instalare

Ai nevoie de Jellyfin Server 12.2 sau mai nou și de un cont MediaLab Works cu o licență care acoperă plugin-ul (abonament activ, licență lifetime în perioada de actualizări, Pachetul Jellyfin sau proba gratuită de 30 de zile).

Din depozitul tău de plugin-uri (recomandat). Jellyfin instalează și actualizează apoi singur plugin-ul.

  1. În contul MediaLab Works deschide Licențe → Depozitul de plugin-uri Jellyfin și apasă Creează adresa. Copiaz-o: e privată (conține un token), deci nu o da mai departe; o poți regenera sau revoca oricând.
  2. În Jellyfin deschide Tablou de bord → Plugin-uri → „Repositories”, apasă +, dă-i un nume (de exemplu MediaLab Works), lipește adresa și salvează.
  3. În Tablou de bord → Plugin-uri → Catalog găsește Library Doctor by MediaLab, apasă Instalează, apoi repornește Jellyfin.

Depozitul arată doar plugin-urile acoperite de licențele tale și doar versiunile permise. Linkurile de descărcare sunt semnate și expiră după câteva ore, așa că Jellyfin citește mereu o listă proaspătă.

Din catalogul public. https://medialab.works/jellyfin/manifest.json arată toate plugin-urile MediaLab Works lansate, cu versiunile lor publice; medialab Server îl adaugă singur. Îl poți adăuga la fel ca să instalezi un plugin înainte să ai o cheie: plugin-ul îți cere apoi licența sau pornește perioada de probă din pagina lui Licență. Cu o licență lifetime a cărei perioadă de actualizări s-a încheiat, folosește depozitul tău privat, care oferă doar versiunile permise de licență.

Manual, dintr-o arhivă zip.

  1. În Cont → Licențe descarcă jf-librarydoctor_x.y.z.zip (SHA-256 al fișierului apare lângă buton).
  2. Dezarhivează-l într-un dosar nou Library Doctor by MediaLab_x.y.z.0 din dosarul de plugin-uri Jellyfin:
    • Linux (pachet): /var/lib/jellyfin/plugins/
    • Docker (imaginea oficială): /config/plugins/ din volumul de configurare
    • Windows: %ProgramData%\Jellyfin\Server\plugins\
  3. Repornește Jellyfin.

Activarea licenței

  1. Deschide pagina plugin-ului din Tablou de bord → Plugin-uri → Library Doctor by MediaLab și apasă Licență.
  2. Lipește cheia de licență și apasă Activează cu cheia. Plugin-ul contactează serverul de licențe, leagă cheia de acest server Jellyfin și arată licența Activă.
  3. Nu ai încă o cheie? Pe aceeași pagină scrii adresa de e-mail și pornești proba gratuită de 30 de zile (card necesar, nimic de plată azi) sau cumperi o licență; plugin-ul se activează singur după plată.

Licența se verifică o dată pe zi și la fiecare pornire a Jellyfin. Fără internet plugin-ul merge încă 7 zile de la ultima verificare reușită. Fără o licență valabilă plugin-ul își oprește activitatea și rămâne funcțională doar pagina Licență (probă, cheie, reînnoire); nu se șterge nimic și totul revine imediat ce licența e din nou valabilă. Mută licența (eliberează serverul) de pe aceeași pagină eliberează cheia pentru alt server.

Actualizare și revenire

  • Din depozit: Jellyfin arată versiunile noi în Tablou de bord → Plugin-uri și poate actualiza plugin-ul automat; repornește Jellyfin ca să încarce versiunea nouă.
  • Din pagina Licență a plugin-ului: cu o licență valabilă, Instalează actualizarea aduce cea mai nouă versiune permisă de licență, iar Rollback la x.y.z întoarce versiunea anterioară (de exemplu dacă ceva nu mai merge după o actualizare). Repornește Jellyfin după oricare dintre ele. Ambele pachete se verifică după suma de control publicată de serverul de licențe.
  • O licență lifetime primește versiunile apărute în perioada ei de actualizări; după aceea plugin-ul merge mai departe pe ultima versiune permisă.
  • După Rollback la x.y.z, actualizarea automată Jellyfin a acelui plugin se oprește până la următoarea Instalează actualizarea din pagina Licență, deci sarcina programată Update Plugins (la pornire și zilnic) nu mai aduce înapoi versiunea nouă.
  • Licența lifetime și actualizările automate. Catalogul public Jellyfin (https://medialab.works/jellyfin/manifest.json) oferă mereu cea mai nouă versiune. După ce s-a încheiat perioada de actualizări a unei licențe lifetime, versiunile apărute ulterior nu sunt licențiate: dacă actualizarea automată a plugin-urilor din Jellyfin instalează una, plugin-ul se oprește cu „version not licensed” până revii cu Rollback la x.y.z din pagina lui Licență sau cumperi un abonament de actualizări. Ca să eviți asta, nu lăsa Jellyfin să actualizeze automat acest plugin: adaugă depozitul tău privat de plugin-uri, care oferă doar versiunile permise de licență, în locul catalogului public, sau scoate declanșatoarele sarcinii programate Update Plugins din Tablou de bord → Sarcini programate (asta oprește actualizările automate pentru toate plugin-urile).

Codul sursă

Sursa GPL-3.0 a fiecărei versiuni e în Cont → Licențe (Cod sursă), lângă descărcare, ca arhivă .tar.gz făcută din commit-ul exact al versiunii.

Configurare

Deschide Library Doctor din meniul tabloului de bord Jellyfin (doar administratorii). Nu e nimic de setat: pagina citește bibliotecile de filme și episoade de fiecare dată când o deschizi.

Înainte să folosești carantina, dă-i Jellyfin drept de scriere în folderele bibliotecilor. Carantina creează un folder .medialab-de-sters în rădăcina fiecărui folder de bibliotecă și mută fișiere din folderele lor, deci utilizatorul sub care rulează Jellyfin (pe Linux de obicei jellyfin) are nevoie de drept de scriere în folderele bibliotecilor și în folderele din ele. În Docker, montează volumele cu filme pentru citire și scriere (fără :ro). Restul plugin-ului doar citește.

Utilizare zilnică

  1. Cifrele de sus: fișiere video, grupuri de duplicate, spațiul de recuperat din duplicate, filme nepotrivite și mărimea totală.

  2. Duplicate: fiecare grup arată versiunile, cu cea mai bună prima și marcată cea mai bună (întâi rezoluția mai mare, apoi HDR, apoi un codec mai eficient — AV1, HEVC, VP9 — apoi debitul).

    • Filmele se compară după id-ul TMDb sau IMDb, episoadele după serial, sezon și număr de episod.
    • Filmele fără id TMDb sau IMDb se compară după titlu și an. Grupurile lor sunt marcate după titlu și an (fără id de metadate) — verifică: deschide-le pe amândouă și asigură-te că e chiar același film înainte să le grupezi sau să muți unul în carantină (un remake poate avea același titlu și, uneori, același an).
    • Grupează ca versiuni păstrează toate fișierele și le face un singur titlu, cu alegerea versiunii la redare (gruparea de versiuni a Jellyfin). Nu se mută niciun fișier.
    • Carantină, la o versiune mai slabă, cere confirmare și mută fișierul și însoțitoarele lui în carantină (vezi mai jos).
  3. Filme nepotrivite: filmele fără id de metadate. Apasă Deschide, apoi folosește Identifică din Jellyfin ca să alegi filmul corect; dispare din listă la următoarea deschidere a paginii.

  4. Fișiere lipsă, stricate sau tăiate: apasă Verifică fișierele. Verificarea rulează în fundal, fișier cu fișier, și își arată progresul; la o bibliotecă mare durează și poți părăsi pagina. Pentru fiecare fișier verifică dacă există, îl citește cu ffprobe (cel mult 30 de secunde), apoi decodează ultimele 3 secunde ale videoului cu ffmpeg (cel mult 60 de secunde). Fiecare problemă apare cu cauza:

    • lipsește de pe disc;
    • nu poate fi citit, cu eroarea;
    • fără pistă video: singurul „video” e o imagine (coperta nu contează ca video), ca într-un fișier cu octeți aleatori;
    • fără durată (antet stricat);
    • durată zero;
    • sfârșitul lipsește (descărcare/copiere incompletă): ultimele secunde nu se pot decoda. Un fișier tăiat foarte aproape de final (de exemplu pe la 98%) poate trece totuși, pentru că ultimele lui secunde pot avea încă cadre care se decodează.

    Rezultatul se păstrează până la repornirea Jellyfin.

  5. Spațiu: spațiul pe biblioteci, pe rezoluții și pe codecuri, plus cele mai mari 20 de fișiere pe care nu le-a vizionat niciun utilizator.

Carantina

  • Ce se mută: fișierul video și fișierele din același folder al căror nume începe cu același nume urmat de . sau - — de exemplu Film (2010).mkv cu Film (2010).ro.srt, Film (2010).nfo și Film (2010)-poster.jpg. Celelalte fișiere din folder rămân pe loc.
  • Unde: în .medialab-de-sters din rădăcina folderului de bibliotecă în care se află fișierul, cu aceleași subfoldere (/media/filme/Film (2010)/Film (2010).mkv ajunge în /media/filme/.medialab-de-sters/Film (2010)/Film (2010).mkv). Dacă în carantină există deja un fișier cu același nume, cel nou merge într-un subfolder cu nume unic, așa că nu se suprascrie nimic.
  • Dacă mutarea eșuează la jumătate (de exemplu un fișier însoțitor nu se poate muta): fișierele deja mutate se pun la loc, iar copia lăsată în .medialab-de-sters de o mutare întreruptă între discuri se șterge, așa că nu ajungi cu același fișier în două locuri. Dacă nici punerea la loc nu reușește, intrarea rămâne în lista Carantină, iar Readu aduce înapoi ce s-a mutat. Pagina arată eroarea.
  • După mutare, Jellyfin rescanează biblioteca, iar versiunea mutată dispare din ea; Jellyfin nu importă folderul .medialab-de-sters.
  • Readucerea: lista Carantină arată fiecare titlu cu căile inițiale și mărimea. Readu mută fișierele înapoi exact de unde au plecat și rescanează biblioteca. Dacă un fișier se află și în carantină, și pe calea lui inițială (de exemplu ai adăugat filmul din nou), readucerea e refuzată și nu se atinge nimic.
  • Ștergerea definitivă o faci tu: plugin-ul nu șterge niciodată. Când ești sigur, ștergi de pe disc folderul .medialab-de-sters (sau fișierele din el); abia atunci se eliberează spațiul.
  • Lista fișierelor din carantină se păstrează în folderul de date al plugin-ului, deci rămâne și după repornirea Jellyfin. Nu redenumi și nu muta folderul .medialab-de-sters cât timp ai ceva de readus din el.

Probleme frecvente

  • Carantina, Readu sau Grupează ca versiuni arată „Nu s-a putut”: mesajul de după spune motivul.
  • Carantina nu reușește: de obicei Jellyfin nu are drept de scriere în folderul bibliotecii; vezi Configurare. Sunt refuzate și fișierele din afara folderelor bibliotecilor Jellyfin și cele aflate deja în .medialab-de-sters.
  • Readucerea nu reușește: pe calea inițială există deja un fișier (de exemplu ai adăugat filmul din nou). Mută sau șterge acel fișier, apoi readu.
  • Toate fișierele apar „nu poate fi citit”: ffprobe nu a fost găsit; instalează jellyfin-ffmpeg și verifică-i calea în Tablou de bord → Redare → Transcodare.
  • Un grup marcat „după titlu și an — verifică” conține două filme diferite: nu grupa și nu muta nimic în carantină; identifică ambele filme în Jellyfin, iar după ce primesc id-urile TMDb sau IMDb nu mai sunt grupate.
  • Un film apare de două ori în bibliotecă, dar nu e la duplicate: cele două iteme au id-uri diferite, sau unul are id și celălalt nu (atunci identifică-l întâi).
  • Un fișier care nu pornește nu e raportat: deteriorarea poate fi în mijlocul fișierului, care nu se verifică, sau fișierul a fost tăiat foarte aproape de final.

Versiunea gata de instalat e publică; folosirea plugin-ului necesită o licență sau perioada de probă gratuită de 30 de zile.