Universal Converter
2026
Universal Converter est une application desktop qui convertit vos fichiers en local : images, vidéos, audio et documents, sans rien envoyer vers internet.
Construit sur Electron avec FFmpeg, Sharp et Mammoth, l'application s'assure qu'aucune donnée ne quitte votre ordinateur. La confidentialité et la performance avant tout.
Fonctionnalités
- Traitement hors-ligne : toutes les conversions sont effectuées en local, sans upload ni cloud
- Large support de formats : images, audio, vidéo et documents
- Dossier de sortie personnalisé : choisissez le répertoire de destination
- Glisser-déposer : déposez simplement des fichiers sur l'interface
- Conversion par lot : convertissez plusieurs fichiers en un seul clic
- Thème sombre / clair : basculez selon vos préférences
Formats supportés
Images
JPG, PNG, WEBP, GIF, BMP, TIFF, ICO, PDF
Vidéo
MP4, MOV, AVI, MKV, WEBM, FLV, WMV
Audio
MP3, WAV, AAC, OGG, FLAC, M4A, WMA
Documents
PDF, DOCX, TXT, HTML, ODT
Technologies
Application desktop construite avec Electron, utilisant FFmpeg pour la vidéo/audio et Sharp pour le traitement d'images.
Electron
React
TypeScript
Vite
Tailwind CSS
FFmpeg
Sharp
Extrait de code
C'est ici que la conversion se passe vraiment. L'application reçoit le fichier, détermine son format cible, puis appelle FFmpeg ou Sharp selon le cas.
electron/main.ts
70ipcMain.handle('convert-file', async (event, filePath, format, outputDir) => {71 try {72 const fileName = path.basename(filePath, path.extname(filePath));73 const finalOutputDir = outputDir || app.getPath('downloads');74 const outputPath = path.join(finalOutputDir, `${fileName}.${format}`);7576 const imageFormats = ['jpg', 'png', 'webp', 'gif', 'tiff', 'avif', 'ico'];77 const videoFormats = ['mp4', 'mov', 'avi', 'mkv', 'webm'];78 const audioFormats = ['mp3', 'wav', 'aac', 'ogg', 'flac'];7980 if (imageFormats.includes(format.toLowerCase())) {81 await sharp(filePath).toFormat(format as any).toFile(outputPath);82 } else if (videoFormats.includes(format.toLowerCase())) {83 await new Promise((resolve, reject) => {84 ffmpeg(filePath).toFormat(format)85 .on('end', resolve)86 .on('error', reject)87 .save(outputPath);88 });89 }90 } catch (err) {91 return { success: false, error: String(err) };92 }93});