Si usas Jellyfin en un hogar rumano —el tuyo aquí, o familia en Alemania, España, Francia o Italia viendo la misma biblioteca por internet— probablemente hayas vivido esto: el subtítulo carga, poco a poco se va desfasando y al minuto veinte el diálogo va una escena por detrás. Nueve de cada diez veces el archivo está bien y el subtítulo también; simplemente se hicieron para releases distintas.
Este tutorial va de arreglar la causa, no el síntoma. Rosub es un plugin de Jellyfin que busca subtítulos en rumano en subs.ro y elige el archivo hecho para tu release, y después verifica la sincronía con el subtítulo ya incrustado en tu vídeo antes de guardar nada.
Por qué se desincronizan los subtítulos
Un subtítulo está ajustado a un corte concreto de una película o episodio. Cambia el grupo de release, la fuente (WEB-DL, BluRay, HDTV), el servicio del que viene o la tasa de fotogramas, y los tiempos de las líneas ya no cuadran. A veces el desfase es un desplazamiento constante —todo el archivo va dos segundos adelantado— y a veces crece a lo largo del metraje, lo que significa que las dos versiones tienen cortes distintos y ningún desplazamiento simple las va a salvar.
Una búsqueda de subtítulos que solo coincide por título y año te dará sin problema un archivo hecho para otra release. Ese es el desfase que ves. La solución es coincidir por el nombre de release y verificar la sincronía antes de guardar el subtítulo.
Requisitos previos
- Jellyfin Server 12.2 o superior, en Linux, Windows o Docker.
- Una clave de API gratuita de subs.ro, desde subs.ro en Mi cuenta → API.
- Opcional: una clave de API gratuita de OpenSubtitles.com, usada solo como alternativa.
- El
ffprobedel servidor, que Rosub usa para la comprobación de sincronía. - Una cuenta de MediaLab Works con una licencia que cubra el plugin (suscripción, licencia de por vida dentro de su ventana de actualizaciones, el bundle de Jellyfin o la prueba gratuita de 30 días).
Paso 1 — Consigue tus propias claves de API
No hay nada incluido: usas tus propias claves. Crea primero la clave de subs.ro y guárdala en un sitio seguro; la pegarás en Jellyfin en el paso 3. Si también quieres la alternativa de OpenSubtitles, crea allí otra clave de API.
Ambos servicios tienen límites diarios de peticiones. subs.ro permite 300 peticiones al día por clave, y Rosub se mantiene por debajo del presupuesto que configures, reservando una parte para los elementos nuevos. Los valores por defecto son 250 peticiones al día para subs.ro y 5 para OpenSubtitles, que es más que suficiente para una biblioteca doméstica normal.
Paso 2 — Instala el plugin
La vía recomendada es tu repositorio privado de plugins, para que Jellyfin instale y actualice Rosub por sí solo:
- En tu cuenta de MediaLab Works abre Licencias → Repositorio de plugins de Jellyfin y haz clic en Crear dirección. Copia la dirección: es privada, así que no la compartas.
- En Jellyfin ve a Panel → Plugins → Repositorios, haz clic en +, ponle nombre (por ejemplo MediaLab Works), pega la dirección y guarda.
- En Panel → Plugins → Catálogo busca Rosub by MediaLab, haz clic en Instalar y reinicia Jellyfin.
También hay un catálogo público en https://medialab.works/jellyfin/manifest.json, y una instalación manual con zip si lo prefieres; la guía explica ambas, incluidas las rutas de la carpeta de plugins para Linux, Docker y Windows.
Paso 3 — Activa la licencia e introduce tus claves
- Abre Panel → Plugins → Rosub by MediaLab y haz clic en Abrir página de licencia. Pega tu clave de licencia y haz clic en Activar con clave. ¿Aún no tienes clave? En esa misma página se inicia la prueba gratuita de 30 días.
- Abre Panel → Rosub e introduce tu clave de API de subs.ro, luego guarda. Sin ella el plugin no hace nada.
- Elige las bibliotecas en las que trabajar (vacío significa todas las de películas y series) y el modo de coincidencia: estricto (el predeterminado), relajado o cualquiera.
- Opcionalmente añade la alternativa OpenSubtitles.com con tu propia clave de API, además del presupuesto diario de peticiones y la reserva para elementos nuevos.
Tus claves y la contraseña de la cuenta de OpenSubtitles se guardan cifradas en reposo en secrets.enc.json en la carpeta de datos del plugin y nunca se envían al navegador: la página solo muestra «set ✓».
Paso 4 — Cómo la coincidencia por release elige el archivo correcto
Aquí está el núcleo. Rosub separa el nombre de tu archivo en título, año, temporada/episodio, resolución, fuente (WEB-DL, BluRay, HDTV), servicio, códec y grupo de release, y lo compara con cada subtítulo que encuentra en subs.ro. En modo estricto solo acepta subtítulos hechos para la misma release, grupo o fuente de streaming. Eso es lo que evita el desfase antes de que empiece: un archivo WEB-DL recibe el subtítulo WEB-DL, no el de BluRay.
Si tienes una biblioteca mixta con nombres poco habituales, los modos relajado o cualquiera te dan más candidatos, pero estricto es el valor por defecto correcto, y es el que mantiene a salvo a una familia de la diáspora viendo la misma biblioteca desde tres países.
Paso 5 — La comprobación de sincronía con ffprobe
Cuando tu vídeo tiene una pista de subtítulos incrustada, Rosub compara la sincronía del candidato con ella usando el ffprobe del servidor. Un desplazamiento constante —todo el archivo un par de segundos adelantado o atrasado— se corrige automáticamente. Un subtítulo que está desincronizado de una forma que un desplazamiento constante no puede arreglar se rechaza, y el registro de la página del plugin te dice por qué.
Sé realista con el límite: la comprobación de sincronía corrige desplazamientos constantes. No puede reparar un subtítulo hecho para otro corte de la película, donde el desfase crece a lo largo del metraje. En ese caso quieres otro candidato, que es exactamente para lo que sirve la coincidencia por release.
Paso 6 — Elementos nuevos y el catálogo pendiente
- Al llegar: unos minutos después de que Jellyfin identifique una película o episodio nuevo, Rosub busca en subs.ro por id de IMDb/TMDb y guarda el subtítulo junto al vídeo como
Name.ro.srt. - A diario: la tarea programada Missing Romanian subtitles se ejecuta a las 04:00 y reintenta todo lo que no tiene subtítulo en rumano, empezando por lo más reciente. Los elementos que aún no se han encontrado se reintentan pasados unos días, porque los subtítulos suelen aparecer días después del estreno. También puedes ejecutar la tarea a mano desde Panel → Tareas programadas.
Paso 7 — Búsqueda manual y diacríticos correctos
A veces quieres intervenir. En Editar subtítulos → Buscar de un elemento, los resultados de Rosub aparecen junto a los de los demás proveedores. Los subtítulos se guardan como archivos .srt externos normales en UTF-8 con los diacríticos rumanos correctos: ș y ț con la coma debajo, no las antiguas formas con cedilla.
Consejos y resolución de problemas
- No se descarga nada. Comprueba la clave de API y si se ha agotado el presupuesto diario. subs.ro responde 429 al llegar al límite; el contador se reinicia cada día.
- Cuota alcanzada. Baja el presupuesto diario o deja que la reserva haga su trabajo para los elementos nuevos; la tarea del catálogo pendiente recogerá el resto mañana.
- El subtítulo no aparece. Jellyfin reconoce
royrumcomo rumano. Si el elemento estaba abierto en un cliente mientras se descargaba el subtítulo, actualiza sus metadatos. - Los subtítulos no aparecen en una TV. Rosub escribe archivos
.srtexternos normales, que se muestran en cualquier cliente que muestre subtítulos externos. Las apps nativas concretas no están probadas, así que si una app de TV falla, prueba Jellyfin Web en la misma red para confirmar que el archivo está ahí. - Lee el registro. La página del plugin lista lo que se descargó, lo que se rechazó y por qué: la forma más rápida de entender un elemento que se resiste.
- Privacidad. Para subs.ro, Rosub envía solo el id de IMDb o TMDb y el idioma: ni títulos, ni nombres de archivo, ni nombres de release, ni hashes. La coincidencia por release y la comprobación de sincronía ocurren en local con ffprobe.
Conclusión
El desfase es un problema de coincidencia, no de subtítulos. Instala Rosub, introduce tu propia clave gratuita de subs.ro, mantén la coincidencia estricta y deja que la comprobación de sincronía con ffprobe rechace todo lo que se iría desfasando. Los elementos nuevos se gestionan en minutos, la tarea de las 04:00 rellena el catálogo pendiente y tu biblioteca obtiene subtítulos en rumano con ș y ț correctas. Empieza en la página del producto, sigue la guía y consulta el changelog cuando llegue una actualización. ¿Dudas? La base de conocimiento, las preguntas frecuentes y contacto están ahí.