« Extension:VaultTecMediaOptimizer » : différence entre les versions
Page créée avec « {{Extension | nom = Vault-Tec Media Optimizer | état = stable | type1 = média | type2 = page spéciale | hook1 = UploadComplete | hook2 = FileUpload | hook3 = FileTransformed | hook4 = FileDeleteComplete | hook5 = OutputPageBeforeHTML | description = Optimisation d'images sans perte et diffusion automatique de WebP (et AVIF expérimental) via une balise {{... » |
Aucun résumé des modifications |
||
| (2 versions intermédiaires par un autre utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
{{ | {{Infobox_Extension | ||
| nom = Vault-Tec Media Optimizer | | nom = Vault-Tec Media Optimizer | ||
| état = stable | | état = stable | ||
| Ligne 13 : | Ligne 13 : | ||
| dernière version = 1.8.4 | | dernière version = 1.8.4 | ||
| licence = GPL-2.0-or-later | | licence = GPL-2.0-or-later | ||
| download = | | download = https://github.com/GenerationFallout/Vault-Tec-Media-Optimizer | ||
| mediawiki = ≥ 1.43 | | mediawiki = ≥ 1.43 | ||
| php = ≥ 8.1 | | php = ≥ 8.1 | ||
| Ligne 30 : | Ligne 30 : | ||
* WebP des miniatures '''à la création''' ''et'' '''à la demande''' au rendu (couvre les tailles déjà présentes sur le disque). | * 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 <code>gifsicle -O3</code> (sûr pour l'animation). | * Optimisation des originaux : PNG, JPEG, et '''GIF sans perte''' via <code>gifsicle -O3</code> (sûr pour l'animation). | ||
* ''' | * '''2ème passe PNG''' sans perte optionnelle : <code>zopflipng</code> ou <code>oxipng</code>, déportée dans un '''job d'arrière-plan''' (aucune latence pour le visiteur). | ||
* '''Moteur d'image sélectionnable''' : <code>auto</code> (Imagick → GD) ou <code>vips</code> (libvips, bien plus rapide et léger à grande échelle). | * '''Moteur d'image sélectionnable''' : <code>auto</code> (Imagick → GD) ou <code>vips</code> (libvips, bien plus rapide et léger à grande échelle). | ||
* '''Mode gros wiki''' : traitement en ligne de commande sans saturer la file de tâches. | * '''Mode gros wiki''' : traitement en ligne de commande sans saturer la file de tâches. | ||
| Ligne 48 : | Ligne 48 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# Vérifier '''[[Spécial:VaultTec_État]]''' (tout au vert), puis lancer le rattrapage depuis '''[[Spécial:VaultTec_Optimisation]]'''. | # Vérifier '''[[Spécial:VaultTec_État]]''' (tout au vert), puis lancer le rattrapage depuis '''[[Spécial:VaultTec_Optimisation]]'''. | ||
# | # '''Terminé''' — Naviguer sur le wiki pour vérifier que tout fonctionne. | ||
== Dépendances externes (optionnelles) == | == Dépendances externes (optionnelles) == | ||
| Ligne 56 : | Ligne 56 : | ||
! Binaire !! Apporte !! Installation | ! Binaire !! Apporte !! Installation | ||
|- | |- | ||
| <code>gifsicle</code> || Optimisation GIF sans perte ( | | <code>gifsicle</code> || Optimisation GIF sans perte (1ère passe) || <code>apt install gifsicle</code> | ||
|- | |- | ||
| <code>vips</code> (libvips) || Moteur d'image rapide/léger || <code>apt install libvips-tools</code> | | <code>vips</code> (libvips) || Moteur d'image rapide/léger || <code>apt install libvips-tools</code> | ||
|- | |- | ||
| <code>zopflipng</code> || | | <code>zopflipng</code> || 2ème passe PNG (compression maximale) || paquet <code>zopfli</code> ou binaire dédié | ||
|- | |- | ||
| <code>oxipng</code> || | | <code>oxipng</code> || 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 <code>www-data</code>) pour éviter les problèmes de permissions sur les fichiers générés.} | |||
== Configuration == | == Configuration == | ||
| Ligne 93 : | Ligne 93 : | ||
| <code>$wgVaultTecMediaOptimizerGifsicleLevel</code> || <code>3</code> || Niveau gifsicle (1–3 ; 3 = le plus agressif, sans perte). | | <code>$wgVaultTecMediaOptimizerGifsicleLevel</code> || <code>3</code> || Niveau gifsicle (1–3 ; 3 = le plus agressif, sans perte). | ||
|- | |- | ||
| <code>$wgVaultTecMediaOptimizerZopfliEnabled</code> || <code>false</code> || Active la | | <code>$wgVaultTecMediaOptimizerZopfliEnabled</code> || <code>false</code> || Active la 2ème passe PNG. | ||
|- | |- | ||
| <code>$wgVaultTecMediaOptimizerPngEngine</code> || <code>zopflipng</code> || Moteur | | <code>$wgVaultTecMediaOptimizerPngEngine</code> || <code>zopflipng</code> || Moteur 2ème passe : <code>zopflipng</code> ou <code>oxipng</code>. | ||
|- | |- | ||
| <code>$wgVaultTecMediaOptimizerZopfliIterations</code> || <code>15</code> || Itérations zopflipng (plus = plus petit, plus lent). | | <code>$wgVaultTecMediaOptimizerZopfliIterations</code> || <code>15</code> || Itérations zopflipng (plus = plus petit, plus lent). | ||
| Ligne 144 : | Ligne 144 : | ||
! Script !! Rôle | ! Script !! Rôle | ||
|- | |- | ||
| <code>optimizeImages.php</code> || Rattrapage en ligne de commande ( | | <code>optimizeImages.php</code> || Rattrapage en ligne de commande (1ère passe + WebP), sans la file. Option <code>--format=gif</code>, <code>--dry-run</code>, <code>--force</code>… | ||
|- | |- | ||
| <code>purgeQueue.php</code> || Vide les files de tâches de l'extension. | | <code>purgeQueue.php</code> || Vide les files de tâches de l'extension. | ||
|- | |- | ||
| <code>recompressOriginals.php</code> || Recompression PNG ( | | <code>recompressOriginals.php</code> || Recompression PNG (2ème passe) des originaux existants. | ||
|- | |- | ||
| <code>repairBloatedOriginals.php</code> || Répare des originaux qui auraient grossi. | | <code>repairBloatedOriginals.php</code> || Répare des originaux qui auraient grossi. | ||
Dernière version du 6 juin 2026 à 12:46
| État |
stable |
|---|---|
| Type |
média, page spéciale |
| Hooks utilisés |
|
| 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>(avecsrcsetRetina), 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 :
zopflipngouoxipng, déportée dans un job d'arrière-plan (aucune latence pour le visiteur). - Moteur d'image sélectionnable :
auto(Imagick → GD) ouvips(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
[modifier | modifier le wikicode]- Télécharger et placer le dossier
VaultTecMediaOptimizerdans le répertoireextensions/. - Ajouter le code suivant au bas de
LocalSettings.php:
wfLoadExtension( 'VaultTecMediaOptimizer' );- Exécuter le script de mise à jour pour créer les tables :
php maintenance/run.php update --quick- Vérifier Spécial:VaultTec_État (tout au vert), puis lancer le rattrapage depuis Spécial:VaultTec_Optimisation.
- 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.}
Configuration
[modifier | modifier le wikicode]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=gifFonctionnement
[modifier | modifier le wikicode]- À 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).
- 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. - 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.
Voir aussi
[modifier | modifier le wikicode]- Dépôt GitHub (code, manuel PDF bilingue, benchmarks honnêtes, journal des modifications).