openDL
openDL est un petit outil de téléchargement en terminal qui réunit mes sources X et Instagram dans une seule interface, avec une barre de prompt, des commandes et un suivi en direct.
- Année
- 2026
- Catégorie
- Playground
- Statut
- Version 0.1
- Rôle
- Conception, design et développement
- Stack
- Python, Textual, gallery-dl

Avertissement. Cette page présente un projet personnel, jamais publié. openDL n’a aucun lien avec d’autres produits ou projets, même s’il en reprend la direction artistique. En savoir plus
openDL est une petite application de téléchargement qui vit dans le terminal. Elle pilote gallery-dl [1] et rassemble, dans une seule interface, ce que je faisais jusque-là avec plusieurs scripts : récupérer les médias que j’ai aimés sur X et ceux que j’ai enregistrés sur Instagram.
C’est un projet de Playground : pas un produit, plutôt une façon de me demander si un outil en ligne de commande pouvait avoir la même clarté qu’une vraie application.
D’où ça vient
À l’origine, j’avais deux outils qui n’avaient rien à voir l’un avec l’autre.
Pour X, un petit script Python avec un menu numéroté, capable de retrouver ce qui était nouveau depuis la dernière fois. Pour Instagram, un fichier .bat et une liste d’URL que j’exportais à la main.
Ça marchait, mais chaque source avait ses habitudes, ses dossiers et ses réglages. Je voulais un seul endroit, avec une seule façon de lancer, d’interrompre et de suivre un téléchargement.
L’interface m’a donné l’envie d’aller plus loin que le menu : j’avais en tête celle d’OpenCode [2], très sobre, centrée sur une grande barre où l’on tape ses commandes. C’est devenu le point de départ du projet.
Ce que ça fait
- Deux sources : les likes de X, et les posts enregistrés d’Instagram ;
- Une barre de prompt pour tout piloter :
/dl,/scan,/pause,/history,/cookies,/open… ou simplement coller une URL ; - Un suivi en direct : posts traités, fichiers, taille téléchargée, vitesse, temps restant et dossier de sortie ;
- Un panneau latéral qui montre les étapes faites, en cours et à venir ;
- Un historique visible : chaque commande reste affichée avec son résultat, comme dans une conversation, pour retrouver facilement ce qui s’est passé ;
- Une interruption volontaire : il faut appuyer deux fois sur
esc, à moins de cinq secondes d’écart, pour couper un téléchargement. Plus de faux mouvements ; - Une vérification des cookies avant de commencer, pour savoir tout de suite si une session a expiré.
Les interfaces
L’écran d’accueil reste volontairement vide : un logo, une barre de prompt, et quelques raccourcis.


Dès qu’on tape une commande, la vue bascule vers la session : l’historique au centre, la barre de prompt en dessous, et un panneau d’informations sur le côté.





Sous la barre de prompt, une ligne d’état s’adapte à la situation. Au repos, elle affiche le dernier fichier écrit et le nombre de fichiers (par exemple 23/234 (10 %)). Pendant une opération, elle laisse place à un petit indicateur animé, esc interrupt, et la demande de confirmation quand on appuie une première fois.
Chaque source a sa couleur : le bleu de X et le rose d’Instagram colorent le nom de la source, la barre à gauche du prompt et l’indicateur de progression.
Le logo
Le logo est dessiné lettre par lettre sur une grille de 7 lignes et 4 colonnes. Les minuscules de « open » reposent sur la même ligne de base, le « p » descend d’une ligne, et « D » et « L » montent d’une ligne au-dessus.
Chaque pixel est un demi-bloc de terminal, ce qui donne des carrés à peu près réguliers, avec deux teintes par mot : une pour les traits, une plus sombre pour remplir les creux du bas des lettres.

