Problématique
Convertir des images au format AVIF en masse dans un pipeline d'automatisation nécessite un outil disponible par API, fiable et rapide — une combinaison que les solutions existantes n'offraient pas.
Le problème :
- Les outils CLI comme
convert(ImageMagick) ouavifencne s'intègrent pas facilement dans des workflows API - Les services cloud de conversion d'images sont payants et introduisent une dépendance externe
- Les bibliothèques PHP disponibles pour AVIF sont limitées en performance et en compatibilité
- Aucun plugin WordPress natif ne proposait à l'époque de conversion AVIF automatique à l'upload
Impact :
- Impossibilité d'intégrer la conversion AVIF dans mes pipelines d'automatisation de contenu
- Poids des images non optimisé, impactant les scores Lighthouse et les Core Web Vitals
- Dépendance à des formats moins efficaces (WebP, JPEG) faute d'outil adapté
Solution technique
J'ai développé un micro-service Go exposant une API REST minimaliste avec un seul endpoint de conversion.
Choix techniques :
Go + bimg :
- Go offre des performances natives et une empreinte mémoire très faible
bimgest un binding Go vers libvips, la bibliothèque de traitement d'images la plus rapide disponible- La conversion est nettement plus rapide qu'avec ImageMagick, avec une qualité équivalente
API minimaliste :
- Un seul endpoint
POST /convertacceptant une image en multipart/form-data - Réponse directe en binaire AVIF avec les headers Content-Type appropriés
- Pas d'authentification pour un usage interne uniquement
Intégration dans mes workflows :
- J'appelle ce service depuis mes scripts d'automatisation avant publication
- Toutes les images passent par ce service avant d'être stockées ou publiées
Perspective d'évolution :
- Ce service est conçu pour devenir le backend d'un plugin WordPress qui convertirait automatiquement les images à l'upload, sans intervention manuelle
Le projet
J'ai développé un micro-service minimaliste en Go permettant de convertir à la volée n'importe quelle image (JPG, PNG, WebP) au format AVIF via un simple appel API.
Contexte
Dans mes projets d'automatisation de contenu, je manipule régulièrement de nombreuses images. AVIF est aujourd'hui le format de compression le plus efficace — nettement supérieur à WebP — mais les outils de conversion existants sont soit lourds à intégrer, soit indisponibles sous forme d'API REST prête à l'emploi.
Objectifs
- Exposer un endpoint simple pour convertir une image en AVIF à partir d'une URL ou d'un upload
- Minimiser les dépendances et la surface d'attaque
- Préparer le terrain pour un futur plugin WordPress qui effectuerait la conversion automatiquement à l'upload
Architecture
J'ai opté pour Go pour sa légèreté, sa rapidité d'exécution et son excellente gestion des opérations I/O. La bibliothèque bimg (binding Go vers libvips) assure les conversions avec des performances nettement supérieures à ImageMagick.
POST /convert
↓
Lecture de l'image source (URL ou fichier)
↓
Conversion via bimg/libvips
↓
Réponse: image AVIF binaire