Jellyfin no tiene un informe de los problemas que se acumulan en una biblioteca: la misma película añadida dos veces como dos títulos distintos, películas que nunca identificó, archivos que desaparecieron, se dañaron o se copiaron solo a medias. Library Doctor los encuentra, muestra lo que cada uno cuesta en espacio de disco y te deja arreglarlos sin borrar jamás un archivo.
Qué hace
- Duplicates: la misma película o el mismo episodio (misma serie, temporada y número de episodio) en elementos distintos. Las películas se corresponden por su id de TMDb o IMDb; las películas sin ninguno de los dos ids se corresponden por título (sin distinguir mayúsculas, acentos ni puntuación) y año, y esos grupos se marcan como by title and year — check, porque dos películas distintas pueden compartir título y año. Cada grupo muestra las versiones lado a lado — resolución, HDR, códec, bitrate y tamaño — con la mejor primero y el espacio que recuperarías quedándote solo con esa. Dos acciones: Group as versions conserva cada archivo y los muestra como versiones de un solo título (el agrupamiento de versiones propio de Jellyfin), y Quarantine aparta una versión inferior.
- Unmatched movies: películas sin ningún id de metadatos, lo que suele significar un título, año o póster equivocado y una película ausente de colecciones y recomendaciones. Cada una enlaza con la película, donde Identify de Jellyfin la corrige.
- Archivos que faltan, rotos o truncados: una comprobación en segundo plano de cada archivo de película y episodio con ffprobe y ffmpeg de jellyfin-ffmpeg. Informa de los archivos missing from disk (que faltan en el disco), cannot be read (que no se pueden leer, con el error), que no tienen no real video track (ninguna pista de vídeo real: solo una imagen, por ejemplo un archivo de bytes aleatorios en el que ffprobe adivina una imagen), que no tienen no duration (duración: cabecera rota), que tienen zero duration (duración cero) o que están truncated (descarga o copia incompleta): se descodifican los últimos 3 segundos del vídeo y un archivo cuyo final no se puede descodificar se informa como incompleto.
- Informe de espacio: el total, después el espacio por biblioteca, por resolución (4K, 1080p, 720p, SD) y por códec de vídeo, y los 20 archivos más grandes que ningún usuario ha visto.
- Cuarentena en lugar de borrado: ver abajo. El plugin nunca borra nada.
- En inglés y rumano.
La cuarentena: no se borra nada
Cuando pulsas Quarantine en una versión (y confirmas), el plugin mueve el archivo de vídeo y los archivos de al lado que comparten su nombre — subtítulos, .nfo, imágenes como Movie.srt, Movie.en.srt, Movie.nfo, Movie-poster.jpg — a una carpeta llamada .medialab-de-sters (en rumano, «para borrar») en la raíz de la carpeta de biblioteca que los contiene, conservando sus subcarpetas. Como la carpeta está dentro de la misma carpeta de biblioteca, normalmente está en el mismo disco y el movimiento es instantáneo. Jellyfin reescanea después la biblioteca.
El movimiento se registra antes de tocar ningún archivo. Si un archivo no se puede mover (por ejemplo, por permisos), los archivos ya movidos se devuelven a su sitio y no queda ninguna copia en .medialab-de-sters; si devolverlos tampoco es posible, la entrada se queda en la lista de cuarentena para que puedas restaurarla.
La lista Quarantine muestra cada título movido con su ubicación original y su tamaño. Restore devuelve los archivos exactamente a donde estaban y reescanea; rechaza, sin tocar nada, si un archivo está a la vez en cuarentena y de vuelta en su ruta original. El plugin nunca sobrescribe ni borra un archivo: cuando estés seguro, elimina tú mismo la carpeta .medialab-de-sters del disco.
Se rechazan los archivos fuera de las carpetas de biblioteca y los archivos que ya están en una carpeta .medialab-de-sters. Group as versions no mueve ningún archivo.
Requisitos
- Jellyfin Server 12.2 o posterior.
- Para la comprobación de archivos: ffprobe y ffmpeg, que incluye jellyfin-ffmpeg (el plugin usa las rutas que Jellyfin usa para la transcodificación).
- Para la cuarentena: el usuario de Jellyfin necesita acceso de escritura a las carpetas de biblioteca (para crear
.medialab-de-stersen la raíz de la carpeta de biblioteca y para sacar archivos de sus carpetas). En Docker, los volúmenes de medios no deben montarse de solo lectura. Sin acceso de escritura funcionan todos los informes; solo la cuarentena no puede mover archivos.
Preguntas frecuentes
¿Puede borrar mis películas? No. El plugin no tiene función de borrado. La cuarentena solo mueve archivos dentro de la misma carpeta de biblioteca y Restore los devuelve.
¿Por qué la misma película aparece dos veces en Jellyfin? Normalmente hay dos archivos de la misma película en carpetas distintas, así que Jellyfin crea dos elementos. Library Doctor los encuentra por su id de TMDb o IMDb (o por título y año cuando no tienen id) y te deja agruparlos como versiones o poner en cuarentena la versión inferior. Consulta la guía.
¿Puede encontrar cada archivo dañado? Encuentra archivos que faltan, que no se pueden leer, sin pista de vídeo real o sin duración, y archivos cuyo final no se puede descodificar. Un archivo cortado muy cerca de su final (por ejemplo, sobre el 98 %) puede seguir teniendo fotogramas descodificables en sus últimos segundos y pasar la comprobación, y un daño en mitad de un archivo no se busca.
Qué envía y adónde
- Sin contacto externo aparte del cliente de licencias. Sin consultas de metadatos en línea: los duplicados y los títulos sin identificar se calculan a partir de los ids (TMDb/IMDb…) que el servidor ya guarda.
- Indirectamente: tras un movimiento de cuarentena o una restauración, el plugin inicia el escaneo habitual de la biblioteca, que puede contactar con los proveedores de metadatos configurados en el servidor (comportamiento del servidor, no del plugin). «Group as versions» usa la función nativa del servidor.
- La comprobación de archivos (solo bajo demanda) ejecuta el ffprobe del servidor sobre cada película o episodio, localmente. Sin escaneos programados.
- Además, el cliente de licencias, igual en todos los plugins: consulta Licencias y privacidad en nuestros plugins.
Guardado localmente:
- La cuarentena no borra nada: el archivo y sus acompañantes (subtítulos, nfo, imágenes) se mueven a
<library root>/.medialab-de-sters/; el borrado definitivo es cosa tuya. state/quarantine.json: título, fecha, rutas original y de cuarentena, tamaño.- Los resultados de la comprobación de archivos se guardan solo en memoria. El plugin lee de la biblioteca si algún usuario ha visto un título (para «los más grandes no vistos»), sin guardarlo.
Compatibilidad con clientes
- Solo página de administración: Jellyfin Web / medialab Server ✅. Las funciones se ejecutan en el servidor, así que los clientes (apps, televisores) solo ven el efecto (títulos movidos o agrupados).
- Pruebas: de extremo a extremo a nivel de API (16/16), comprobación del final del archivo sobre 400/400 archivos reales sin falsos positivos.
- Limitaciones: el servidor necesita acceso de escritura a las carpetas de biblioteca para la cuarentena; un
.tstruncado no se puede detectar (no hay duración guardada).
Leyenda: ✅ verificado (prueba de extremo a extremo o en el dispositivo) · 🟢 en el servidor, funciona con cualquier cliente (por diseño, sin prueba específica para cada cliente) · ➖ no aplicable · ❔ no probado.
Licencia
El plugin es de código abierto (GPL-3.0). Las compilaciones listas para instalar son públicas, igual que el código fuente. Lo que compras es la suscripción: la licencia para usar el plugin en un servidor de Jellyfin, las actualizaciones que incluye tu plan y el soporte: cada actualización mientras la suscripción esté activa, a través de tu repositorio privado de plugins, y ayuda cuando algo no funcione. El plugin comprueba la clave de suscripción una vez al día; sin una suscripción válida se detiene hasta que renueves (no se borra nada). Mensual, anual o de por vida (la de por vida incluye un año de actualizaciones), o incluido en el paquete para Jellyfin. 30 días de prueba gratis.
Código fuente. Para cada versión, el código fuente correspondiente completo es público, junto a la compilación, en el registro de cambios, y también en tu cuenta (Cuenta → Licencias, Código fuente); cada archivo comprimido contiene el texto completo de la GPL-3.0 (LICENSE). Si necesitas el código fuente de una versión que ya no puedes descargar, pídenoslo y te lo enviamos. Consulta la sección 10 del EULA.