Comment ça marche
openDL ne télécharge rien lui-même. gallery-dl reste le moteur : l’application le lance en sous-processus et suit sa progression en lisant ce qu’il affiche, événement par événement (un post commence, un fichier est téléchargé, un fichier est ignoré parce qu’il existe déjà).
Un détail m’a coûté un peu de temps : l’option --print de gallery-dl affiche bien ces événements, mais désactive le téléchargement. Il faut utiliser --Print, avec un P majuscule, pour avoir les deux.
La méthode dépend de la source.
- X : une copie des 32 derniers likes connus sert de repère. L’application parcourt la timeline sans rien télécharger jusqu’à retrouver ce repère, compte les nouveautés, puis ne télécharge que celles-là ;
- Instagram : gallery-dl s’arrête après dix fichiers déjà archivés d’affilée, ce qui revient à ne prendre que les nouveautés sans connaître le total à l’avance.
Les dossiers, les cookies et les archives viennent tous de la configuration de gallery-dl. openDL la lit mais n’a pas de configuration à lui : un seul endroit à modifier, que j’utilise ou non l’interface.
La pause suspend simplement le processus de gallery-dl, et l’annulation le ferme proprement sans toucher à l’archive : au prochain lancement, tout reprend où ça s’était arrêté.
Un détour par les likes
Je pensais d’abord télécharger mes likes Instagram, comme sur X. Mais gallery-dl n’a pas d’extracteur pour ça : seulement pour les posts enregistrés. Ma liste d’URL de likes, elle, devait être tenue à jour à la main.
Le flux des enregistrés fonctionne directement avec la session de mes cookies, sans liste à tenir à jour. J’ai donc changé de cible plutôt que de bricoler autour.
Et Lia ?
Ma première idée était de faire apparaître Lia dans l’interface, en ASCII, avec ses expressions selon l’état : un clin d’œil quand il n’y a rien de nouveau, des étoiles dans les yeux quand il y a des nouveautés, des spirales quand une erreur survient.
La conversion de ses 40 visages en braille fonctionnait, et le résultat était reconnaissable. Mais dans cette interface, elle ne rendait pas aussi bien que je l’espérais.
Je l’ai donc retirée. Le code qui génère ses visages reste dans le projet, au cas où elle trouverait un meilleur endroit pour revenir.
Stack
- Python pour toute l’application ;
- Textual pour l’interface en terminal (disposition, écrans, saisie) et Rich pour le texte coloré [3] ;
- gallery-dl comme moteur de téléchargement ;
- asyncio pour lancer gallery-dl en sous-processus et lire sa sortie sans bloquer l’interface ;
- Node.js et sharp pour la conversion de Lia en braille (désormais archivée).
Limites et suite
openDL en est à sa première version. Il a un mode démonstration pour travailler l’interface sans rien télécharger ; avec le vrai moteur, il ne gère pour l’instant que mes deux sources.
Pour Instagram, le total n’est pas connu à l’avance : la barre de progression est donc moins précise que sur X. Et gallery-dl signale l’absence de yt-dlp, ce qui ne bloque rien pour l’instant.
La suite : d’autres sources et des retours d’erreur plus clairs.
Avertissement
openDL n’est ni affilié, ni approuvé, ni soutenu par OpenCode ou Anomaly.
Il n’a pas non plus de lien avec openDL, un autre projet portant le même nom. Ici, « openDL » veut simplement dire open (ouvert) et DL (download, téléchargement). Comme il s’agit d’un projet personnel, je n’ai pas changé le nom.
J’ai repris la direction artistique d’OpenCode (le logo, l’interface) parce qu’elle me semblait cohérente avec openDL, et que j’aime beaucoup ce qui se dégage de leurs produits et de leur UI/UX.
Le téléchargement de médias depuis des sources comme X, Instagram, et celles prévues plus tard, reste strictement dans un cadre privé : usage personnel, aucune diffusion, et les droits restent à leurs auteurs. C’est pourquoi openDL ne sera jamais publié : pour ne pas fournir d’outil clé en main de téléchargement de masse de médias.
Les données visibles dans les captures d’écran sont fictives. Toute ressemblance avec des noms ou des situations réelles serait fortuite.
- gallery-dl, le téléchargeur sur lequel repose openDL
- OpenCode, l’interface qui m’a servi de référence (projet sans lien avec openDL)
- Textual, le framework d’interface en terminal