Automatically convert and resize images to modern formats (WebP, AVIF, PNG, JPEG, TIFF) with real-time file watching and flexible resize options.
https://github.com/StoneZol/auto-image-converter
🔄 Convert images to WebP, AVIF, PNG, JPEG, or TIFF
📐 Resize images by width, height, or to specific aspect ratios
🔍 Recursive folder support - process entire directory trees
🗑️ Optional removal of original files after conversion
👀 Watch mode – automatically converts newly added images in real-time
⚡ Parallel processing with configurable concurrency
🎯 One-time resize – resize already converted images without re-conversion
⚙️ Easy configuration via image-converter.config.mjs
npm install auto-image-converter --save-devOr use locally via npm link:
cd auto-image-converter
npm link
cd ../your-project
npm link auto-image-converterCreate a image-converter.config.mjs file in the root of your project:
export default {
// Main settings
dir: "./public", // Directory to scan for images
removeOriginal: true, // Delete original files after conversion
recursive: true, // Recursive search in subdirectories
ignoreOnStart: true, // Ignore existing files on watcher startup
concurrency: 4, // Number of parallel workers
// Conversion settings
convertation: {
converted: "*.{png,jpg,jpeg,tiff}", // Source file pattern
format: "webp", // Target format: webp, avif, png, jpg, tiff
quality: 80, // Quality (0-100)
outputDir: null, // null = same folder, or path for output
},
// Resize settings (optional)
needResize: true, // Enable resize
resize: {
width: 1920, // Width (or null)
height: null, // Height (or null)
fit: "cover", // cover, contain, fill, inside, outside
position: "center", // Cropping position
withoutEnlargement: true, // Don't enlarge small images
},
};- By width only:
width: 1920, height: null- reduces to width, height scales proportionally - By height only:
width: null, height: 1080- reduces to height, width scales proportionally - To aspect ratio:
width: 1920, height: 1080- fits/crops to specific aspect ratio
cover- fills entire size, cropping excess (default)contain- fits fully, may add paddingfill- stretches without preserving aspect ratioinside- reduces to fit, doesn't enlargeoutside- covers entire size, may enlarge
# One-time conversion of all files
npx auto-convert-images
# Watch mode - processes new files as they're added
npx auto-convert-images-watch
# One-time resize of already converted files
npx auto-convert-images-resizeAdd to your package.json:
{
"scripts": {
"convert": "auto-convert-images",
"watch": "auto-convert-images-watch",
"resize": "auto-convert-images-resize"
}
}Then run:
npm run convert- one-time conversionnpm run watch- watch modenpm run resize- resize already converted files
To run the watcher alongside the development server:
npm install concurrently --save-dev{
"scripts": {
"dev": "concurrently \"npm run watch\" \"next dev\""
}
}Convert all PNG/JPG files to WebP:
npx auto-convert-imagesAutomatically convert new images as they're added:
npx auto-convert-images-watchIf you converted files without resize, then decided you need resize:
npx auto-convert-images-resize- If
removeOriginal: false→ creates new files with size suffix:image.webp→image-1920x1080.webp - If
removeOriginal: true→ overwrites original files
The tool uses a modular architecture:
- Pipeline - main processing engine with queue and workers
- ResizeImages - resize operations wrapper
- ConvertImages - format conversion wrapper
- FileManager - file path resolution and saving
All operations work with Sharp instances in a chainable pipeline pattern.
Found a bug? Please report it in the GitHub Issues section of the repository. Include:
- Description of the issue
- Steps to reproduce
- Expected behavior
- Actual behavior
- Configuration file (if relevant)
- Node.js version and OS
This helps improve the tool for everyone!
This project is open source and available under the MIT License.
You are free to use, modify, and distribute it for personal and commercial purposes with proper attribution.