{"id":21381188,"url":"https://github.com/mehdiraized/thumbnail-remover","last_synced_at":"2026-04-04T10:36:54.888Z","repository":{"id":251410371,"uuid":"837331725","full_name":"mehdiraized/thumbnail-remover","owner":"mehdiraized","description":"Removes existing thumbnails, disables thumbnail generation, and manages thumbnail sizes","archived":false,"fork":false,"pushed_at":"2026-04-04T08:12:30.000Z","size":1818,"stargazers_count":2,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-04T10:11:02.241Z","etag":null,"topics":["headless-wordpress","management","storage-manager","thumbnails","wordpress-plugin"],"latest_commit_sha":null,"homepage":"https://wordpress.org/plugins/thumbnail-remover/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mehdiraized.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-02T18:08:24.000Z","updated_at":"2026-04-04T08:10:42.000Z","dependencies_parsed_at":"2024-09-07T05:06:18.410Z","dependency_job_id":"00809d07-7b87-4f21-bf8b-d97e38704120","html_url":"https://github.com/mehdiraized/thumbnail-remover","commit_stats":null,"previous_names":["mehdiraized/thumbnail-remover"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/mehdiraized/thumbnail-remover","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehdiraized%2Fthumbnail-remover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehdiraized%2Fthumbnail-remover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehdiraized%2Fthumbnail-remover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehdiraized%2Fthumbnail-remover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mehdiraized","download_url":"https://codeload.github.com/mehdiraized/thumbnail-remover/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehdiraized%2Fthumbnail-remover/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31397055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["headless-wordpress","management","storage-manager","thumbnails","wordpress-plugin"],"created_at":"2024-11-22T10:44:46.310Z","updated_at":"2026-04-04T10:36:54.881Z","avatar_url":"https://github.com/mehdiraized.png","language":"PHP","funding_links":["https://www.buymeacoffee.com/mehdiraized"],"categories":[],"sub_categories":[],"readme":"# Thumbnail Remover and Size Manager\n\n**Contributors:** mehdiraized  \n**Tags:** thumbnails, media management, image optimization, cleanup, regenerate thumbnails  \n**Requires at least:** 5.0  \n**Tested up to:** 6.9  \n**Stable tag:** 2.2.1  \n**Requires PHP:** 7.4  \n**License:** GPLv2 or later  \n**License URI:** https://www.gnu.org/licenses/gpl-2.0.html\n\nSafely analyze, preview, trash, restore, schedule, regenerate, report on, and manage WordPress thumbnails and image sizes.\n\nLanding page: [https://mehdiraized.github.io/thumbnail-remover/](https://mehdiraized.github.io/thumbnail-remover/)\n\nWordPress.org: [https://wordpress.org/plugins/thumbnail-remover/](https://wordpress.org/plugins/thumbnail-remover/)\n\n![Thumbnail Remover Banner](assets/banner-1544x500.png)\n\n![Thumbnail Manager Library Analysis](assets/screenshots/screenshot-1.png)\n\n## Overview\n\nThumbnail Remover and Size Manager 2.2 continues the plugin's safer media maintenance workflow for WordPress sites.\n\nInstead of removing thumbnails with a single irreversible step, the current release adds:\n\n- Dry-run preview before cleanup\n- Trash and Restore workflow\n- Batch processing with progress\n- Unused media detection\n- Orphan thumbnail detection\n- Missing-size regeneration\n- Per-size analytics\n- Reporting and recent activity logs\n- Existing image-size disable controls\n- Zip backups for uploads\n- Scheduled cleanup with configurable frequency and scope\n\n## Main Features\n\n### Dry Run / Preview\n\nPreview cleanup before acting. The plugin shows:\n\n- How many files match your filters\n- How much storage will be recovered\n- Which sizes are involved\n- How many orphan thumbnails were detected\n\n### Trash / Restore\n\nMatching thumbnails are moved into plugin Trash instead of being deleted permanently. You can restore a trash batch later from the same admin screen.\n\n### Batch Processing\n\nLarge scans, cleanup jobs, and regeneration jobs run in batches and report progress in the interface to reduce timeout problems on larger sites.\n\n### Scheduled Cleanup\n\nUse the scheduled cleanup section to let WP-Cron move matching thumbnail files into plugin Trash automatically on a daily, weekly, or monthly cadence. You can scope scheduled runs to specific registered sizes and upload folders, and scheduled deletions remain restorable through the same Trash batches used by manual cleanup.\n\n### Unused Media Detection\n\nThe analysis screen flags attachments that appear unused based on:\n\n- Featured image relationships\n- Parent attachment relationships\n- Post/page content references\n- Stored post meta / common builder content references\n\nThese results should be reviewed manually before any broader media cleanup decisions.\n\n### Orphan Thumbnail Detection\n\nThe plugin detects on-disk thumbnail files that are no longer tracked in WordPress attachment metadata.\n\n### Regenerate Missing Sizes\n\nIf you keep or re-enable image sizes, you can regenerate missing derivatives in batch mode without regenerating everything manually.\n\n### Per-Size Analytics\n\nSee per-size analytics including:\n\n- File count\n- Total storage used\n- Missing size count\n- Orphan count\n- Last seen attachment date\n\n### Reporting and Logs\n\nReview recent media operations from the admin screen, including analysis runs, previews, cleanup batches, restores, regenerations, backups, and WP-Cron cleanup activity. The reporting view also summarizes recovered storage, regenerated sizes, restore totals, and backup runs.\n\n## Installation\n\n1. Upload the plugin files to `/wp-content/plugins/thumbnail-remover`, or install it through the WordPress plugins screen.\n2. Activate the plugin.\n3. Open `Tools \u003e Thumbnail Manager`.\n4. Run a full analysis before your first cleanup.\n5. Configure scheduled cleanup if you want recurring maintenance.\n\n## Recommended Workflow\n\n1. Run **Full Analysis**\n2. Review per-size analytics, orphan counts, and probably unused media\n3. Create a backup zip if needed\n4. Use **Preview Cleanup**\n5. Move matching thumbnails to **Trash**\n6. Restore a batch if you need to reverse the cleanup\n7. Regenerate missing sizes after re-enabling any image sizes\n\n## FAQ\n\n### Does the plugin permanently delete thumbnails?\n\nNo. Version 2 moves matching thumbnail files into plugin Trash first, so you can restore a cleanup batch later if needed.\n\n### What does Preview Cleanup show before I remove anything?\n\nPreview Cleanup runs a dry run and shows how many files match your current filters, which sizes are included, how much storage can be recovered, and how many orphan thumbnails were found.\n\n### What are orphan thumbnails?\n\nOrphan thumbnails are resized image files that still exist on disk but are no longer tracked in WordPress attachment metadata. The plugin can detect them during analysis and include them in preview and cleanup results.\n\n### How does unused media detection work?\n\nThe plugin checks whether attachments appear to be used in featured images, parent attachment relationships, post or page content, and stored builder or meta content. These results are meant as \"probably unused\" signals and should still be reviewed manually.\n\n### Can I disable image sizes for future uploads without touching old files?\n\nYes. You can disable selected registered image sizes for future uploads. This only stops new thumbnails from being generated. Existing files remain untouched until you preview and move them to Trash yourself.\n\n### Can I regenerate missing sizes after re-enabling a size?\n\nYes. The regeneration tool can rebuild missing image sizes in batches, which is useful after re-enabling sizes or cleaning up incomplete media libraries.\n\n### Is the plugin safe for larger media libraries?\n\nIt is designed to be safer on larger sites than one-click cleanup tools. Analysis, cleanup, and regeneration run in batches and show progress in the admin UI to reduce timeout issues.\n\n### Can I back up uploads before cleanup?\n\nYes. You can create a zip backup for all uploads or only a selected year/month uploads folder before making cleanup changes.\n\n### Can I restore only one cleanup batch?\n\nYes. Each cleanup run is stored as its own Trash batch, so you can restore a specific batch without undoing every previous cleanup action.\n\n### Does scheduled cleanup delete files permanently?\n\nNo. Scheduled cleanup also moves matching files into plugin Trash first. The main difference is that the job is created by WP-Cron instead of a manual button click.\n\n## Screenshots\n\n### Library Analysis\n\n![Library Analysis](assets/screenshots/screenshot-1.png)\n\n### Preview and Move Thumbnails to Trash\n\n![Preview and Move Thumbnails to Trash](assets/screenshots/screenshot-2.png)\n\n### Trash and Restore\n\n![Trash and Restore](assets/screenshots/screenshot-3.png)\n\n### Regenerate Missing Sizes\n\n![Regenerate Missing Sizes](assets/screenshots/screenshot-4.png)\n\n## Changelog\n\n### 2.2.0\n\n- Added a Reporting and Logs section with recent activity history\n- Added operation summaries for recovered storage, restores, regenerated sizes, and backups\n- Logged manual and scheduled cleanup activity, preview runs, analysis runs, restores, regenerations, and backup events\n\n### 2.1.0\n\n- Added WP-Cron scheduled cleanup with daily, weekly, and monthly frequency options\n- Added scheduled cleanup scope controls for image sizes and upload folders\n- Added scheduled cleanup run status, next-run visibility, and last-result summaries in the admin UI\n- Kept scheduled cleanup on the same Trash-and-Restore workflow as manual cleanup\n\n### 2.0.0\n\n- Added dry-run preview before cleanup\n- Added Trash and Restore workflow\n- Added batch processing with progress for analysis, cleanup, and regeneration\n- Added orphan thumbnail detection\n- Added probably unused media detection\n- Added missing-size regeneration\n- Added per-size analytics dashboard\n- Refreshed the admin UI and plugin descriptions\n\n### 1.1.5\n\n- Fixed a fatal error when disabling thumbnail sizes on PHP 8.x\n- Hardened settings and AJAX input handling for string-based values\n- Updated compatibility metadata for the latest WordPress release\n\n## Release Workflow\n\n- Run `npm install` once so Husky installs the local git hooks.\n- The first push to `main` now prepares a local release commit such as `chore(release): v2.2.1` and stops the push so you can review it.\n- Re-run `git push origin main` after that release commit is created. The second push syncs the exact same version to the local WordPress.org SVN checkout before GitHub push completes.\n- GitHub Actions now only validates the plugin, creates the Git tag and GitHub release for the version already prepared locally, generates release notes from commit messages, and deploys the docs site.\n- To skip the local WordPress.org deploy for one push, use `TRPL_SKIP_WPORG_DEPLOY=1 git push origin main`.\n\n## Screenshot Workflow\n\n- CI screenshot generation is disabled.\n- Refresh the plugin screenshots locally with `npm run screenshots`.\n- If the local WordPress test environment is already prepared, capture only the images with `npm run screenshots:capture`.\n\n## Support\n\nIf the plugin saves you time, you can support future development here:\n\n[Buy Me a Coffee](https://www.buymeacoffee.com/mehdiraized)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehdiraized%2Fthumbnail-remover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmehdiraized%2Fthumbnail-remover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehdiraized%2Fthumbnail-remover/lists"}