Pour Radarr & Sonarr

Chaque titre dans le bon dossier, décidé par vos règles.

Routarr lit vos bibliothèques, enrichit chaque titre depuis les sources de métadonnées que vous ordonnez, et décide dans quel dossier racine il appartient. Vous voyez le plan entier d'abord, et il n'écrit que lorsque vous le dites.

Auto-hébergé. Un seul conteneur. L'essai à blanc reste actif tant que vous ne le désactivez pas.

Départs · essai à blanc
Le plan de l'essai à blanc : six départs, la règle qui a tranché chacun, sa destination, sa porte et son état.
TitrePar la règleDestinationPorteÉtat
#10Anime japonais/movies/animeRADARRproposéRadarr
#20Films de concert/movies/concertsRADARRproposéRadarr
#10Anime japonais/tv/animeSONARRà confirmerSonarr
#30Famille & enfants/movies/kidsRADARRproposéRadarr
aucune règle ne correspond/moviesRADARRresteRadarr
#20Films de concert/movies/concertsRADARRen placeRadarr
20 évalués · 13 proposés · 7 en placeCliquez un départ pour voir pourquoi il va là
  • v0.1.0
  • Licence GPLv3
  • amd64 & arm64
  • Aucune télémétrie

La première règle qui correspond l'emporte. Les exclusions peuvent opposer leur veto. Tout est expliqué.

En développement actif. Le moteur de règles et les garde-fous sont stables. L'interface continuera d'évoluer.

Le manque

Vos Arrs savent déjà tout cela. Rien de tout ça ne choisit un dossier.

Routarr est cette couche de décision manquante : un seul endroit où vit la logique, en utilisant les dossiers que vos Arr possèdent déjà, et, sur un webhook, en décidant avant même que le téléchargement n'arrive, quand le dossier est encore vide et que rien n'a besoin de bouger.

Ce que la charge utile contient déjàOù ça atterrit

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

lu par aucune règleun dossier, cinq films

Lu par RoutarrOù ça atterrit

  • 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
Fonctionnement

Quatre étapes, et vous pouvez vous arrêter après la troisième.

Rien n'est écrit tant qu'une action explicite ne le demande, et l'interrupteur d'essai global bloque les écritures côté serveur, quoi que fasse l'interface.

L'étapeLitÉcrit

01

Synchroniser

Lit les films, les séries, les étiquettes et les dossiers racines de chaque Radarr et Sonarr connecté. Une réponse vide n'est jamais prise pour une suppression massive.

Radarr, Sonarr

rien

02

Enrichir

Genres, langue et classement arrivent gratuitement avec la synchronisation. Ajoutez TMDb pour les mots-clés et le pays : un appel par titre, mis en cache, dédoublonné, à concurrence bornée.

TMDb, AniList, OMDb…

son propre cache

03

Décider

Les règles s'exécutent par priorité croissante. La première qui correspond l'emporte. Les exclusions opposent leur veto à une règle qui aurait sinon correspondu. Ce qui ne correspond à rien retombe sur votre catégorie par défaut.

vos règles

un plan que vous pouvez lire

04

Appliquer

Les déplacements sont regroupés par serveur et par dossier cible, écrits via l'API des Arr, puis réanalysés. Tout déplacement appliqué peut être annulé.

le plan que vous avez approuvé

votre bibliothèque

une seule étape écrit dans votre bibliothèqueet l'interrupteur global de simulation bloque celle-là au niveau du serveur

L'écran de simulation en essai à blanc : 20 éléments évalués, 13 déplacements nécessaires, 7 déjà corrects, et un tableau des déplacements proposés avec dossier source, dossier cible, règle correspondante, confiance et justification.
Un essai à blanc : 13 déplacements proposés, chacun avec son pourquoi, rien n'est encore écrit.
Le moteur de règles

28 conditions, combinées à votre façon.

Combinez les conditions avec TOUTES ou AU MOINS UNE, ajoutez des exclusions explicites, ordonnez les règles par priorité. Genre, mot-clé, langue originale, pays, classement, année, statut, dossier actuel, titre, identifiants externes, ancienneté, plus les signaux que seul votre Arr possède : étiquettes, type de série Sonarr, taille sur disque et nombre de saisons.

