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

[modifier | modifier le wikicode]
  • 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.
  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)

[modifier | modifier le wikicode]

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.}

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 »

[modifier | modifier le wikicode]
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

[modifier | modifier le wikicode]
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

[modifier | modifier le wikicode]

À 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

[modifier | modifier le wikicode]
  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é

[modifier | modifier le wikicode]
  • 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.
  • Dépôt GitHub (code, manuel PDF bilingue, benchmarks honnêtes, journal des modifications).