Para Radarr & Sonarr

Cada título en la carpeta correcta, decidido por sus reglas.

Routarr lee sus bibliotecas, enriquece cada título desde las fuentes de metadatos que usted ordena y decide a qué carpeta raíz pertenece. Usted ve el plan entero primero, y solo escribe cuando usted lo dice.

Autoalojado. Un contenedor. La simulación sigue activa hasta que usted la desactive.

Salidas · simulación
El plan de la simulación: seis salidas, la regla que decidió cada una, su destino, su puerta y su estado.
TítuloPor la reglaDestinoPuertaEstado
#10Animación japonesa/movies/animeRADARRpropuestoRadarr
#20Conciertos/movies/concertsRADARRpropuestoRadarr
#10Animación japonesa/tv/animeSONARRconfirmarSonarr
#30Familia & infantil/movies/kidsRADARRpropuestoRadarr
ninguna regla coincide/moviesRADARRse quedaRadarr
#20Conciertos/movies/concertsRADARRen su sitioRadarr
20 evaluados · 13 propuestos · 7 en su sitioPulse una salida para ver por qué va allí
  • v0.1.0
  • Licencia GPLv3
  • amd64 & arm64
  • Sin telemetría

Gana la primera regla que coincide. Las exclusiones pueden vetar. Todo queda explicado.

En desarrollo activo. El motor de reglas y las salvaguardas son estables. La interfaz seguirá cambiando.

El hueco

Sus Arrs ya saben todo esto. Nada de eso elige una carpeta.

Routarr es esa capa de decisión que falta: un único sitio donde vive la lógica, usando las carpetas que sus Arr ya tienen, y, sobre un webhook, decidiendo antes incluso de que la descarga llegue, cuando la carpeta aún está vacía y nada tiene que moverse.

Lo que la carga útil ya contieneDónde aterriza

  • Akira (1988)AnimationScience Fictionja15/movies
  • Heat (1995)CrimeThrilleren15/movies
  • My Neighbor TotoroAnimationFamilyjaU/movies
  • Perfect BlueAnimationThrillerja18/movies
  • Stop Making SenseDocumentaryMusicenUconcert/movies

leído por ninguna reglauna carpeta, cinco películas

Leído por RoutarrDónde aterriza

  • Akira (1988)AnimationScience Fictionja15#10/movies/anime
  • Heat (1995)CrimeThrilleren15/movies
  • My Neighbor TotoroAnimationFamilyjaU#30/movies/kids
  • Perfect BlueAnimationThrillerja18#10/movies/anime
  • Stop Making SenseDocumentaryMusicenUconcert#20/movies/concerts
Cómo funciona

Cuatro pasos, y puede parar después del tercero.

No se escribe nada hasta que una acción explícita lo pide, y el interruptor de simulación global bloquea las escrituras en el servidor, haga lo que haga la interfaz.

El pasoLeeEscribe

01

Sincronizar

Lee películas, series, etiquetas y carpetas raíz de cada Radarr y Sonarr que conecte. Una respuesta vacía nunca se toma por un borrado masivo.

Radarr, Sonarr

nada

02

Enriquecer

Géneros, idioma y clasificación llegan gratis con la sincronización. Añada TMDb para palabras clave y país: una llamada por título, en caché, sin duplicados, con concurrencia acotada.

TMDb, AniList, OMDb…

su propia caché

03

Decidir

Las reglas corren por prioridad ascendente. Gana la primera que coincide. Las exclusiones vetan una regla que por lo demás habría coincidido. Lo que no coincide cae en su categoría por defecto.

sus reglas

un plan que puede leer

04

Aplicar

Los movimientos se agrupan por instancia y carpeta de destino, se escriben por la API de los Arr y luego se reanalizan. Todo movimiento aplicado puede revertirse.

el plan que usted aprobó

su biblioteca

un solo paso escribe en su bibliotecay el interruptor global de simulación bloquea ese en el servidor

La pantalla de simulación: 20 elementos evaluados, 13 movimientos necesarios, 7 ya correctos, y una tabla de movimientos propuestos con carpeta de origen, carpeta de destino, regla coincidente, confianza y justificación.
Una simulación: 13 movimientos propuestos, cada uno con su porqué, todavía no se ha escrito nada.
El motor de reglas

