Avant Freedom Loader : le problème de fond

Je suis une personne qui a besoin de musique dans la vie de tous les jours. Elle rythme mes pas, accompagne mes réflexions, me motive quelle que soit la tâche en cours. J’en écoute en codant, en me déplaçant, en faisant à peu près n’importe quoi. Ce n’est pas une habitude anodine, c’est quelque chose d’ancré.

Le problème : je n’ai eu internet sur mon téléphone qu’à partir de mes études supérieures. Avant ça, écouter de la musique en mobilité, c’était se débrouiller autrement.

Ma première solution, c’était la radio. L’application que j’utilisais permettait d’enregistrer le flux audio en direct via les écouteurs filaires. Ça marchait, jusqu’à ce que les limites deviennent évidentes. La radio modifie les morceaux, ajoute des jingles, parle par-dessus les intros et les fins. Et surtout, elle ne passe pas ce qu’on veut. Zéro contrôle, zéro personnalisation.

Viennent ensuite les convertisseurs YouTube. À l’époque, je ne connaissais pas encore Spotify ou Deezer, YouTube était ma plateforme principale. Ces outils fonctionnaient, mais ils étaient obscurs, peu fiables, et les fichiers générés étaient bâclés : noms étranges, aucune miniature, aucune métadonnée. Quand on veut juste écouter son artiste préféré sur le chemin du collège, on s’en contente. Mais la frustration s’accumule.

J’ai donc toujours vécu avec des solutions imparfaites. Et c’est cette frustration accumulée qui a tout déclenché.

Le déclic

Le déclencheur final est bête, presque anecdotique. Je m’apprête à partir en vacances. Comme d’habitude, je veux télécharger un grand nombre de nouvelles musiques pour mes trajets à vélo, sans dépendre d’une connexion qui ne sera de toute façon pas disponible partout. Je lance mon outil habituel. Et là : limite de dix téléchargements par jour.

Pour beaucoup de personnes, cette limite est largement suffisante. Pour moi, ce fut un scandale, toute proportion gardée.

L’idée de créer mon propre outil m’a traversé l’esprit presque instinctivement. Sur le moment, je n’y ai pas vraiment cru. J’ai laissé cette pensée de côté. Puis, peu de temps après, par hasard, je tombe sur YT-DLP.

YT-DLP est un exécutable en ligne de commande permettant de télécharger du contenu audio et vidéo depuis des dizaines de plateformes. Puissant, fiable, activement maintenu par une communauté open source sérieuse. Je ne le savais pas encore, mais cet outil allait rythmer mes vacances d’été et influencer durablement ma manière de concevoir des projets informatiques.

Pourquoi ne pas juste utiliser YT-DLP directement ?

yt-dlp -f "bestvideo+bestaudio" --merge-output-format mp4 URL

C’est la commande de base pour télécharger une vidéo en bonne qualité. Pas compliqué quand on sait. Mais pour quelqu’un qui n’utilise pas le terminal au quotidien, c’est une barrière immédiate. Et ce n’est que la version simple : dès qu’on veut gérer les cookies, choisir un format audio spécifique, télécharger une playlist entière ou extraire uniquement l’audio d’une vidéo, ça devient vite illisible.

YT-DLP est un outil pensé pour des utilisateurs techniques. Ce n’est pas un défaut, c’est un choix cohérent avec ce qu’il est. Mais ça laissait un vide : toutes les personnes qui auraient voulu l’utiliser sans jamais toucher à un terminal n’avaient pas de solution propre.

C’est exactement ce vide que Freedom Loader cherche à combler.

Concevoir avant de coder

Très rapidement, l’idée de créer un environnement autour de YT-DLP s’est imposée. Je ne voulais pas simplement l’utiliser pour moi, je voulais le rendre accessible à des personnes qui, comme moi avant, ne souhaitent pas forcément comprendre des lignes de commande.

Avant d’écrire une seule ligne de code, j’ai ouvert Figma. En suivant la maxime d’Einstein selon laquelle il passerait la majorité de son temps à définir un problème avant de le résoudre, j’ai commencé par poser mes idées.

La question centrale : qu’est-ce que l’utilisateur doit voir, comprendre et ressentir ?

J’ai expérimenté plusieurs maquettes, testé différentes couleurs, dispositions et interactions. Ces choix, aussi anodins qu’ils semblent, ont demandé beaucoup de réflexion. L’organisation des boutons, la clarté des informations affichées, la réactivité de l’interface, chaque détail avait son importance. Une petite erreur de design peut rendre un outil inutilisable pour quelqu’un qui n’a pas l’habitude.

Dès le départ, certaines convictions étaient claires :

  • L’interface doit être simple et ne pas effrayer
  • Les informations utiles doivent être visibles, la complexité technique cachée
  • Le projet sera open source, pas de compromis là-dessus

Ce dernier point n’était pas négociable. L’open source représente pour moi un modèle de partage et de transmission du savoir. Rendre le code accessible, compréhensible et améliorable par d’autres est une démarche qui me correspond profondément. C’est une manière de redonner ce qu’on a reçu.

La réalisation technique

Freedom Loader est développé en JavaScript, sous Node.js, avec Express, Winston et Electron. Ce dernier a été un choix déterminant : il permet de créer une application autonome, multiplateforme, fonctionnant entièrement en local. Pas de serveur, pas de compte, pas de connexion requise pour faire tourner l’outil.

Techniquement, Freedom Loader agit comme un wrapper autour de YT-DLP. L’application prépare les paramètres, exécute le binaire, et gère le résultat : progression, métadonnées, erreurs. Quelques apprentissages marquants en chemin :

  • Gérer les processus enfants Node.js proprement : lancer YT-DLP, écouter son output en temps réel, gérer les erreurs et les timeouts sans bloquer l’interface
  • Parser les outputs en direct : pour afficher une barre de progression cohérente à partir d’une sortie texte non structurée
  • Packager des binaires tiers (yt-dlp, ffmpeg) directement dans l’app, sans obliger l’utilisateur à les installer manuellement
  • Mettre en place un système de logs avec Winston, pour faciliter le diagnostic et l’assistance utilisateur

Ce dernier point, le packaging des binaires, a été de loin le plus complexe. Chaque système d’exploitation a ses propres contraintes : chemins d’accès différents, permissions variables, comportements qui divergent entre Windows, macOS et Linux. Ce qui fonctionne sur une machine ne fonctionne pas forcément sur une autre. Il a fallu tester, adapter, et prévoir les cas limites.

Le challenge inattendu : YouTube

Le défi le plus imprévu n’est pas venu du code lui-même, mais de l’extérieur.

YouTube a progressivement mis en place des mécanismes de vérification de plus en plus complexes, des protections qui rendaient certains téléchargements instables ou impossibles sans contournement. Ce genre de changement côté plateforme, on ne le voit pas venir. Du jour au lendemain, quelque chose qui fonctionnait parfaitement cesse de marcher.

Pour y répondre, j’ai dû intégrer Deno et mettre en place une gestion des cookies utilisateurs. La solution actuelle repose sur l’utilisation de Firefox pour récupérer les cookies de session, ce qui permet de simuler une navigation authentifiée sans demander à l’utilisateur de configurer quoi que ce soit manuellement. C’est transparent, et c’est voulu.

C’est aussi à ce moment que j’ai vraiment compris ce que signifie faire de la veille technologique sur un projet en production. Un outil comme Freedom Loader dépend de composants externes qui évoluent indépendamment. Il faut surveiller, anticiper, et s’adapter, pas juste une fois, mais en continu.

La question que tout projet open source force à se poser

Un outil permettant de télécharger du contenu depuis des plateformes comme YouTube ou Twitch suscite forcément des interrogations légitimes. Je ne les esquive pas.

Je respecte profondément le travail des artistes et des créateurs. Freedom Loader n’a jamais eu pour objectif de voler du contenu ou de nuire à quiconque. Il est pensé avant tout comme un outil d’accès hors-ligne, dans des contextes précis où la connexion n’est pas disponible ou peu fiable : trajet à vélo, vacances, zones blanches.

Créer un projet et l’ouvrir au public, c’est accepter une responsabilité. Chaque fonctionnalité implémentée a un impact potentiel. Même si on crée quelque chose pour soi, le rendre accessible implique de réfléchir aux conséquences de ses choix. C’est un équilibre entre innovation, liberté et usage éthique, une réflexion que je trouve saine à mener, quelle que soit la taille du projet.

La dette technique : honnêteté oblige

Freedom Loader a une dette technique réelle, et je ne vais pas faire semblant que non.

Certaines décisions ont été prises rapidement, parfois dans l’urgence, parfois par manque d’expérience à l’époque où elles ont été prises. Certains modules ont été intégrés sans refactorisation complète. Certaines solutions sont temporaires et le sont restées plus longtemps que prévu.

Mais cette dette n’est pas un défaut ignoré, elle fait partie du projet et du processus d’apprentissage. Chaque bug, chaque limitation, chaque nouvelle version est une occasion de corriger, d’améliorer et de renforcer l’application. C’est aussi ce qui rend le projet vivant : il évolue au rythme de mon expérience et de mes découvertes.

J’aurais pu attendre d’avoir tout parfait avant de publier. Mais un projet parfait qui n’existe pas ne sert personne. Je préfère quelque chose d’imparfait, honnête, et en amélioration continue.

Aujourd’hui

Freedom Loader fonctionne sur YouTube, Twitch, Twitter/X, Instagram, et bien d’autres plateformes que je n’ai pas encore eu l’occasion de tester exhaustivement. Le projet est open source, disponible sur masteracnolo.github.io/FreedomLoader.

Ce qui me rend le plus fier, ce n’est pas la technique. C’est que des gens qui ne connaissent rien au code s’en servent sans jamais ouvrir un terminal. L’utilisateur ouvre l’application, colle un lien, choisit ce qu’il veut récupérer, et l’app s’occupe du reste. La complexité est invisible. C’est exactement ce que je voulais.

Freedom Loader n’est pas simplement un logiciel. C’est une partie de mon apprentissage, de ma curiosité et de ma créativité mis en code. Un projet n’est jamais terminé, il évolue avec son créateur. Et c’est dans cet esprit que je continue à le faire avancer.

C’est ça, l’open source que j’aime faire.