Anime japonais

Priorité 10Films & séries

achemine vers anime

Conditions

ToutesAu moins une

original_languagefait partie deja

genre_containscontientAnimation

Sauf si

certification_infait partie deGUTV-Y

Les exclusions sont ce qui rend tout cela possible. « Animation japonaise » avalerait Mon voisin Totoro. L'exclusion délibérée des classements tout public le confie à kids à la place, et l'interface le dit.

Les règles s'exportent et s'importent en JSON, elles peuvent donc être versionnées hors de l'application, et un aperçu montre exactement ce qu'un changement ferait avant d'être enregistré.

Explicabilité

Chaque décision montre son raisonnement, y compris les règles perdantes.

Une classification que vous ne pouvez pas auditer est une classification à laquelle vous ne pouvez pas vous fier. Routarr consigne, condition par condition, ce qui était attendu et ce qui a été observé, pour la règle gagnante comme pour chaque règle qui n'a pas gagné.

Akira (1988) · toutes les règles qui l'ont examiné

#10

Anime japonais

a gagné

satisfaite — original_languageattendu ja
observé ja

satisfaite — genre_containsattendu Animation
observé Animation, Science Fiction

satisfaite — certification_inattendu not G, U, TV-Y
observé 15

acheminé vers anime, confiance 70%
#20

Films de concert

ne correspond pas

non satisfaite — genre_containsattendu Documentary, Music
observé Animation, Science Fiction

il manque une condition
#30

Famille & enfants

ne correspond pas

non satisfaite — certification_inattendu G, U, TV-Y
observé 15

satisfaite — genre_containsattendu Animation
observé Animation, Science Fiction

genre correspondant, classement non

Le moteur lui-même n'écrit jamais de prose : il émet des clés et des paramètres, et le texte est rendu dans votre langue au moment de l'affichage, les justifications sont traduites dans les 26 langues, et non figées en anglais à l'instant où elles ont été calculées.

Le panneau d'explication d'Akira : catégorie proposée anime avec 70 % de confiance, ses métadonnées TMDb, et chaque règle avec ses conditions marquées satisfaites ou non.
Sécurité

Rien n'est écrit tant que six portes ne sont pas d'accord.

Routarr déplace des fichiers sur disque. Chacune de ces portes est active par défaut, elles s'exécutent dans cet ordre, et la première qui objecte arrête les suivantes. La première suffit à elle seule à rendre toute l'application en lecture seule.

  1. 01

    Simulation globale

    refuse

    Actif dès le premier lancement. Tant qu'il l'est, rien n'est écrit, quoi que vous cliquiez, et quelle que soit l'automatisation activée.

  2. 02

    Plafond par lot

    refuse

    Un plafond strict sur le nombre d'éléments qu'une seule application peut toucher. Reclasser toute une bibliothèque est une action distincte et délibérée.

  3. 03

    Accessibilité

    demande

    Une destination qui n'a pas répondu la dernière fois qu'on a regardé. Un NAS en veille ne se distingue pas d'un disque mort, donc celui-ci demande au lieu de refuser.

  4. 04

    Capacité

    demande

    Le plan pesé contre l'espace libre que la synchronisation a déjà enregistré, en ne comptant que les octets qui changent de système de fichiers.

  5. 05

    Seuil de confirmation

    demande

    Au-delà d'un nombre que vous choisissez, une seconde confirmation explicite est exigée, reconnue par un code d'erreur stable, non par la correspondance d'un texte anglais.

  6. 06

    Revalidation au moment d’appliquer

    refuse

    Chaque décision est revérifiée face aux règles et à la bibliothèque du moment. Une proposition que les règles ne justifient plus est refusée, pas exécutée.

refusearrête l'applicationdemandepose une question sous son propre nom, à laquelle vous répondez

L'application automatique existe, et elle est désactivée par défaut. Une fois activée, elle ne touche que les titres sans aucun fichier sur le disque, le cas où changer de dossier est une écriture de métadonnées et où rien ne bouge. Tout ce qui est déjà téléchargé reste dans la file humaine.

