Ether : tout TMDB (et IPTV) dans un serveur Plex/Jellyfin/Emby émulé, en streaming Usenet, BitTorrent et débrideurs

Ether : tout TMDB (et IPTV) dans un serveur Plex/Jellyfin/Emby émulé, en streaming Usenet, BitTorrent et débrideurs

Par pure passion et curiosité, j’étais en train de me (re)créer une stack à base de Decypharr, InfiniDysk, bClone et les arrs avec un outil interne d’indexation de releases quand je suis tombé sur Ether. Merci Haldir 🙂

Ether, de braedonsaunders, émule un serveur Plex/Jellyfin/Emby/IPTV/Stremio, indexe l’ensemble des médias films et séries de TMDB et permet de les streamer depuis des débrideurs/Usenet/BitTorrent (Prowlarr) sur le client de son choix.

Ça peut rappeler Remux ou Silo dans l’idée de regrouper les sources côté serveur mais en plus robuste, complet et, je trouve, détaillé. Et surtout, avec 100% du contenu TMDB, la référence utilisée par tous les sites (modernes) pour les synopsis/affiches.
Et Ether ne télécharge rien : on lance une lecture, il cherche une release sur les sources ajoutées et ça part en lecture. Délai de 2 secondes à 6 secondes dans mes tests entre addons Stemio et indexeurs Usenet.

Et pour éviter les déconvenues en affichant des médias qui n’existent pas en FRENCH/MULTi (ou selon nos choix), Ether permet de filtrer.

Le catalogue de films et séries synchronisé depuis TMDB.

Pour cette installation j’utilise Eweka, AllDebrid et mon Prowlarr existant. Et un compte Plex, une clé API TMDB et les accès à ses sources. Usenet suppose un FAU et des indexeurs de .nzb, AllDebrid suppose ici des indexeurs de .torrent, le tout passant par Prowlarr.

J’utilise le fabuleux Dockge-Enhanced pour l’installer ! 😛

services:
  ether:
    image: ghcr.io/braedonsaunders/ether:latest
    container_name: ether
    restart: unless-stopped
    network_mode: host
    environment:
      TZ: Europe/Paris
      ETHER_PORT: "32450"
      PUID: "1000"
      PGID: "1000"
    volumes:
      - /home/aerya/docker/ether/config:/config
      - /home/aerya/docker/ether/cache:/cache
    devices:
      - /dev/dri:/dev/dri
    group_add:
      - "992"
      - "44"
    mem_limit: 2g
    memswap_limit: 4g

Le réseau host me permet notamment la découverte locale par le client Plex. Pas de ports: dans ce mode. J’utilise le port 32450 pour laisser le 32400 à un « vrai » serveur Plex déjà installé.

Comme souvent, je limite la RAM et le SWAP. Ici 2 Go de RAM et 4 Go RAM + SWAP. Pour le GPU, /dev/dri et les groupes 992/44 correspondent à ma machine, ce n’est pas à recopier sans vérifier les vôtres. Si vous ne passez pas de GPU, retirez devices et group_add.

Une fois déployé, on ouvre http://192.168.0.196:32450/ether/, en remplaçant l’IP par celle du serveur. Gardez bien le /ether/ à la fin.

L’assistant propose de se connecter au compte Plex et d’y associer Ether. On renseigne ensuite les sources, le cache et TMDB. Pour le catalogue, j’ai choisi le français et la région France.

Le premier import prend un peu de temps. Le nombre de fiches augmente au fur et à mesure.

Le tableau de bord de l’instance Ether sur la LincStation.
Eweka configuré en TLS sur le port 563.
AllDebrid configuré avec une clé API dédiée à Ether.

J’utilise mon instance Prowlarr.

L’import des indexeurs depuis Prowlarr.

Ether accepte également des addons Stremio fournissant des sources. On peut notamment ajouter directement un manifeste Lumio ou StreamFusion Reborn ou encore AIOStreams.

Pour privilégier la 4K : Releases / Profils de qualité.

Le profil 4K choisi pour le réseau local et les clients distants.

Le profil accepte de 1080p à 2160p, avec une préférence pour la 4K et un repli en 1080p. On peut régler les codecs, HDR/Dolby Vision, l’audio, les tailles et les langues.

Les préférences du profil 4K et le repli en 1080p.

Petit piège : mettre fr dans les langues préférées ne filtre pas les noms de releases. Pour ne garder que du MULTi ou FRENCH, il faut passer par Releases / Custom scoring (notation personnalisée), format en JSON.

Dans les définitions des formats personnalisés, voici celui que j’utilise

[
  {
    "trash_id": "multi-or-french",
    "name": "MULTi ou FRENCH",
    "specifications": [
      {
        "name": "Tag MULTi ou FRENCH",
        "implementation": "ReleaseTitleSpecification",
        "negate": false,
        "required": true,
        "fields": {
          "value": "(?i)(?:^|[ ._-])(?:MULTI|FRENCH)(?:$|[ ._-])"
        }
      }
    ]
  }
]

Dans les scores personnalisés, j’attribue 100 points à ce format :

{
  "multi-or-french": 100
}

Il faut un score minimum de 100, sinon on donne seulement une préférence au MULTi/FRENCH, les autres releases restent autorisées !
(spoiler alert! je bosse sur un mod pour Ether qui permettra de filtrer plus simplement les contenus en VF, VFF, VFi, VFQ, TRUEFRRENCH, FRENCH, MULTi)

Dans la version 0.2.47, le champ de score minimum du profil est dans Imported rules et n’apparaît pas sur un profil neuf tant qu’aucune règle de ce type n’y est définie… J’ai initialisé les champs minCustomFormatScore: 100 et customFormatScores: {"multi-or-french": 100} par l’API de configuration, dans les profils de la section quality. Le minimum est ensuite visible et modifiable dans leur éditeur.
Le même minCustomFormatScore est défini dans la section resolver comme valeur par défaut.

La règle accepte Film.MULTi.2160p ou Film.FRENCH.1080p, sans tenir compte des majuscules. Elle refuse par excemple VOSTFR, TRUEFRENCH et VFF seuls : c’est bien un choix de tags MULTi/FRENCH, pas une détection de toutes les pistes françaises possibles.

Avec ce seul format et ce minimum, une release sans le tag obtient zéro point et est rejetée. Si aucune source ne correspond, il n’y a pas de repli automatique sur une release VO. Le filtre concerne la sélection automatique. Si vous ajoutez plus tard d’autres formats avec des points positifs, revoyez ce système : leur score pourrait permettre à une release sans MULTi/FRENCH d’atteindre le minimum.

Le cache de segments, limité à 50 Gio.

Le cache garde des morceaux de vidéo utiles aux lectures et se nettoie selon les réglages. On peut aussi précharger l’épisode suivant.

Ensuite, on ouvre son application Plex avec le compte utilisé pendant l’installation, on sélectionne le serveur Ether et on épingle ses bibliothèques si on souhaite. Il n’y a pas de dossiers Films/Séries à créer.

Au lancement de la lecture d’un média, Ether recherche et vérifie les sources en fonction du profil choisi. Le tableau de bord permet de suivre les sessions, leur débit et de voir si le lecteur est en lecture directe ou si ça transcode. Les menus Accueil et Collections servent à organiser ce qui est présenté aux clients.

Le flux passe par AllDebrid / Ether / client. Pour ces lectures, AllDebrid voit l’IP de sortie d’Ether, pas celle de chaque spectateur, Ether sert donc de proxy ce qui fait qu’on peut lire plusieurs flux en même temps depuis 1 seul compte AllDebrid.

Les screens sont ceux de la version 0.2.47. Le projet bouge vite (déjà le cas depuis que je rédige l’article), certains menus peuvent vont donc évoluer.

Ether est une solution tout en un, presque parfaite pour du streaming 🙂

Je suis en train de travailler à un mod qui apporte des fonctionnalités spécifiques :

  • Musique en streaming (flac/hires)
  • Création de bilbiothèques/Collections par Studios, Plateforme de diffusion etc
  • Recherche de rlz selon langues/résolution/codec pour ne lister QUE des médias « diffusés » par exemple en VF/MULTi/VQ et/ou VOSTFR
  • Recherche et Bibliothèques à la demande de contenus Films/Séries en VOSTFR
  • Évidemment, Bibliothèques pour SeerrCatalog (donc contenus à la demande)
  • Création de bibliothèque/collections depuis des addons de catalogues Stremio
  • Sources Stremio
mphetrf