28 condiciones, combinadas a su manera.

Combine condiciones con TODAS o CUALQUIERA, añada exclusiones explícitas, ordene las reglas por prioridad. Género, palabra clave, idioma original, país, clasificación, año, estado, carpeta actual, título, identificadores externos, antigüedad, más señales que solo tiene su Arr: etiquetas, el tipo de serie de Sonarr, tamaño en disco y número de temporadas.

Animación japonesa

Prioridad 10Películas y series

encamina a anime

Condiciones

TodasAl menos una

original_languagees uno deja

genre_containscontieneAnimation

Salvo si

certification_ines uno deGUTV-Y

Las exclusiones son la razón de que esto funcione. «Animación japonesa» se tragaría Mi vecino Totoro. La exclusión deliberada de las clasificaciones para todos los públicos lo entrega a kids en su lugar, y la interfaz lo dice.

Las reglas se exportan e importan como JSON, así que pueden versionarse fuera de la aplicación, y una vista previa muestra exactamente qué haría un cambio antes de guardarlo.

Explicabilidad

Cada decisión muestra su razonamiento, incluidas las reglas que perdieron.

Una clasificación que no puede auditar es una clasificación en la que no puede confiar. Routarr registra, condición a condición, qué se esperaba y qué se observó, tanto para la regla ganadora como para cada regla que no ganó.

Akira (1988) · todas las reglas que lo examinaron

#10

Animación japonesa

ha ganado

cumplida — original_languageesperado ja
observado ja

cumplida — genre_containsesperado Animation
observado Animation, Science Fiction

cumplida — certification_inesperado not G, U, TV-Y
observado 15

encaminado a anime, confianza 70%
#20

Conciertos

no coincide

no cumplida — genre_containsesperado Documentary, Music
observado Animation, Science Fiction

falta una condición
#30

Familia & infantil

no coincide

no cumplida — certification_inesperado G, U, TV-Y
observado 15

cumplida — genre_containsesperado Animation
observado Animation, Science Fiction

el género coincide, la clasificación no

El motor nunca escribe prosa: emite claves y parámetros, y el texto se compone en su idioma en el momento de mostrarlo, las justificaciones están traducidas a los 26 idiomas, no congeladas en inglés en el instante en que se calcularon.

El panel de explicación de Akira: categoría propuesta anime con un 70 % de confianza, sus metadatos de TMDb y cada regla con sus condiciones marcadas como cumplidas o no.
Seguridad

No se escribe nada hasta que seis puertas están de acuerdo.

Routarr mueve archivos en disco. Cada una de estas puertas está activa por defecto, se ejecutan en este orden, y la primera que objeta detiene a las demás. La primera por sí sola basta para dejar toda la aplicación en solo lectura.

  1. 01

    Simulación global

    se niega

    Activa desde el primer arranque. Mientras lo esté, no se escribe nada, pulse lo que pulse y esté activada la automatización que esté.

  2. 02

    Límite por lote

    se niega

    Un techo estricto sobre cuántos elementos puede tocar una sola aplicación. Reclasificar una biblioteca entera es una acción aparte y deliberada.

  3. 03

    Accesibilidad

    pregunta

    Un destino que no respondió la última vez que alguien miró. Un NAS en reposo no se distingue de un disco muerto, así que esta puerta pregunta en vez de negarse.

  4. 04

    Capacidad

    pregunta

    El plan pesado contra el espacio libre que la sincronización ya registró, contando solo los bytes que cambian de sistema de archivos.

  5. 05

    Umbral de confirmación

    pregunta

    Por encima de un número que usted elige se exige una segunda confirmación explícita, reconocida por un código de error estable, no por comparar texto en inglés.

  6. 06

    Revalidación al aplicar

    se niega

    Cada decisión se vuelve a comprobar contra las reglas y la biblioteca del momento. Una propuesta que las reglas ya no justifican se rechaza, no se ejecuta.