Dossiers racines

Vos dossiers, vos noms, rien d’inventé.

Routarr ne crée jamais d'arborescence. Il lit les dossiers racines que Radarr et Sonarr déclarent, et là où vous voulez une destination qu'ils ne listent pas, vous la saisissez ici et elle est marquée comme telle. Dans les deux cas vous l'attachez à une catégorie que vous avez nommée, et un dossier déclaré tient son espace libre et son accessibilité du dossier synchronisé sous lequel il se trouve.

CheminInstanceOrigineEspace libreCatégorie

/moviesRadarrsynchronisé2.4 TiBstandard

/movies/animeRadarrdéclaré2.4 TiBanime

/movies/kidsRadarrdéclaré2.4 TiBkids

/movies/concertsRadarrdéclaré2.4 TiBconcerts

/tvSonarrsynchronisé6.1 TiBstandard

/tv/animeSonarrsynchronisé6.1 TiBanime

/mnt/archiveSonarrsynchroniséinjoignablesans catégorie

sept destinations sur deux instancestrois déclarées ici, quatre lues chez les Arrs

L'espace libre et l'accessibilité viennent directement de l'Arr. Deux dossiers revendiquant la même catégorie sur un serveur sont refusés plutôt que départagés en silence, et une catégorie qu'aucun dossier ne fournit est signalée avant de pouvoir écarter discrètement vos médias.

L'écran des dossiers racines : sept dossiers sur Radarr et Sonarr, chacun montrant son chemin, son espace libre, son état d'accessibilité et la catégorie à laquelle il est associé.
Sept dossiers sur deux instances, chacun associé à une catégorie.
Fonctions

Tout ce qu'il fait d'autre.

Une loupe de bord unique sur tous les serveurs connectés : ce qui est suivi, ce qui est enrichi, ce qui vous attend.

La loupe de bord : 14 films, 6 séries, 4 règles actives, 13 décisions en attente, une couverture TMDb complète, et les deux serveurs Radarr et Sonarr signalés comme connectés.

Fiche techniquev0.1.0

Instances

n'importe quel nombreMulti-serveurs

Autant de serveurs Radarr et Sonarr que vous voulez, chacun avec son intervalle de synchronisation, ses dossiers et ses correspondances.

Entrée

une URL secrète par instanceWebhooks en temps réel

Une URL secrète par serveur. Les nouveaux ajouts sont synchronisés, enrichis et évalués immédiatement, sans attendre le prochain relevé.

Dérogations

prime sur toutes les règlesForcer et revenir en arrière

Épinglez un titre à une catégorie et le moteur cesse de discuter, un forçage l'emporte sur toutes les règles. Tout déplacement appliqué peut être annulé depuis l'historique.

Observabilité

/metrics, même clé APIMétriques Prometheus

Taille de la bibliothèque, décisions par catégorie et par état, santé des serveurs, état des garde-fous, derrière la même clé d'API.

Notifications

un seul webhook JSON génériqueNotifications sortantes

Un webhook JSON générique, Discord, Gotify, ntfy, Apprise, déclenché à chaque changement d'état, jamais en boucle.

Portabilité

AES-256-GCM au reposConfiguration portable, clés scellées

Règles, catégories, correspondances et forçages s'exportent en JSON et voyagent d'une installation à l'autre. Les clés d'API des Arr sont chiffrées en AES-256-GCM et ne sortent jamais.

Installation

En route avec un seul docker compose up.

Une image porte le serveur et l'interface, pour amd64 et arm64, un NAS Synology ou QNAP, Unraid, TrueNAS, un Raspberry Pi ou un simple VPS. Enregistrez le fichier compose, démarrez-le, et le premier lancement ne demande aucun fichier de configuration.

  1. 01

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

    Le conteneur tourne en uid 1000 et abandonne toutes ses capacités, donc le volume doit lui appartenir.

  2. 02

    docker compose up -d

    Une seule image, serveur et interface ensemble. Rien d'autre à installer.

  3. 03

    docker exec routarr cat /data/routarr.api_key

    La clé est générée au premier démarrage et écrite à côté de la base. Le journal ne la montre qu’une fois, le fichier la garde.

  4. 04

    http://localhost:9876

    La simulation globale est déjà active. Rien ne peut être écrit tant que vous ne la coupez pas.

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

