Iris
« Votre bibliothèque, sans attaches. » Un Netflix maison, littéralement : récupération et agrégation depuis les trackers, un player web custom qui digère l'exotique, des applis Android TV et mobile complètes. En Rust.
- Rôle
- Conception, développement, applis Android, exploitation.
- Période
- 2026
- Stack
- Rust (Axum, SQLite), librqbit, ffmpeg, React 19, WebCodecs, Kotlin (Compose for TV, Media3)
- Liens


Le besoin
Je voulais pour mon foyer l’équivalent de Netflix : une recherche, une bibliothèque qui se remplit seule et la lecture sur chaque écran de la maison. Iris est cette médiathèque privée. Les comptes s’ouvrent sur invitation, les sources sont les trackers et indexeurs que je configure, et chaque fichier téléchargé est repartagé avec les autres pairs.
Entre le premier commit, le 8 mai 2026, et la version 1.5.0, le 1er octobre, Iris a connu 30 versions.
À l'usage
Une recherche interroge tous les trackers en parallèle et renvoie une seule liste classée. Chaque release est vérifiée auprès de TMDB, car les identifiants des indexeurs sont souvent faux. La lecture démarre dès la réception des premiers morceaux.
La bibliothèque garde la position de lecture de chaque compte et propose l’épisode suivant. Toutes les trois heures, les rayons de découverte croisent les tendances TMDB avec ce qui est disponible. Quand le disque se remplit, Iris supprime les releases lues il y a le plus longtemps.
Iris propose aussi la TV en direct : les chaînes gratuites des listes iptv-org et la TNT de la maison, reçue par un ancien décodeur.


Architecture
Le serveur est un binaire Rust qui intègre son propre moteur BitTorrent : un fichier se lit pendant son téléchargement. Chaque client déclare les formats et décodeurs qu’il gère ; le serveur répond par un manifeste, et le client choisit son mode de lecture.
Le lecteur web contient six moteurs de lecture derrière une seule interface, du plus léger au plus coûteux : de la lecture directe du MP4 au HLS produit par le serveur, en passant par le remux du MKV, le décodage WebCodecs et le transcodage du HEVC en H.264 dans un worker WebAssembly. Si un moteur échoue, le lecteur passe au suivant. J’ai réduit le délai avant la première image du transcodeur, après un saut dans la vidéo, de 17,9 s à 3,8 s.
La TNT est reçue par un AirTies AIR 7310T sous Linux mainline. J’ai écrit son pilote DVB à partir des registres relevés dans le firmware d’origine ; Iris remuxe les chaînes en HLS et répartit les deux tuners du boîtier entre les spectateurs.
L’application Android TV fonctionne aussi sur téléphone. Elle embarque les décodeurs FFmpeg et AV1 de Media3, ce qui permet à la télévision de lire le DTS et l’AV1 10 bits.


Décisions
Le travail côté client. Le navigateur remuxe lui-même ; le serveur copie les flux et réencode seulement pour un appareil qui décode en logiciel une source 10 bits lourde.
Un contrat d’API pour trois clients. Le serveur publie sa spécification OpenAPI, dont sont générés les types du client web et de l’application TV : une divergence casse la compilation.
Des mises à jour compatibles. L’APK s’installe depuis mon serveur et se met à jour depuis ses réglages. Le serveur reste compatible avec les anciennes versions de l’application ; un en-tête de version encadre les rares ruptures.
Remonter à la cause. Sur macOS, Firefox 154 échouait à reprendre la lecture des fichiers HEVC. Une page de test a isolé la cause dans Gecko, qui ignore les images CRA comme point d’entrée ; Iris convertit la CRA initiale en image clé IDR. J’ai signalé le problème à Mozilla avec un cas de reproduction de 112 Ko.
Aujourd'hui
Iris 1.5.0 sert le foyer sur le web, sur Android TV et sur téléphone, TV en direct comprise. Le code est public sur github.com/uplg/iris, et le pilote du décodeur sur github.com/uplg/BCM7231B2.