se niegadetiene la aplicaciónpreguntaplantea una pregunta con su propio nombre, que usted responde

La aplicación automática existe, y viene desactivada. Cuando se activa toca solo títulos sin archivos en disco todavía, el caso en que cambiar de carpeta es una escritura de metadatos y nada se mueve. Todo lo ya descargado sigue en la cola humana.

Carpetas raíz

Sus carpetas, sus nombres, nada inventado.

Routarr nunca crea una estructura de biblioteca. Lee las carpetas raíz que Radarr y Sonarr declaran, y donde quiere un destino que ellos no listan lo escribe aquí y queda marcado como tal. En ambos casos lo asocia a una categoría que usted nombró, y una carpeta declarada toma su espacio libre y su accesibilidad de la carpeta sincronizada bajo la que se encuentra.

RutaInstanciaOrigenEspacio libreCategoría

/moviesRadarrsincronizado2.4 TiBstandard

/movies/animeRadarrdeclarado2.4 TiBanime

/movies/kidsRadarrdeclarado2.4 TiBkids

/movies/concertsRadarrdeclarado2.4 TiBconcerts

/tvSonarrsincronizado6.1 TiBstandard

/tv/animeSonarrsincronizado6.1 TiBanime

/mnt/archiveSonarrsincronizadoinaccesiblesin categoría

siete destinos en dos instanciastres declarados aquí, cuatro leídos de los Arrs

El espacio libre y la accesibilidad vienen directos del Arr. Dos carpetas que reclamen la misma categoría en una instancia se rechazan en lugar de resolverse en silencio, y una categoría que ninguna carpeta proporciona se avisa antes de que pueda descartar sus medios sin que nadie lo note.

La pantalla de carpetas raíz: siete carpetas en Radarr y Sonarr, cada una con su ruta, espacio libre, estado de accesibilidad y la categoría a la que está asociada.
Siete carpetas en dos instancias, cada una asociada a una categoría.
Funciones

Todo lo demás que hace.

Un panel sobre todas las instancias conectadas: qué está registrado, qué está enriquecido, qué le espera.

El panel principal: 14 películas, 6 series, 4 reglas activas, 13 decisiones pendientes, cobertura completa de metadatos de TMDb y las instancias de Radarr y Sonarr informando como conectadas.

Ficha técnicav0.1.0

Instancias

cualquier númeroVarias instancias

Tantos servidores Radarr y Sonarr como quiera, cada uno con su intervalo de sincronización, sus carpetas y sus asignaciones.

Entrada

una URL secreta por instanciaWebhooks en tiempo real

Una URL secreta por instancia. Las altas nuevas se sincronizan, enriquecen y evalúan de inmediato, no en el siguiente sondeo.

Excepciones

prevalece sobre toda reglaForzar y revertir

Fije un título a una categoría y el motor deja de discutir, un forzado gana a cualquier regla. Todo movimiento aplicado puede deshacerse desde el historial.

Observabilidad

/metrics, la misma clave APIMétricas de Prometheus

Tamaño de la biblioteca, decisiones por categoría y estado, salud de las instancias y estado de las salvaguardas, tras la misma clave de API.

Notificaciones

un solo webhook JSON genéricoNotificaciones salientes

Un webhook JSON genérico, Discord, Gotify, ntfy, Apprise, disparado en cada cambio de estado, nunca en bucle.

Portabilidad

AES-256-GCM en reposoConfiguración portable, claves selladas

Reglas, categorías, asignaciones y forzados se exportan como JSON y viajan entre instalaciones. Las claves de API de los Arr se cifran con AES-256-GCM y nunca salen.

Instalación

En marcha con un docker compose up.

Una imagen lleva el servidor y la interfaz, para amd64 y arm64, un NAS Synology o QNAP, Unraid, TrueNAS, una Raspberry Pi o un VPS corriente. Guarde el archivo compose, arránquelo, y el primer inicio no necesita ningún archivo de configuración.

  1. 01

    mkdir -p data && sudo chown 1000:1000 data

    El contenedor corre como uid 1000 y renuncia a todas sus capacidades, así que el volumen debe pertenecerle.

  2. 02

    docker compose up -d

    Una sola imagen, servidor e interfaz juntos. No hay nada más que instalar.

  3. 03

    docker exec routarr cat /data/routarr.api_key

    La clave se genera en el primer arranque y se escribe junto a la base de datos. El registro la muestra una vez, el archivo la conserva.

  4. 04

    http://localhost:9876

    La simulación global ya está activa. No se puede escribir nada hasta que la desactive.

