Skip to content

Repository files navigation

@eltkof7/webimg-cli

CLI TypeScript pour optimiser, convertir et générer des images web prêtes pour la production.

npm CI License: MIT

Fonctionnalites

  • Conversion vers webp, avif, jpeg et png avec Sharp.
  • Scan des images png, jpg, jpeg, tiff, webp et avif.
  • Conversion multi-formats en une commande: --format webp,avif.
  • Redimensionnement simple avec --resize et plafond avec --max-width.
  • Variantes responsive @1x, @2x, @3x avec --responsive.
  • Dossier de sortie configurable avec conservation de l'arborescence depuis --input.
  • Protection contre l'ecrasement du fichier source.
  • Les sorties generees ne sont pas rescanees comme entrees.
  • Metadata EXIF strippees par defaut, avec option --keep-metadata.
  • Cache .webimg-cache.json invalide quand le fichier source ou les options changent.
  • Mode --watch pour relancer la conversion pendant le developpement.
  • Rapport console, JSON ou Markdown.
  • Suppression sûre avec backup optionnel et nettoyage des sorties orphelines.
  • Limite de concurrence configurable.
  • API programmatique utilisable dans un script Node.js.

Prerequis

  • Node.js >=18
  • npm >=9 recommande

Verifier la version locale:

node -v
npm -v

Installation

Installation globale:

npm install -g @eltkof7/webimg-cli
webimg --version

Utilisation sans installation globale:

npx @eltkof7/webimg-cli --version
npx @eltkof7/webimg-cli scan -r

Installation dans un projet:

npm install -D @eltkof7/webimg-cli
npx webimg scan -r

Exemple de scripts npm:

{
  "scripts": {
    "img:scan": "webimg scan -i ./src/assets -r",
    "img:build": "webimg run -i ./src/assets -o ./public/img -f webp,avif -q 80 -r",
    "img:watch": "webimg run -i ./src/assets -o ./public/img -f webp --watch -r"
  }
}

Demarrage rapide

Mode interactif:

webimg

Creer une configuration par defaut:

webimg init

Scanner le dossier courant:

webimg scan
webimg scan -r

Scanner un dossier precis:

webimg scan -i ./src/assets -r

Convertir en WebP dans le meme dossier:

webimg run -f webp -q 80 -r

Convertir vers WebP et AVIF dans un dossier public:

webimg run -i ./src/assets -o ./public/img -f webp,avif -q 80 -r

Generer des variantes responsive:

webimg run -i ./src/assets -o ./public/img -f webp,avif --resize 800 --responsive 1,2,3 -r

Tester sans ecrire de fichiers:

webimg run -i ./src/assets -f avif --dry-run --report report.md -r

Surveiller les changements:

webimg run -i ./src/assets -o ./public/img -f webp --watch -r

Commandes

webimg

Lance le mode interactif. Le CLI pose quelques questions, scanne les images, puis lance la conversion.

webimg

webimg init

Cree webimg.config.json dans le dossier courant.

webimg init

webimg scan

Scanne les images et affiche un resume par extension.

webimg scan -i ./src/assets -r

Options utiles:

webimg scan --include "images/**/*.{png,jpg}" --exclude "**/*.raw.png"

webimg run

Execute la conversion sans question interactive. C'est la commande a utiliser en CI/CD ou dans les scripts npm.

webimg run -i ./src/assets -o ./public/img -f webp,avif -q 80 -r

Options CLI

