Un media server permette di organizzare film, serie TV, musica, fotografie, audiolibri e altri contenuti in un’unica libreria accessibile da browser, smart TV, smartphone e dispositivi compatibili. Trasforma un PC, un NAS o un server domestico in una piattaforma privata per lo streaming dei propri file, senza doverli affidare a servizi cloud esterni. Tra i progetti open source più apprezzati in questo ambito c’è Jellyfin, nato nel 2018 come fork di Emby e sviluppato con l’obiettivo di mantenere il controllo dei contenuti nelle mani dell’utente. Lo abbiamo presentato nella nostra guida dedicata a Jellyfin.
Il nuovo Jellyfin 12.0, appena presentato, costituisce uno degli aggiornamenti più rilevanti degli ultimi cicli di sviluppo. Non è una release minore e non conviene trattarla come il classico aggiornamento da installare senza verifiche: cambia lo schema di versioning, interviene profondamente sul database, porta nel server il supporto nativo per libri e fumetti, migliora la gestione delle versioni alternative degli episodi TV, introduce un nuovo layout predefinito e aggiorna due componenti fondamentali come .NET 10 e FFmpeg 8.1.
Perché Jellyfin passa direttamente alla versione 12.0
La release che, seguendo la vecchia convenzione, sarebbe diventata 10.12.0 prende il nome Jellyfin 12.0. Gli sviluppatori hanno deciso di abbandonare il prefisso 10 perché comunicava male la reale portata degli aggiornamenti: Jellyfin 10.11, per esempio, conteneva già modifiche profonde al database pur apparendo, dal numero, come una semplice release incrementale.
D’ora in avanti il primo numero dovrebbe quindi riflettere meglio la presenza di cambiamenti importanti, comprese modifiche alle API, alla struttura interna o alla compatibilità con plugin e client. Non significa che ogni major release comporterà necessariamente rotture radicali, ma rende il versioning più coerente con l’impatto effettivo degli aggiornamenti.

Jellyfin 12.0 non è un aggiornamento da installare sotto gamba
La raccomandazione più importante riguarda il backup. Jellyfin 12.0 modifica lo schema del database e riscrive parte dei dati durante il primo avvio: una volta completata la migrazione, installare nuovamente una release precedente non basta per tornare indietro. Il vecchio server potrebbe non essere più in grado di interpretare correttamente il database aggiornato.
Gli sviluppatori consigliano quindi di arrestare Jellyfin e creare una copia completa delle directory dati e configurazione. Copiare il database mentre il servizio continua a modificarlo non offre le stesse garanzie, soprattutto con SQLite, perché il backup potrebbe catturare file in uno stato incoerente.
L’aggiornamento diretto a 12.0 è previsto a partire da Jellyfin 10.10.7 oppure da qualsiasi versione 10.11.x. Chi parte da una release più vecchia dovrebbe prima passare a 10.10.7 e soltanto dopo effettuare l’upgrade alla nuova major release.
C’è anche un dettaglio apparentemente minore che può bloccare la migrazione: i nomi utente diventano case insensitive. Account come Mario e mario, considerati distinti in precedenza, entrano ora in conflitto. Prima di aggiornare conviene quindi verificare che non esistano duplicati differenziati soltanto dall’uso di maiuscole e minuscole.
Per gli amministratori che vogliono separare la migrazione del database dall’avvio effettivo del servizio arriva inoltre il parametro --mode MigrateSystem. Jellyfin esegue le operazioni necessarie e termina subito dopo, senza avviare normalmente il server. È una funzione particolarmente utile su sistemi gestiti tramite container, script o procedure automatizzate.
Il database cambia ancora: playlist e raccolte diventano relazionali
Una delle modifiche tecnicamente più interessanti riguarda playlist, raccolte e box set. Nelle versioni precedenti gli elementi collegati a una playlist finivano sostanzialmente in una grande struttura associata all’oggetto principale. Per conoscere il numero dei contenuti, mostrarne soltanto una parte o modificarne uno, Jellyfin doveva quindi caricare e interpretare una quantità di dati superiore al necessario.
Con Jellyfin 12.0 ogni elemento collegato occupa invece una propria riga nella tabella LinkedChildren: il database può contare, selezionare, aggiungere o rimuovere record senza riscrivere l’intero insieme. Anche OwnerId e PrimaryVersionId diventano vere chiavi esterne, mentre la vecchia struttura ExtraIds scompare.
La differenza può sembrare astratta finché non si considera una playlist con migliaia di brani oppure una raccolta molto ampia. In questi casi il database relazionale consente interrogazioni molto più mirate e riduce il lavoro necessario per operazioni comuni.
Jellyfin 12.0 introduce inoltre miglioramenti nelle query usate da funzioni come Continue Watching, Next Up, ricerca degli artisti, recupero dei contenuti più recenti e conteggio degli elementi visualizzati.
Le attività di manutenzione più pesanti non partono più contemporaneamente alla scansione delle librerie, evitando che due operazioni molto intensive si contendano CPU, accesso all’unità di memorizzazione e database nello stesso momento. Gli sviluppatori hanno anche introdotto eliminazioni batch per prevenire casi nei quali SQLite poteva raggiungere il limite delle variabili SQL durante la rimozione di grandi quantità di elementi.

