Películas · Series · Streaming · Videoteca
Jellyfin + Stremio — Videoteca privada¶
Como Netflix pero con tu propio contenido, sin anuncios y sin que nadie registre lo que ves. Stremio complementa la experiencia con addons y catálogo visual.
Como usuario¶
Funcionalidades de Jellyfin¶
| Funcionalidad | Navegador | Ubuntu | Android | FireTV |
|---|---|---|---|---|
| Ver películas y series en streaming | ✅ | ✅ | ✅ | ✅ |
| Reanudar reproducción donde lo dejaste | ✅ | ✅ | ✅ | ✅ |
| Calidad adaptativa según conexión | ✅ | ✅ | ✅ | ✅ |
| Subtítulos en varios idiomas | ✅ | ✅ | ✅ | ✅ |
| Crear listas de reproducción | ✅ | ✅ | ✅ | ✅ |
| Control parental por perfil | ✅ | ✅ | ✅ | ✅ |
Funcionalidades de Stremio¶
| Funcionalidad | Navegador | Ubuntu | Android | FireTV |
|---|---|---|---|---|
| Interfaz visual con carátulas | ❌ | ✅ | ✅ | ✅ |
| Addons para enriquecer metadatos | ❌ | ✅ | ✅ | ✅ |
| Integración con tu servidor Jellyfin local | ❌ | ✅ | ✅ | ✅ |
| Descubrimiento de contenido | ❌ | ✅ | ✅ | ✅ |
Primeros pasos: Abre la app de Jellyfin en tu FireTV o Android. Inicia sesión con tu cuenta de Authentik. Para Stremio en Ubuntu, instala la app y configura el addon local para conectarlo a tu servidor Jellyfin.
Cómo llega el contenido¶
Pides en Seerr → Sonarr/Radarr buscan → qBittorrent descarga (de madrugada) → Bazarr añade subtítulos → Jellyfin indexa automáticamente → listo para ver. Recibes notificación en Matrix.
Integración con otros servicios de SmallCountry¶
| Servicio | Cómo se integra |
|---|---|
| Seerr y arr stack | Adquisición de contenido (peticiones, búsqueda, descarga) |
| Bazarr | Subtítulos automáticos |
| Navidrome | Comparte biblioteca multimedia en el mismo almacenamiento SATA |
| n8n | Orquestación y notificaciones de nuevo contenido |
| Matrix | Aviso de contenido listo |
Servicios que lo hacen posible¶
- Jellyfin — Servidor de streaming de medios
- Stremio — Cliente y catálogo visual con addons
- PostgreSQL — Base de datos de Jellyfin
Para el administrador (diseño previsto)
LXC (contenedor ligero de Proxmox): 170
IP: 10.10.20.170
Tier: 3
Impacto: 🟢 Bajo
ZFS (sistema de archivos con integridad de datos) persistente: rpool/datos/jellyfin → /opt/jellyfin/. El almacenamiento de la biblioteca multimedia reside en SATA (Fase 2).
Docker compose: Jellyfin + Stremio-server
Healthcheck: curl https://jellyfin.sc
Logs: docker logs jellyfin en el LXC 170
Backup manual: PBS (sistema de copias de seguridad de Proxmox) diario (metadatos). La biblioteca en SATA no se respalda — se puede readquirir.
Transcodificación: QuickSync Intel si está disponible en la CPU.
Problemas comunes:
- "No se ve en la tele" → verificar app Jellyfin instalada en FireTV
- "Buffering" → verificar transcodificación en el panel de administración
- "No aparecen nuevos episodios" → verificar Sonarr y reindexar biblioteca en Jellyfin
Para el arquitecto (diseño previsto)
flowchart TD
SEERR[Seerr]( -->|Petición| SONARR_RADARR[Sonarr / Radarr]
SONARR_RADARR -->|Búsqueda| QBIT[qBittorrent]
QBIT -->|Descarga nocturna| SATA[)SATA)]
SATA -->|Indexa| JELLYFIN[Jellyfin LXC 170]
QBIT -->|Subtítulos| BAZARR[Bazarr]
BAZARR -->|Subtítulos| JELLYFIN
JELLYFIN -->|Stream| CLIENTES[FireTV / Android / Navegador]
JELLYFIN -->|Comparte SATA| NAVIDROME[Navidrome]
JELLYFIN -->|Notifica| MATRIX[Matrix]
Bridge: vmbr2
Puertos: Jellyfin 8096, Stremio 8080
Pi-hole: jellyfin.sc → 10.10.20.170
Caddy: forward_auth + reverse_proxy a :8096
Authentik: Provider Proxy, grupo familia
Transcodificación por hardware: QuickSync Intel si está disponible.
Orquestación:
- Playbook: deploy-jellyfin.yml
- Rol Ansible: roles/jellyfin/
- Tofu: modules/jellyfin/
- Semaphore, Forgejo Actions
- Repo: sc-infra/jellyfin
Panel de administración: JellyDash¶
Jellyfin dice qué se está reproduciendo ahora mismo. JellyDash añade lo que viene después: quién vio qué y cuándo, cuánto tiempo, en qué dispositivo, por qué se transcodificó una película, qué está descargando el servidor y qué ha pedido alguien. Todo en una sola pantalla, pensada para dejarla abierta en una tablet como panel de control del salón.
| Lo que aporta | Detalle |
|---|---|
| En reproducción | Tarjeta por cada stream activo: usuario, calidad, progreso y el método real (directo, remux o transcodificado) con el motivo |
| Historial | Se recuerda aunque nadie tenga el panel abierto. Búsqueda, filtro por usuario y biblioteca, y exportación a CSV |
| Estadísticas | Tiempo de visionado, usuarios que más ven, dispositivos, códecs y motivos de transcodificación |
| Bibliotecas | Todas, con recuento y desglose por tipo; las nuevas se detectan solas |
| Actividad del servidor | Tareas de mantenimiento de Jellyfin, resultados y eventos, con filtros |
| Peticiones de Seerr (opcional) | Las últimas peticiones y su estado, con aviso cuando entra una nueva |
| Descargas (opcional) | SABnzbd, qBittorrent, Transmission, Deluge y NZBGet en una página. Solo lee el estado: la cola se sigue gestionando en cada cliente |
| Avisos (opcional) | «Fulano ha empezado a ver tal» por ntfy, Telegram, Gotify, Discord o Web Push |
Dos cosas que hay que saber antes de instalarlo¶
No es oficial de Jellyfin. Es un panel de la comunidad, con licencia MIT, que se pone encima del servidor sin tocar su núcleo. Y hay dos proyectos con el mismo nombre: el bueno es themartz90/jellydash (web, Docker, activo); johman10/jellydash es una app Flutter distinta y lleva parada desde febrero de 2026.
El acceso viene sin contraseña. De fábrica está pensado para una red doméstica de confianza: cualquiera que llegue a la URL ve qué ha visto cada persona de la casa y cuándo. Se activa con AUTH_ENABLED=true, y aun así aquí no se expone nunca sin forward_auth, igual que Jellyfin.
Cómo encaja en SmallCountry¶
| Pieza | Decisión |
|---|---|
| Tier | 4 — ocio degradable. Si se cae, no se pierde nada: es solo el panel |
| Dónde | Junto a Jellyfin, en el LXC 170 (10.10.20.170), o en su propio contenedor si se prefiere aislarlo |
| Puerto | No el 8080: en este diseño ese puerto ya es de Stremio. Se le da el 8090 |
| Publicación | Caddy con forward_auth a Authentik, grupo familia, igual que jellyfin.sc |
| Nombre interno | jellydash.sc → 10.10.20.170 en Pi-hole |
| Avisos | Por ntfy, que ya está en el catálogo — sin depender de Telegram para algo doméstico |
| Datos | SQLite basta (variante ligera del compose); MariaDB solo si se quiere más |
Para el administrador (JellyDash)
Proyecto: themartz90/jellydash · MIT · panel de la comunidad, no del equipo de Jellyfin.
Versión de referencia: v1.15.2. Dos personas manteniéndolo, 25 versiones desde el 31-jul-2026.
Instalación (Docker Compose):
mkdir jellydash && cd jellydash
curl -L -o docker-compose.yml https://raw.githubusercontent.com/themartz90/jellydash/main/docker-compose.sqlite.yml
curl -L -o .env https://raw.githubusercontent.com/themartz90/jellydash/main/.env.example
# editar .env: JELLYFIN_URL, JELLYFIN_API_TOKEN y, si se usa MariaDB, DB_PASS
docker compose up -d
Variables mínimas: JELLYFIN_URL, JELLYFIN_API_TOKEN (se genera en Jellyfin → Panel → API Keys).
Recomendadas: APP_TIMEZONE=Europe/Madrid (sin ella, los cortes de día del historial salen corridos) y
JELLYFIN_LINK_URL cuando el nombre interno no sea alcanzable desde el navegador.
Puerto: el compose publica en 8080. En este diseño el 8080 es de Stremio, así que se remapea a
127.0.0.1:8090:8080 y se deja que Caddy haga el TLS.
Acceso: AUTH_ENABLED=true con usuario y contraseña inicial. Con login activo, la página de actividad
del servidor queda solo para propietarios y administradores.
Tablas: se crean solas al arrancar; no hay que importar ningún .sql.
Migración desde el plugin Playback Reporting: los backups del plugin de Jellyfin/Emby se importan desde Ajustes, así que cambiar de panel no borra el historial anterior.
Credenciales de descargas: se guardan en la base de datos del panel. Son credenciales de qBittorrent o
SABnzbd, es decir, acceso al cliente de descargas: otro motivo para no publicarlo sin forward_auth.
Para el arquitecto (JellyDash)
Por qué no basta el panel de Jellyfin: el panel nativo no conserva historial propio ni agrega estadísticas; y las descargas y las peticiones viven en herramientas distintas. JellyDash no sustituye a Seerr ni a los clientes de descarga — no tiene sus controles finos —, solo los pone en la misma vista.
Encaje en capas: es una pieza de observabilidad de ocio, no de infraestructura. Consume la API de Jellyfin en solo lectura y no participa en el camino crítico de reproducción: si está caído, la tele sigue funcionando. Por eso Tier 4 y por eso no entra en el presupuesto de complejidad como dependencia.
Alternativa si lo que se busca es mantenimiento, no vigilancia: proyectos hermanos como MediaDash apuntan a lo contrario — duplicados, ficheros rotos, pistas en idioma equivocado, subtítulos ausentes — y encajan mejor en la rutina de la biblioteca que un panel de sesiones.
Captura de pantalla¶
📸 Pendiente de captura desde la instancia en producción. Sustituye esta imagen por una captura real de
https://jellyfin.sc.
Secciones relacionadas¶
- [Guía de estilo: Clasificación de estado../../guia-estilo/filosofia.md#estados)
- [Mecanismo 10: Perfiles de Energía../../manual/mecanismos/10-perfiles-energia/)