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
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.
| Titre | Par la règle | Destination | Porte | État |
|---|---|---|---|---|
| #10Anime japonais | /movies/anime | RADARR | proposéRadarr | |
| Pourquoi✓le genre contient Animation · observé Animation, Sci-Fi✓la langue est ja · observé ja✓sauf si la classification est G · observé R, l'exclusion n'a pas jouéla règle #10 gagne par priorité · #20 et #30 ne sont pas consultées | ||||
| #20Films de concert | /movies/concerts | RADARR | proposéRadarr | |
| Pourquoi✗#10 le genre contient Animation · observé Music, Documentary✓#20 le genre contient Music · observé Music, Documentary✓#20 le mot-clé contient concert · observé concert, live | ||||
| #10Anime japonais | /tv/anime | SONARR | à confirmerSonarr | |
| Pourquoi✓le genre contient Animation · observé Animation, Sci-Fi✓la langue est ja · observé jaattend votre accord · /tv/anime a 38 Go libres, la série en pèse 41 | ||||
| #30Famille & enfants | /movies/kids | RADARR | proposéRadarr | |
| Pourquoi✗#10 la langue est ja · observé en✗#20 le genre contient Music · observé Family, Comedy✓#30 le genre contient Family · observé Family, Comedy | ||||
| aucune règle ne correspond | /movies | RADARR | resteRadarr | |
| Pourquoi✗#10 le genre contient Animation · observé Drama, Music✗#20 le mot-clé contient concert · observé aucun✗#30 le genre contient Family · observé Drama, Music | ||||
| #20Films de concert | /movies/concerts | RADARR | en placeRadarr | |
| Pourquoi✓#20 le genre contient Music · observé Music, Documentarydéjà dans /movies/concerts · rien à déplacer | ||||
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.
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
lu par aucune règleun dossier, cinq films
Lu par RoutarrOù ça atterrit
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
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
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
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
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

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.
achemine vers anime
ToutesAu moins une
original_languagefait partie deja
genre_containscontientAnimation
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.
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é
satisfaite — original_languageattendu ja
observé ja
satisfaite — genre_containsattendu Animation
observé Animation, Science Fiction
satisfaite — certification_inattendu not G, U, TV-Y
observé 15
non satisfaite — genre_containsattendu Documentary, Music
observé Animation, Science Fiction
non satisfaite — certification_inattendu G, U, TV-Y
observé 15
satisfaite — genre_containsattendu Animation
observé Animation, Science Fiction
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.

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.
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.
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.
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.
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.
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.
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.
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.

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

Fiche techniquev0.1.0
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.
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é.
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.
/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.
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.
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.
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.
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.
docker compose up -d
Une seule image, serveur et interface ensemble. Rien d'autre à installer.
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.
http://localhost:9876
La simulation globale est déjà active. Rien ne peut être écrit tant que vous ne la coupez pas.
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:trueSauvegardez 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.
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
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.
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.
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.
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.
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.
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.
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.
Lisez le plan, gardez ce qui vous convient, laissez les règles faire le reste.
Ce qu'on vient de vous montrer
La simulation globale est active dès le premier lancement, et cinq autres portes l'attendent derrière.
Ce que chaque condition attendait, ce qu'elle a observé, et les règles qui n'ont pas gagné.
amd64 et arm64, un seul fichier SQLite, aucun service de base de données à faire tourner.