Dopo l’upgrade serve una scansione completa delle librerie
Terminata la migrazione, Jellyfin 12.0 richiede una scansione completa delle librerie: il server deve ricostruire diverse informazioni, in particolare quelle relative alle versioni alternative dei contenuti.
Durante la prima analisi, alcuni file possono sembrare temporaneamente assenti oppure comparire di nuovo tra i contenuti recenti. Jellyfin controlla infatti ogni elemento rispetto ai file realmente presenti sul disco e ricostruisce associazioni precedentemente gestite in modo diverso. Con librerie molto grandi l’operazione può quindi richiedere più tempo del consueto.
Le versioni alternative, inoltre, non riguardano più soltanto i film. Jellyfin 12.0 permette di collegare file differenti anche agli episodi delle serie TV: una stessa puntata può quindi avere una versione 1080p, una 4K, un montaggio differente oppure edizioni con caratteristiche audio e video diverse. Anche la ripresa della riproduzione tiene conto della variante effettivamente utilizzata.
Libri e fumetti entrano direttamente nel server
Per parecchio tempo Jellyfin ha concentrato gran parte dello sviluppo sulla riproduzione video. Con la versione 12.0 cresce invece in modo evidente il supporto per libri e fumetti, con funzioni che in precedenza dipendevano in buona parte dal plugin Bookshelf.
Il server può leggere metadati da file OPF, ComicInfo e commenti ComicBookInfo, generare copertine per EPUB e archivi di fumetti supportati, individuare immagini esterne per gli audiolibri e ricavare informazioni dai nomi dei file. Quando la nomenclatura lo consente, Jellyfin riconosce titolo, indice, anno, serie, volume e capitolo. Per PDF e fumetti può inoltre determinare il numero delle pagine.
Bookshelf entra quindi in fase di dismissione: le integrazioni con Google Books e ComicVine diventano provider separati, mentre il progetto introduce anche OpenLibrary come ulteriore fonte per metadati e immagini. Compare inoltre il supporto agli identificatori ISBN.
Il client Web completa il lavoro con una libreria Modern dedicata ai libri, viste per autori, raccolte e cartelle, paginazione e miglioramenti alla lettura degli EPUB. I PDF possono sfruttare una navigazione più naturale tramite scorrimento e gli audiolibri ottengono una migliore gestione dei capitoli.
FFmpeg 8.1 cambia la base della transcodifica
Jellyfin 12.0 aggiorna il sottosistema multimediale a FFmpeg 8.1, componente centrale per decodifica, codifica, remuxing, filtri e transcodifica. È una modifica importante perché quasi ogni operazione che il server compie su audio e video passa, direttamente o indirettamente, da FFmpeg.
L’applicazione cerca di sfruttare meglio l’accelerazione hardware in varie fasi dell’elaborazione: le ottimizzazioni interessano operazioni CUDA e OpenCL come ridimensionamento dell’immagine e tone mapping, con correzioni dedicate anche ad alcune GPU Mali. Il vantaggio potenziale è concreto: se l’hardware e i driver supportano il percorso di accelerazione scelto, una parte del lavoro che altrimenti graverebbe sulla CPU può rimanere sulla GPU, riducendo il carico del server e rendendo più sostenibile la gestione di più stream contemporanei.
Particolare attenzione riguarda HDR. Quando un contenuto ad alta gamma dinamica deve essere mostrato su un display SDR, Jellyfin deve trasformarne luminosità e colori cercando di preservare il più possibile l’aspetto originale. Per i video HLG il tone mapping utilizza ora la funzione EOTF prevista dal metodo B della raccomandazione ITU-R BT.2446. Non è una modifica che l’utente seleziona da un menu, ma può incidere sulla resa delle alte luci, sulla leggibilità delle zone scure e, più in generale, sulla conversione HDR-SDR effettuata dal server.
Ci sono novità anche per Dolby Vision. Jellyfin può produrre per i contenuti Profile 5 una variante HLS identificata come dvh1 e conforme alle specifiche: una descrizione corretta del flusso permette ai client compatibili di riconoscere più facilmente il contenuto Dolby Vision e può evitare transcodifiche o fallback non necessari.
Sincronizzazione, sottotitoli e anteprime: cosa migliora durante la riproduzione
In alcuni flussi HLS Jellyfin poteva transcodificare il video mantenendo invece l’audio originale tramite semplice remux; in determinate condizioni le due componenti finivano fuori sincronia. Jellyfin 12.0 interviene proprio su questo percorso misto evitando dialoghi progressivamente sfasati rispetto alle immagini.
Anche la gestione dei sottotitoli diventa più robusta: Jellyfin utilizza SubtitleEdit per alcune operazioni di scrittura, evitando il precedente passaggio da SSA ad ASS che poteva alterare o perdere informazioni di formattazione.
Infine c’è Trickplay, cioè il meccanismo che genera le piccole anteprime visualizzate quando ci si sposta lungo la timeline di un film o di un episodio. Jellyfin 12.0 sa riutilizzare meglio i dati già presenti, gestisce con maggiore attenzione timestamp irregolari e materiale interlacciato e ripulisce i file temporanei quando la generazione fallisce.
Nuovo layout Modern e maggiore uso della cache nel browser
Il layout precedentemente proposto come sperimentale diventa il nuovo layout Modern predefinito su desktop e dispositivi mobili per gli utenti che non hanno già espresso una preferenza. La vecchia interfaccia rimane disponibile con il nome Legacy, mentre sui televisori Jellyfin conserva per ora il layout TV esistente.
I temi Dark, Light, WMC, Blue Radiance, Apple TV e Purple Haze condividono adesso una base comune costruita tramite variabili CSS. Chi utilizza personalizzazioni o fogli di stile propri farebbe bene a verificarne l’aspetto dopo l’upgrade, perché alcune regole potrebbero non comportarsi esattamente come prima.
Jellyfin Web conserva inoltre più informazioni nel browser tramite IndexedDB e TanStack Query: le schermate già visitate possono quindi ricomparire più rapidamente, evitando di recuperare nuovamente dati che il client possiede già.