The Home for Magento 2 Excellence

Quality-tested Magento 2 modules. Explore. Evaluate. Elevate. #magento2

1090 Modules
626 Ready
464 Need Help
🏆 Leaderboard
Actively Maintained v1.0.0

Image Cleaner for Magento 2

taurus-media/module-image-cleaner

Identifies and removes unused product images using a temporary index table and streamed file iteration for large catalogs, with batch processing, a trash-first policy, dry-run by default, and a daily cron that purges old trashed files.

12
Downloads
Below average
0
GitHub Stars
3mo ago
Last Release
0
Open Issues
Build Issues
2/3 checks passed

Build Tests

Composer Install
DI Compile
Templates

Code Quality

CS Coding Standard
1 error , 23 warnings
PHPStan Failed

Tested on Magento 2.4.9

Recent Test History

Each release is tested against the latest Magento version at that time.

v1.0.0 on Magento 2.4.9
Jun 1, 2026

Looking for Contributors

Dependency injection compilation fails. Your contribution could help the entire Magento community!

Contribute

Share This Module's Status

Image Cleaner for Magento 2 Magento compatibility status badge

README

Loaded from GitHub

Taurus_ImageCleaner

A performance-optimized Magento 2 module to identify and remove unused product images.

Features

  • Safe for Large Catalogs: Uses a temporary database table to index used images, ensuring constant-time lookups.
  • Memory Efficient: Uses PHP Generators and Iterators to stream files without loading them all into memory.
  • Batch Processing: Supports batching and sleep intervals to minimize system load.
  • Trash-first Policy: Unused images are moved to var/image-cleaner-trash/ instead of being deleted immediately.
  • Automatic Cleanup: A daily cron job automatically purges files from the trash that are older than 7 days.
  • Dry-run by Default: Safety first—no images are moved unless the --delete flag is explicitly provided and confirmed.

Installation

Place the module code in app/code/Taurus/ImageCleaner.

bin/magento module:enable Taurus_ImageCleaner
bin/magento setup:upgrade

Usage

Commands

Basic Dry-Run:

bin/magento catalog:image:cleanup

Actually Move Unused Images to Trash:

bin/magento catalog:image:cleanup --delete

Advanced Usage:

bin/magento catalog:image:cleanup --delete --batch-size=1000 --sleep=1 --output-file=unused_images.log

Options

  • --dry-run: (Default) Scans and reports unused images without moving them.
  • --delete: Enables moving unused images to trash (var/image-cleaner-trash/). Requires manual confirmation.
  • --batch-size=<int>: Number of images to process before sleeping/logging (default: 5000).
  • --sleep=<int>: Seconds to sleep between batches (default: 0).
  • --output-file=<path>: Path (relative to var/) to log the list of unused images.

Trash & Recovery

When running with --delete, images are moved to var/image-cleaner-trash/. If you accidentally move images that should have been kept, you can move them back to pub/media/catalog/product/.

A cron job taurus_image_cleaner_trash_purge runs daily at 01:00 and deletes files from the trash that are older than 7 days.

How it Works

  1. Indexing: The module creates a temporary table taurus_image_cleaner_used_images.
  2. Collection: It populates this table with image paths from:
    • catalog_product_entity_media_gallery (Media gallery entries)
    • catalog_product_entity_varchar (Main image, small image, thumbnail, and swatch image attributes)
  3. Scanning: It uses RecursiveDirectoryIterator to scan pub/media/catalog/product/.
  4. Validation: For each file, it performs a fast indexed lookup against the temporary table.
  5. Action: If an image is not found in the index, it's marked as unused and optionally moved to trash.
  6. Cleanup: The temporary database table is dropped after the process completes.
  7. Maintenance: A cron job cleans up the trash folder periodically.

Safety & Warnings

  • Backup Recommended: Always back up your pub/media/catalog/product directory and your database before running with the --delete flag in a production environment.
  • Excluded Directories: The module automatically ignores watermark, tmp, placeholder, and other temporary directories.
  • Cache Scanning: The module now also scans the pub/media/catalog/product/cache directory. Cached images are considered unused if their corresponding original product image is not found in the database.
  • Normalized Paths: Only images following the Magento standard structure pub/media/catalog/product/[a-z0-9]/[a-z0-9]/... are processed.

Requirements

  • Magento 2.4+
  • PHP 8.1+

This content is fetched directly from the module's GitHub repository. We are not the authors of this content and take no responsibility for its accuracy, completeness, or any consequences arising from its use.