Option Description Defaut
-i, --input <dir> Dossier a scanner .
-f, --format <types> Formats de sortie separes par virgule: webp,avif,jpeg,png webp
-q, --quality <n> Qualite de sortie entre 1 et 100 80
-r, --recursive Inclut les sous-dossiers false
-o, --output <dir> Dossier de sortie dossier source
-s, --suffix <str> Suffixe ajoute au nom de fichier vide
--resize <w> Largeur cible en pixels pour la sortie 1x aucun
--max-width <px> Largeur maximale, sans agrandir les petites images aucun
--responsive <list> Densites a generer, par exemple 1,2,3 aucune
--keep-metadata Conserve les metadata EXIF/IPTC/XMP false
--replace Supprime le fichier source apres conversion reussie false
--supp-ref Supprime les images sources scannees apres conversion reussie ou sortie deja existante false
--backup Sauvegarde la source avant suppression false
--backup-dir <dir> Dossier de backup (conserve l'arborescence) .webimg-backup
--clean Supprime les sorties generees orphelines false
--concurrency <n> Nombre maximal de conversions simultanees, 0 = automatique 0
--dry-run Simule la conversion sans ecrire de fichiers false
--no-cache Desactive le cache .webimg-cache.json cache actif
--include <patterns> Patterns glob a inclure, separes par virgule auto
--exclude <patterns> Patterns glob a exclure, separes par virgule vide
--report <path> Ecrit un rapport .json ou .md aucun
--watch Surveille les changements et reconvertit false

Exemples pratiques

Supprimer avec sauvegarde

webimg run -i ./src/assets -o ./public/img -f webp --replace --backup --backup-dir ./backups -r

La source n'est supprimee qu'apres conversion complete et copie reussie dans le backup. En cas d'erreur, elle est conservee.

Nettoyer les sorties orphelines

webimg run -i ./src/assets -o ./public/img -f webp --clean -r

--clean ne supprime que les fichiers de formats declares qui correspondent a des sorties generees et ne sont plus planifies.

Optimiser un dossier d'assets

webimg run -i ./src/assets -o ./public/img -f webp,avif -q 78 -r

Si src/assets/products/shoe.png existe, les sorties seront:

public/img/products/shoe.webp
public/img/products/shoe.avif

Ajouter un suffixe

webimg run -i ./images -f webp -s .min -r

Sortie exemple:

images/photo.min.webp

Redimensionner sans agrandir

webimg run -i ./images -o ./public/img -f webp --resize 1200 -r

Les images plus petites que 1200px ne sont pas agrandies.

Generer @1x, @2x, @3x

webimg run -i ./images -o ./public/img -f webp --resize 640 --responsive 1,2,3 -r

Sorties exemple:

public/img/[email protected]  # 640px
public/img/[email protected]  # 1280px
public/img/[email protected]  # 1920px

Limiter la largeur maximale

webimg run -i ./images -o ./public/img -f avif --resize 1600 --max-width 1200 -r

Exporter un rapport

webimg run -i ./images -o ./public/img -f webp,avif --report report.json -r
webimg run -i ./images -o ./public/img -f webp,avif --report report.md -r

Inclure ou exclure certains fichiers

webimg run --include "src/**/*.{png,jpg}" --exclude "**/*.icon.png,**/raw/**" -f webp

Remplacer les originaux

webimg run -i ./images -f webp --replace -r

Utiliser --replace seulement si les sources peuvent etre supprimees. Le CLI refuse d'ecrire une sortie sur le meme chemin que le fichier source; utilisez --output ou --suffix si necessaire.

Configuration

Creer le fichier:

webimg init

Exemple webimg.config.json:

{
  "input": "./src/assets",
  "output": "./public/img",
  "recursive": true,
  "formats": ["webp", "avif"],
  "quality": 80,
  "resize": 1200,
  "maxWidth": null,
  "responsive": [1, 2],
  "suffix": "",
  "keepMetadata": false,
  "keepOriginal": true,
  "include": [],
  "exclude": ["**/node_modules/**", "**/dist/**"],
  "cache": true,
  "dryRun": false
}

Les options passees en ligne de commande surchargent la configuration du fichier.

Fichiers de configuration supportes:

webimg.config.json
.webimgrc.json
.webimgrc

Cache

Le cache est stocke dans .webimg-cache.json.

Une conversion est reutilisee seulement si:

  • le fichier source n'a pas change;
  • les sorties attendues existent;
  • les options de conversion importantes sont identiques: formats, qualite, resize, max-width, responsive, suffixe et metadata.

Desactiver le cache:

webimg run -i ./images -f webp --no-cache -r

Metadata et confidentialite

Par defaut, les metadata EXIF/IPTC/XMP sont retirees.

Conserver les metadata:

webimg run -i ./images -f webp --keep-metadata -r

API programmatique

import { findImages, mergeConfig, runParallel, summarize } from '@eltkof7/webimg-cli';

const cwd = process.cwd();
const cfg = mergeConfig({
  input: './src/assets',
  output: './public/img',
  recursive: true,
  formats: ['webp', 'avif'],
  quality: 80,
  resize: 1200,
});

const files = await findImages(cwd, cfg);
const results = await runParallel(files, cfg, cwd);
const summary = summarize(results);

console.log(summary);

Exports disponibles:

export { convertFile, runParallel } from '@eltkof7/webimg-cli';
export { findImages, SUPPORTED_INPUT } from '@eltkof7/webimg-cli';
export { loadConfig, mergeConfig, DEFAULT_CONFIG } from '@eltkof7/webimg-cli';
export { summarize, printReport, writeJsonReport, writeMarkdownReport, formatBytes } from '@eltkof7/webimg-cli';
export { ConversionCache } from '@eltkof7/webimg-cli';

Developpement local

Cloner le depot:

git clone https://github.com/REBCDR07/webimg-cli.git
cd webimg-cli

Installer les dependances:

npm install

Lancer les controles:

npm run lint
npm run typecheck
npm test
npm run build
npm audit

Tester le binaire local:

npm run build
node dist/index.js --version
node dist/index.js scan -r

Tester globalement avec npm link:

npm link
webimg --version
webimg scan -r

Verifier le contenu du package npm:

npm pack --dry-run

Publication npm

Verifier l'authentification:

npm whoami

Publier une nouvelle version:

npm version patch
git push --follow-tags
npm publish --access public

Pour une premiere publication du package scope public:

npm publish --access public

Le hook prepublishOnly lance automatiquement:

npm run lint
npm run typecheck
npm test
npm run build

CI/CD

Le workflow GitHub Actions execute lint, typecheck, tests et build sur Node 18, 20 et 22.

La publication automatique peut etre faite depuis une release GitHub avec un secret NPM_TOKEN configure dans les settings du depot.

Licence

MIT © eltkof7

About

CLI ultra-rapide pour optimiser, convertir et générer des images responsive pour le web. Powered by Sharp : https://sharp.pixelplumbing.com — divise par 3 ou 4 le poids de vos images en quelques secondes.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages