Service auto-hébergé
C4illin/ConvertX avatar
C4illin/ConvertX

ConvertX : un convertisseur de fichiers auto-hébergé qui enchaîne vingt moteurs de conversion

ConvertX est une application Web auto-hébergée qui convertit des fichiers dans plus de 1 000 formats de documents, d'images, audio et vidéo.

18 987 étoiles1 080 forksTypeScriptAGPL-3.0
GitHub

En bref

De quoi s’agit-il ?
Analyse de C4illin/ConvertX : application web TypeScript sous Bun et Elysia, plus de 1 000 formats via FFmpeg, ImageMagick, Pandoc ou Calibre, déploiement Docker avec comptes, mot de passe et suppression automatique.
À qui s’adresse-t-il ?
ConvertX s'adresse aux personnes et petites équipes qui veulent un équivalent privé des convertisseurs en ligne, avec la garantie que les fichiers restent sur leur machine ; il ne convient pas à une ouverture publique multi-locataires sans durcissement supplémentaire.
Puis-je l’utiliser commercialement ?
Oui, sous conditions strictes. AGPL-3.0 est une licence à copyleft réseau : si des personnes utilisent une version modifiée via un réseau, par exemple comme service hébergé, vous devez leur proposer son code source sous la même licence.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 1 jour.
En quel langage est-il écrit ?
Principalement TypeScript, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Vingt convertisseurs derrière une seule interface web auto-hébergée

ConvertX est une application web de conversion de fichiers à héberger soi-même, qui revendique plus de mille formats couverts. La stack est courte et moderne : TypeScript, l'exécutable Bun et le framework Elysia. Le projet affiche 18619 étoiles et 1046 forks au moment de l'indexation, un niveau d'adoption rare pour un outil de ce type.

Les fonctions annoncées tiennent en quatre lignes : convertir vers d'autres formats, traiter plusieurs fichiers à la fois, protéger l'accès par mot de passe, gérer plusieurs comptes. Rien d'une suite bureautique, mais l'essentiel pour un service qu'on installe sur son serveur pour éviter d'envoyer ses documents chez un convertisseur en ligne.

La table des convertisseurs : FFmpeg à 472 entrées, Pandoc à 65 sorties

Le README publie une table nominative de vingt convertisseurs, avec leurs cas d'usage et leurs décomptes d'entrées et de sorties. ImageMagick couvre 245 formats en entrée vers 183 en sortie, GraphicsMagick 167 vers 130, et FFmpeg domine la vidéo avec environ 472 entrées vers 199 sorties. Une note du README précise que beaucoup de formats FFmpeg sont des doublons, ce qui tempère le chiffre global des mille formats.

Le reste de la table dessine des familles distinctes : documents avec LibreOffice (41 vers 22) et Pandoc (43 vers 65), livres numériques avec Calibre (26 vers 19), images vectorielles avec Inkscape, resvg, dvisvgm, Potrace et VTracer, fichiers 3D avec Assimp (77 vers 23), courriel Outlook via msgconvert, contacts VCF vers CSV, et Markitdown côté documents Microsoft.

Premier compte et JWT_SECRET : ce que le déploiement Docker impose

Le déploiement officiel passe par l'image ghcr.io/c4illin/convertx, exposée sur le port 3000 avec un volume ./data:/app/data. Le compose du README montre la configuration minimale et la variable JWT_SECRET, utilisée pour signer le JSON Web Token ; si elle reste vide, l'application génère une valeur par randomUUID() à chaque démarrage, ce qui invaliderait les sessions à chaque redémarrage du conteneur.

Le README formule un avertissement explicite sur le premier compte : ne laissez pas le service ouvert et non configuré, car n'importe qui peut enregistrer le premier compte. En cas d'erreur unable to open database file, la correction donnée est un chown -R $USER:$USER sur le chemin choisi, indice d'une base SQLite dans le volume monté.

HTTP_ALLOWED et ALLOW_UNAUTHENTICATED : deux commutateurs à laisser fermés

Deux variables d'environnement desservent la sécurité et valent d'être lues avant tout lancement. HTTP_ALLOWED, à false par défaut, autorise les connexions HTTP ; le README avertit que sans localhost ni HTTPS, la connexion échoue, et que ce commutateur ne doit être activé qu'en local. ALLOW_UNAUTHENTICATED, aussi à false par défaut, ouvre le service sans authentification, avec la même réserve.

ACCOUNT_REGISTRATION, à false par défaut, ferme l'inscription publique une fois le premier compte créé. Cette gradation donne au déploiement domestique une posture défendable : authentification obligatoire, HTTPS ou boucle locale, inscriptions fermées. Les valeurs par défaut sont saines, et c'est leur inversion qui crée le risque.

Rétention par AUTO_DELETE_EVERY_N_HOURS et limites du volume ./data

Par défaut, la variable AUTO_DELETE_EVERY_N_HOURS vaut 24 : toutes les n heures, le service passe les fichiers plus vieux que n heures à la suppression, et la valeur 0 désactive le mécanisme. Pour un convertisseur, cette rétention par défaut est un choix raisonnable, mais qui héberge pour plusieurs comptes doit la rendre explicite dans son compose plutôt que de la subir.

Le volume ./data concentre donc la base de comptes et les fichiers en cours de conversion. Sa taille dépend de l'usage réel, et le README ne donne aucun garde-fou de quota : convertir une vidéo de plusieurs gigaoctets occupe l'espace disque jusqu'au passage du nettoyeur. WEBROOT permet en outre de servir l'application sous un sous-chemin comme example.com/convert/.

Accélération FFmpeg par FFMPEG_ARGS et l'issue 190 sur le matériel

Deux variables passent des arguments bruts à FFmpeg : FFMPEG_ARGS côté fichier d'entrée, avec l'exemple -hwaccel vaapi pour l'accélération matérielle, et FFMPEG_OUTPUT_ARGS côté sortie, avec -preset veryfast. Le README renvoie à l'issue 190 du dépôt pour les détails de l'accélération matérielle, qui dépend de la GPU et du pilote disponibles sur la machine hôte.

Ces deux variables font la différence entre un service de conversion vidéo utilisable et un service qui sature un cœur pendant des minutes. HIDE_HISTORY, dernière variable documentée, masque la page d'historique, ce qui compte quand plusieurs personnes partagent l'instance et que personne ne veut voir les fichiers des autres.

AGPL-3.0 et releases espacées : ce que ça change pour un hébergeur

Le code est sous AGPL-3.0. Pour un usage auto-hébergé, la contrainte est faible : vous pouvez l'utiliser, le modifier et l'exécuter librement. En revanche, proposer ConvertX comme service accessible sur un réseau oblige à offrir le code source modifié aux utilisateurs de ce service, condition que les forks commerciaux fermés ne respectent pas.

Le rythme des releases demande de la patience : v0.16.1 en décembre 2025, v0.17.0 en janvier 2026, puis cinq mois d'écart jusqu'à v0.18.0 en juin 2026. Le dépôt compte 125 tickets ouverts, et le README invite à proposer les convertisseurs manquants par issue ou pull request. Avant de miser sur une conversion précise, testez-la sur votre instance : la table des vingt moteurs donne les formats d'entrée et de sortie, jamais la fidélité du résultat.

Conclusion éditoriale

ConvertX s'adresse aux personnes et petites équipes qui veulent un équivalent privé des convertisseurs en ligne, avec la garantie que les fichiers restent sur leur machine ; il ne convient pas à une ouverture publique multi-locataires sans durcissement supplémentaire. Avant l'installation, fixez JWT_SECRET, laissez HTTP_ALLOWED et ALLOW_UNAUTHENTICATED à false, et testez un fichier représentatif dans chaque famille de conversion qui vous importe, car la table des convertisseurs du README ne dit rien de la qualité de sortie.

Sources officielles

  1. Official README
  2. Project repository
  3. Release notes
Notes de la communauté

Notes de la communauté