Sauvegardez routarr.db et routarr.key ensemble. Sans la clé, les identifiants Arr stockés sont irrécupérables.

Ensuite : connectez vos Arr, associez vos dossiers à des catégories, écrivez une règle et prévisualisez-la, lancez un essai à blanc, et ne désactivez l'essai global que lorsque le plan vous convient.

Questions

Avant de l'installer.

La plupart des réponses ci-dessous sont non, et c'est la chose la plus utile que cette section ait à dire.

L'inquiétudeLa réponseCe qui le garantit

Est-ce qu'il déplace mes fichiers ?

seulement si vous le demandez deux fois

La simulation globale, active par défaut

Le mode d'essai global est actif dès le premier lancement, l'option de déplacer les fichiers sur le disque est décochée par défaut, et appliquer au-delà d'un seuil exige une confirmation explicite. Sans l'option de déplacement, Routarr se contente de réorienter l'entrée de la bibliothèque et laisse les fichiers où ils sont.

Va-t-il renommer mes dossiers ?

non

Le dossier racine, pas le nom

Un déplacement change le dossier racine au-dessus de votre titre et conserve le nom du dossier exactement tel qu'il est : une bibliothèque Plex ou Jellyfin qui pointe dessus continue de fonctionner.

Ai-je besoin d'une clé TMDb ?

non

Les Arrs sont une source à part entière

Radarr et Sonarr sont une source de métadonnées à part entière, ils fournissent déjà les genres, la langue originale et le classement, et Routarr les lit dans la réponse même qui synchronise la bibliothèque. Pour les mots-clés et le pays d'origine, AniList ne demande aucune clé non plus. TMDb, OMDb et TheTVDB sont là si vous les voulez. Les sources forment une liste ordonnée : c'est vous qui décidez laquelle l'emporte en cas de désaccord.

Remplace-t-il Radarr ou Sonarr ?

non

Deux champs, via leur propre API

Il s'y refuse délibérément. Routarr ne gère jamais les téléchargements, les indexeurs ni la bibliothèque elle-même. Il écrit exactement deux choses via l'API des Arr, le dossier racine et le chemin, puis demande une réanalyse.

Envoie-t-il des données quelque part ?

jamais

Aucune requête sortante que personne n'a demandée

Aucune télémétrie, aucune analytique, aucune vérification de mise à jour. Les seuls appels sortants vont vers vos instances Radarr et Sonarr, vers les sources de métadonnées que vous activez (TMDb, AniList, Jikan, OMDb, TheTVDB), vers votre fournisseur OpenID Connect si vous en utilisez un, et vers un webhook de notification si vous en définissez un.

Puis-je le mettre derrière un reverse proxy ?

oui

Une seule variable d'environnement

Y compris sous un sous-chemin. Définissez ROUTARR_BASE_PATH=/routarr et l'API, l'interface et les URL de webhook suivent, sans reconstruire l'image.

Sur quoi tourne-t-il ?

un Pi suffit

Une image, un fichier

Une seule image Docker pour amd64 et arm64 : un Pi ou un N100 suffit. Le stockage tient dans un unique fichier SQLite. Il n'y a aucun service de base de données à faire tourner.

Arrêtez de choisir le dossier à la main.

Lisez le plan, gardez ce qui vous convient, laissez les règles faire le reste.

Ce qu'on vient de vous montrer

Il ne peut rien écrire tant que vous ne le permettez pas

La simulation globale est active dès le premier lancement, et cinq autres portes l'attendent derrière.

Chaque décision montre son raisonnement

Ce que chaque condition attendait, ce qu'elle a observé, et les règles qui n'ont pas gagné.

Une image, un fichier, un port

amd64 et arm64, un seul fichier SQLite, aucun service de base de données à faire tourner.