Extension:VaultTecMediaOptimizer

Vault-Tec Media Optimizer
État
stable
Type
média, page spéciale
Hooks utilisés
  • UploadComplete
  • FileUpload
  • FileTransformed
  • FileDeleteComplete
  • OutputPageBeforeHTML
Description
Optimisation d'images sans perte et diffusion automatique de WebP (et AVIF expérimental) via une balise <picture>...</picture>.
Auteur(s)
Archives de Vault-Tec
Dernière version
1.8.4
Licence
GPL-2.0-or-later
Téléchargement
MediaWiki
≥ 1.43
PHP
≥ 8.1
Exemple

L'extension Vault-Tec Media Optimizer (VTMO) allège les médias du wiki de deux façons complémentaires :

  • Optimisation sans perte des fichiers d'origine (PNG, JPEG, et GIF via gifsicle) — les pixels restent identiques, seul le poids disque baisse.
  • Génération de WebP (et d'AVIF en option expérimentale) servis automatiquement aux navigateurs compatibles via une balise <picture>, avec repli intégral sur l'image d'origine. C'est le vrai gain : bande passante et rapidité pour les visiteurs.

Les nouveaux fichiers sont traités automatiquement à l'envoi ; un rattrapage (backfill) traite l'existant, via la file de tâches ou en ligne de commande. Tout tourne sur le serveur, sans aucune dépendance cloud.

Fonctionnalités

  • WebP servi via <picture> (avec srcset Retina), repli intact sur l'<img> d'origine.
  • WebP des miniatures à la création et à la demande au rendu (couvre les tailles déjà présentes sur le disque).
  • Optimisation des originaux : PNG, JPEG, et GIF sans perte via gifsicle -O3 (sûr pour l'animation).
  • 2{ème passe PNG sans perte optionnelle : zopflipng ou oxipng, déportée dans un job d'arrière-plan (aucune latence pour le visiteur).
  • Moteur d'image sélectionnable : auto (Imagick → GD) ou vips (libvips, bien plus rapide et léger à grande échelle).
  • Mode gros wiki : traitement en ligne de commande sans saturer la file de tâches.
  • Écritures atomiques (fichier temporaire + rename) : aucun fichier dérivé tronqué n'est jamais servi, même sous forte concurrence.
  • AVIF expérimental (branche dédiée) avec garde « keep-if-smaller » : l'AVIF n'est servi que s'il est plus léger que le WebP.
  • Trois pages spéciales (diagnostic, rattrapage, statistiques) pour piloter le tout.

Installation

  1. Télécharger et placer le dossier VaultTecMediaOptimizer dans le répertoire extensions/.
  2. Ajouter le code suivant au bas de LocalSettings.php :
wfLoadExtension( 'VaultTecMediaOptimizer' );
  1. Exécuter le script de mise à jour pour créer les tables :
php maintenance/run.php update --quick
  1. Vérifier Spécial:VaultTec_État (tout au vert), puis lancer le rattrapage depuis Spécial:VaultTec_Optimisation.
  2. Terminé — Naviguer sur le wiki pour vérifier que tout fonctionne.

Dépendances externes (optionnelles)

Aucune n'est obligatoire ; chacune débloque une capacité supplémentaire. Sous Debian/Ubuntu :

Binaire Apporte Installation
gifsicle Optimisation GIF sans perte (1ère passe) apt install gifsicle
vips (libvips) Moteur d'image rapide/léger apt install libvips-tools
zopflipng 2{ème passe PNG (compression maximale) paquet zopfli ou binaire dédié
oxipng 2{ème passe PNG (rapide, multi-thread) binaire dédié

Lancer ensuite les commandes de traitement avec le même utilisateur système que le serveur web (souvent www-data) pour éviter les problèmes de permissions sur les fichiers générés.}

Configuration

Toutes les variables sont optionnelles et ont une valeur par défaut sûre.

Variable Défaut Rôle
$wgVaultTecMediaOptimizerEnabled true Active/désactive l'extension.
$wgVaultTecMediaOptimizerFormats png, jpeg, gif Types MIME traités.
$wgVaultTecMediaOptimizerOptimizeOriginals true Optimise les originaux sur place (sans perte).
$wgVaultTecMediaOptimizerImageEngine auto Moteur d'image : auto (Imagick→GD) ou vips.
$wgVaultTecMediaOptimizerVipsBinary vips Chemin/nom du binaire libvips.
$wgVaultTecMediaOptimizerWebPQuality 85 Qualité WebP (JPEG/GIF lossy).
$wgVaultTecMediaOptimizerWebPLosslessForPng true WebP sans perte pour les PNG.
$wgVaultTecMediaOptimizerWebPDirectory images_webp Dossier des WebP (frère de images/).
$wgVaultTecMediaOptimizerGifsicleEnabled false Active l'optimisation GIF via gifsicle.
$wgVaultTecMediaOptimizerGifsicleLevel 3 Niveau gifsicle (1–3 ; 3 = le plus agressif, sans perte).
$wgVaultTecMediaOptimizerZopfliEnabled false Active la 2{ème passe PNG.
$wgVaultTecMediaOptimizerPngEngine zopflipng Moteur 2{ème passe : zopflipng ou oxipng.
$wgVaultTecMediaOptimizerZopfliIterations 15 Itérations zopflipng (plus = plus petit, plus lent).
$wgVaultTecMediaOptimizerStripMetadata true Retire les métadonnées à l'optimisation.
$wgVaultTecMediaOptimizerProcessThumbnails true Génère le WebP des miniatures.
$wgVaultTecMediaOptimizerOnDemandThumbLimit 5 Budget de miniatures traitées à la demande par rendu.
$wgVaultTecMediaOptimizerUseJobQueue true Traitement via la file de tâches (mettre à false en mode gros wiki).
$wgVaultTecMediaOptimizerMaxFileSize 52428800 Taille max traitée (octets, 50 Mo).
$wgVaultTecMediaOptimizerBackfillBatchSize 20 Taille de lot du rattrapage.

Exemple : configuration « performance »

wfLoadExtension( 'VaultTecMediaOptimizer' );

// Moteur rapide
$wgVaultTecMediaOptimizerImageEngine = 'vips';

// GIF sans perte
$wgVaultTecMediaOptimizerGifsicleEnabled = true;

// 2e passe PNG maximale (sans perte) — déportée en job
$wgVaultTecMediaOptimizerZopfliEnabled = true;
$wgVaultTecMediaOptimizerPngEngine     = 'zopflipng';

Pages spéciales

Page Alias français Rôle
Special:VTMOStatus Spécial:VaultTec_État Diagnostic : dépendances, moteur actif, espace disque.
Special:VTMOBackfill Spécial:VaultTec_Optimisation Rattrapage des fichiers existants.
Special:VTMOStats Spécial:VaultTec_Statistiques Statistiques et fichiers en échec.

Scripts de maintenance

À lancer via maintenance/run.php :

Script Rôle
optimizeImages.php Rattrapage en ligne de commande (1ère passe + WebP), sans la file. Option --format=gif, --dry-run, --force
purgeQueue.php Vide les files de tâches de l'extension.
recompressOriginals.php Recompression PNG (2{ème passe) des originaux existants.
repairBloatedOriginals.php Répare des originaux qui auraient grossi.
repairCorruptedFilenames.php Répare les originaux dont le nom de fichier sur le disque a dérivé de celui en base (mojibake de migration).

Exemple — ne traiter (sans perte) que les GIF existants :

php maintenance/run.php \
  extensions/VaultTecMediaOptimizer/maintenance/optimizeImages.php --format=gif

Fonctionnement

  1. À l'envoi d'un fichier, un job d'arrière-plan optimise l'original et génère le WebP (le rendu de page n'attend jamais ce travail).
  2. Au rendu d'une page, l'extension réécrit les <img> en <picture> : le navigateur reçoit le WebP/AVIF s'il existe sur le disque, sinon l'image d'origine.
  3. Le service est décidé par la présence du fichier dérivé sur le disque : aucune image figée/tronquée n'est jamais servie. Un GIF animé que le moteur ne peut pas encoder en WebP reste servi en GIF animé.

Compatibilité

  • MediaWiki ≥ 1.43, PHP ≥ 8.1.
  • Compatible avec MultimediaViewer, MediaUploader, TimedMediaHandler et PageImages.
  • Repli automatique et gracieux : si une dépendance optionnelle manque, la capacité correspondante est simplement sautée.

Voir aussi

  • Dépôt GitHub (code, manuel PDF bilingue, benchmarks honnêtes, journal des modifications).