docker-compose.yml
services:
  routarr:
    image: ghcr.io/routarr/routarr:latest
    container_name: routarr
    ports:
      - "9876:9876"
    volumes:
      - ./data:/data
    restart: unless-stopped
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true

Respalde routarr.db y routarr.key juntos. Sin la clave, las credenciales de los Arr guardadas no se pueden recuperar.

Después: conecte sus Arr, asigne sus carpetas a categorías, escriba una regla y previsualícela, lance una simulación, y desactive la simulación global solo cuando el plan le convenza.

Preguntas

Antes de instalarlo.

La mayoría de las respuestas de abajo son no, y es lo más útil que esta sección tiene que decir.

La inquietudLa respuestaQué lo garantiza

¿Va a mover mis archivos?

solo si lo pide dos veces

La simulación global, activa por defecto

La simulación global está activa desde el primer arranque, la opción de mover archivos en disco viene desmarcada, y aplicar por encima de un umbral exige una confirmación explícita. Sin la opción de mover, Routarr solo reorienta la entrada de la biblioteca y deja los archivos donde están.

¿Va a renombrar mis carpetas?

no

La carpeta raíz, no el nombre

Un movimiento cambia la carpeta raíz por encima de su título y conserva el nombre de la carpeta tal cual, de modo que una biblioteca de Plex o Jellyfin que apunte ahí sigue funcionando.

¿Necesito una clave de TMDb?

no

Los Arrs son una fuente propia

Radarr y Sonarr son una fuente de metadatos por derecho propio, ya informan de géneros, idioma original y clasificación por edades, y Routarr los lee en la misma respuesta con la que sincroniza la biblioteca. Para palabras clave y país de origen, AniList tampoco necesita clave. TMDb, OMDb y TheTVDB están ahí si los quiere. Las fuentes son una lista ordenada: usted decide cuál gana cuando discrepan.

¿Sustituye a Radarr o Sonarr?

no

Dos campos, por su propia API

Deliberadamente no lo intenta. Routarr nunca gestiona descargas, indexadores ni la biblioteca en sí. Escribe exactamente dos cosas a través de la API de los Arr, la carpeta raíz y la ruta, y después pide un reanálisis.

¿Envía datos a alguna parte?

nunca

Ninguna petición saliente que nadie pidió

Sin telemetría, sin analítica, sin comprobación de actualizaciones. Las únicas llamadas salientes van a sus instancias de Radarr y Sonarr, a las fuentes de metadatos que active (TMDb, AniList, Jikan, OMDb, TheTVDB), a su proveedor de OpenID Connect si usa uno, y a un webhook de notificación si lo configura.

¿Puedo ponerlo tras un proxy inverso?

Una variable de entorno

Incluso bajo una subruta. Defina ROUTARR_BASE_PATH=/routarr y la API, la interfaz y las URL de webhook se mueven con ella, sin reconstruir la imagen.

¿Sobre qué funciona?

basta una Pi

Una imagen, un archivo

Una imagen Docker para amd64 y arm64, así que basta con una Pi o un N100. El almacenamiento es un único archivo SQLite. No hay ningún servicio de base de datos que mantener.

Deje de elegir la carpeta a mano.

Lea el plan, quédese con lo que le convenza y deje el resto a las reglas.

Lo que se le acaba de mostrar

No puede escribir hasta que usted lo permita

La simulación global está activa desde el primer arranque, y cinco puertas más están detrás.

Cada decisión muestra su razonamiento

Qué esperaba cada condición, qué observó, y las reglas que no ganaron.

Una imagen, un archivo, un puerto

amd64 y arm64, un solo archivo SQLite, ningún servicio de base de datos que ejecutar.