{"id":338794,"date":"2026-07-26T19:20:18","date_gmt":"2026-07-26T19:20:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/devdome-safe-media-cleaner\/"},"modified":"2026-08-02T09:02:38","modified_gmt":"2026-08-02T09:02:38","slug":"devdome-safe-media-cleaner","status":"publish","type":"plugin","link":"https:\/\/syr.wordpress.org\/plugins\/devdome-safe-media-cleaner\/","author":23522764,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"1.0.4","tested":"7.0.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"DevDome Safe Media Cleaner","header_author":"DevDome","header_description":"Safely find and remove unused WordPress images with visual review, confidence scoring, Recycle Bin and one-click restore. Part of the DevDome suite.","assets_banners_color":"9da4af","last_updated":"2026-08-02 09:02:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/devdome.com\/","header_author_uri":"https:\/\/devdome.com","rating":0,"author_block_rating":0,"active_installs":20,"downloads":138,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"devdome","date":"2026-07-31 20:29:30"},"1.0.4":{"tag":"1.0.4","author":"devdome","date":"2026-08-02 09:02:38"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3630513,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3630513,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3630471,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3630471,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.0.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3623744,"resolution":"1","location":"assets","locale":"","width":1024,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3623744,"resolution":"2","location":"assets","locale":"","width":1024,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3623744,"resolution":"3","location":"assets","locale":"","width":1024,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3623744,"resolution":"4","location":"assets","locale":"","width":1024,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3623744,"resolution":"5","location":"assets","locale":"","width":1024,"height":800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3623744,"resolution":"6","location":"assets","locale":"","width":1024,"height":800}},"screenshots":{"1":"Dashboard: view Media Library and Disk Storage cleanup opportunities, storage totals, and scan actions.","2":"Media Library review: inspect unused images with status labels, reasons, filters, and bulk selection.","3":"Disk Storage review: find orphaned files in the uploads folder that have no Media Library record.","4":"Recycle Bin: review cleanup batches and restore cleaned files with one click.","5":"Backup and Restore: create, upload, download, and restore ZIP media backups.","6":"Settings: configure scheduled scans, retention, protection rules, and optional DevDome Monitoring."}},"plugin_section":[],"plugin_tags":[238093,227565,274088,146945,219749],"plugin_category":[],"plugin_contributors":[273385],"plugin_business_model":[],"class_list":["post-338794","plugin","type-plugin","status-publish","hentry","plugin_tags-duplicate-images","plugin_tags-media-cleaner","plugin_tags-orphaned-images","plugin_tags-unused-images","plugin_tags-unused-media","plugin_contributors-devdome","plugin_committers-devdome"],"banners":{"banner":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/banner-772x250.png?rev=3630471","banner_2x":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/banner-1544x500.png?rev=3630471","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/icon-128x128.png?rev=3630513","icon_2x":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/icon-256x256.png?rev=3630513","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/screenshot-1.png?rev=3623744","caption":"Dashboard: view Media Library and Disk Storage cleanup opportunities, storage totals, and scan actions."},{"src":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/screenshot-2.png?rev=3623744","caption":"Media Library review: inspect unused images with status labels, reasons, filters, and bulk selection."},{"src":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/screenshot-3.png?rev=3623744","caption":"Disk Storage review: find orphaned files in the uploads folder that have no Media Library record."},{"src":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/screenshot-4.png?rev=3623744","caption":"Recycle Bin: review cleanup batches and restore cleaned files with one click."},{"src":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/screenshot-5.png?rev=3623744","caption":"Backup and Restore: create, upload, download, and restore ZIP media backups."},{"src":"https:\/\/ps.w.org\/devdome-safe-media-cleaner\/assets\/screenshot-6.png?rev=3623744","caption":"Settings: configure scheduled scans, retention, protection rules, and optional DevDome Monitoring."}],"raw_content":"<!--section=description-->\n<p>DevDome Safe Media Cleaner helps you find and safely remove unused images, orphaned files, duplicate media, and missing files from your WordPress media library and uploads folder.<\/p>\n\n<p>Selected files move to a protected Recycle Bin first. Review the results, restore cleaned files with one click, and permanently delete them only when you are ready.<\/p>\n\n<p><strong>Clean your WordPress media library<\/strong><\/p>\n\n<ul>\n<li>Find unused images that are not referenced by posts, pages, builders, widgets, or settings.<\/li>\n<li>Detect orphaned files stored in the uploads folder without a Media Library record.<\/li>\n<li>Find exact duplicate images and choose which copy to keep.<\/li>\n<li>Flag Media Library entries whose original file is missing from disk.<\/li>\n<li>Sort by file size to reclaim disk space and reduce backup size.<\/li>\n<\/ul>\n\n<p><strong>Safer media cleanup<\/strong><\/p>\n\n<ul>\n<li><strong>Recycle Bin first.<\/strong> Selected files are moved, not permanently deleted.<\/li>\n<li><strong>Last-second re-check.<\/strong> Each file is checked again immediately before it moves.<\/li>\n<li><strong>Protected by default.<\/strong> Recent uploads and uncertain files are not selected automatically.<\/li>\n<li><strong>Clear review labels.<\/strong> Results are marked Safe to remove, Needs manual review, or Protected, with the reason shown.<\/li>\n<li><strong>Optional ZIP backups.<\/strong> Create, download, upload, and restore media backups before cleaning.<\/li>\n<\/ul>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li><strong>Scan:<\/strong> Scan the Media Library and uploads folder in background batches.<\/li>\n<li><strong>Review:<\/strong> Search, filter, sort, and inspect every flagged file before selecting it.<\/li>\n<li><strong>Clean:<\/strong> Move selected files to the protected Recycle Bin.<\/li>\n<li><strong>Restore or delete:<\/strong> Restore cleaned files with one click, or permanently delete them after checking your site.<\/li>\n<\/ol>\n\n<p><strong>Detailed review tools<\/strong><\/p>\n\n<p>Review results in a visual grid or list. Search by filename, filter by status, sort by file size, dimensions, or age, and select files individually or in bulk. Each result shows its thumbnail, size, dimensions, upload date, status, and the reason it was flagged. Results can also be exported to CSV.<\/p>\n\n<p><strong>Checks common WordPress image references<\/strong><\/p>\n\n<p>The scanner checks post content, custom post types, revisions, reusable blocks, featured images, galleries, Gutenberg blocks, <code>srcset<\/code>, lazy-loading attributes, CSS backgrounds, widgets, menus, the site logo, the site icon, and WordPress options.<\/p>\n\n<p>It also checks data used by:<\/p>\n\n<ul>\n<li><strong>Page builders:<\/strong> Elementor, Divi, Beaver Builder, WPBakery, Bricks, Oxygen, Kadence, GenerateBlocks, Spectra, SeedProd, and Thrive.<\/li>\n<li><strong>WooCommerce:<\/strong> product images, galleries, variations, and category images.<\/li>\n<li><strong>Custom fields and SEO plugins:<\/strong> ACF, Meta Box, Yoast SEO, Rank Math, and AIOSEO.<\/li>\n<li><strong>Generated files:<\/strong> thumbnail sizes, scaled images, and edited copies matched to their original attachment.<\/li>\n<\/ul>\n\n<p><strong>Built for larger media libraries<\/strong><\/p>\n\n<p>Scans run in small, resumable background batches to reduce memory use and timeout risk. You can pause and resume a scan without restarting it.<\/p>\n\n<p><strong>Free features<\/strong><\/p>\n\n<p>Scanning, review, duplicate detection, reports, the Recycle Bin, restore, media backups, scheduled scans, CSV export, and WP-CLI commands are free and unlimited.<\/p>\n\n<p>No DevDome account is required for scanning or cleanup.<\/p>\n\n<p><strong>Optional DevDome Monitoring<\/strong><\/p>\n\n<p>You can optionally connect a free DevDome account and enable Monitoring. After each scan, aggregate media statistics are sent to DevDome so you can view media growth across connected sites and receive email alerts when unused media exceeds a threshold you choose.<\/p>\n\n<p>No media files, filenames, image URLs, or visitor data are sent.<\/p>\n\n<h3>External services<\/h3>\n\n<p>All scanning, classification, Recycle Bin, backup, and restore features run on your own server. The plugin connects to DevDome only after explicit opt-in.<\/p>\n\n<ol>\n<li><strong>DevDome account connection (<code>devdome.com<\/code> and <code>api.devdome.com<\/code>) \u2014 optional.<\/strong><\/li>\n<\/ol>\n\n<p>Connecting an account is required only for optional DevDome Monitoring. When you start the connection, <code>devdome.com<\/code> opens in your browser. After approval, the plugin stores your public DevDome Account ID and a site token, then sends the site token to <code>api.devdome.com<\/code> to verify the connection. The service returns the account email displayed in the plugin settings.<\/p>\n\n<p>The Account ID, site domain, and site token are transmitted. If you disconnect, the site domain and site token are sent once to unlink the site.<\/p>\n\n<p>No media files, filenames, private image URLs, or visitor data are sent.<\/p>\n\n<p>Service provider: DevDome<br \/>\nTerms: https:\/\/devdome.com\/terms-of-service<br \/>\nPrivacy policy: https:\/\/devdome.com\/privacy-policy<\/p>\n\n<ol>\n<li><strong>DevDome Monitoring (<code>api.devdome.com<\/code>) \u2014 optional and opt-in.<\/strong><\/li>\n<\/ol>\n\n<p>When Monitoring is enabled, the plugin sends aggregate scan statistics after each scan: site domain, site token, total media count and size, unused media count and size, orphaned file count, alert threshold, and selected email frequency.<\/p>\n\n<p>DevDome stores this history, displays it in the media-health dashboard, tracks changes across scans and connected sites, and sends alert emails when the chosen threshold is exceeded.<\/p>\n\n<p>No media files, filenames, image URLs, or visitor data are sent.<\/p>\n\n<p>Service provider: DevDome<br \/>\nTerms: https:\/\/devdome.com\/terms-of-service<br \/>\nPrivacy policy: https:\/\/devdome.com\/privacy-policy<\/p>\n\n<p><strong>Dormant endpoints in the bundled DevDome core<\/strong><\/p>\n\n<p>The bundled shared library references these endpoints, but they are disabled and are not contacted by the WordPress.org build:<\/p>\n\n<ul>\n<li><code>https:\/\/api.devdome.com\/plugin-updates\/<\/code> \u2014 used by the self-hosted DevDome suite installer. Updates and installs for this build come only from WordPress.org.<\/li>\n<li><code>https:\/\/api.devdome.com\/media-cleaner\/metrics<\/code> \u2014 used by the DevDome-distributed build for aggregate product metrics. It does not run in the WordPress.org build.<\/li>\n<\/ul>\n\n<p>No outbound request is made unless you explicitly connect a DevDome account. Monitoring statistics are sent only after you also enable DevDome Monitoring.<\/p>\n\n<h3>Privacy<\/h3>\n\n<ul>\n<li><strong>Media files stay local.<\/strong> Scanning, classification, cleanup, backup, and restore run on your server.<\/li>\n<li><strong>Recycle Bin files stay local.<\/strong> They are stored in <code>\/wp-content\/uploads\/devdome-safe-trash\/<\/code>, which is protected against public access during the review period.<\/li>\n<li><strong>No cookies<\/strong> are set by the plugin.<\/li>\n<li><strong>No product metrics<\/strong> are sent by the WordPress.org build.<\/li>\n<li><strong>Optional Monitoring<\/strong> sends only the aggregate statistics listed in the External services section after explicit opt-in.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin from the WordPress Plugins screen.<\/li>\n<li>Open <strong>DevDome &gt; Safe Media Cleaner<\/strong> and select <strong>Scan Media Library<\/strong>.<\/li>\n<li>Review the results and move selected files to the <strong>Recycle Bin<\/strong>.<\/li>\n<li>Check your site, then restore anything you need or confirm permanent deletion.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20a%20media%20cleaner%20identify%20every%20image%20reference%3F\"><h3>Can a media cleaner identify every image reference?<\/h3><\/dt>\n<dd><p>No scanner can guarantee detection of every custom or hard-coded reference. DevDome Safe Media Cleaner checks many common WordPress locations, page builders, WooCommerce data, custom fields, SEO settings, CSS, and responsive image references. It also re-checks each selected file immediately before moving it.<\/p>\n\n<p>Uncertain files are marked Needs manual review and are not selected automatically. Selected files move to the Recycle Bin first so they can be restored.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20cleanup%3F\"><h3>Can I undo a cleanup?<\/h3><\/dt>\n<dd><p>Yes. The first cleanup action moves selected files to the Recycle Bin instead of permanently deleting them. Cleaned files can be restored to their original locations with one click.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20unused%20images%20and%20orphaned%20files%3F\"><h3>What is the difference between unused images and orphaned files?<\/h3><\/dt>\n<dd><p>Unused images have a Media Library record but no detected reference on the site. Orphaned files exist in the uploads folder without a matching Media Library record.<\/p><\/dd>\n<dt id=\"does%20it%20find%20duplicate%20images%3F\"><h3>Does it find duplicate images?<\/h3><\/dt>\n<dd><p>Yes. The plugin detects exact duplicate files and suggests a copy to keep. Duplicates are never deleted automatically.<\/p><\/dd>\n<dt id=\"how%20can%20i%20free%20up%20disk%20space%3F\"><h3>How can I free up disk space?<\/h3><\/dt>\n<dd><p>Run a scan, open Review, and sort by file size. Review the largest unused images and orphaned files first. The dashboard shows the amount of storage represented by the flagged files.<\/p><\/dd>\n<dt id=\"does%20it%20support%20page%20builders%20and%20woocommerce%3F\"><h3>Does it support page builders and WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. It checks data used by Elementor, Divi, Beaver Builder, WPBakery, Bricks, Oxygen, Kadence, GenerateBlocks, Spectra, SeedProd, Thrive, WooCommerce, ACF, Meta Box, Yoast SEO, Rank Math, and AIOSEO.<\/p><\/dd>\n<dt id=\"will%20scanning%20slow%20down%20my%20site%3F\"><h3>Will scanning slow down my site?<\/h3><\/dt>\n<dd><p>Scanning runs in small background batches to reduce memory use and timeout risk. Large scans can be paused and resumed.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20devdome%20account%3F\"><h3>Do I need a DevDome account?<\/h3><\/dt>\n<dd><p>No. Scanning, review, reports, backups, cleanup, the Recycle Bin, and restore work without an account. A free DevDome account is required only for optional DevDome Monitoring.<\/p><\/dd>\n<dt id=\"does%20it%20support%20wordpress%20multisite%3F\"><h3>Does it support WordPress multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site keeps its own scans, Recycle Bin, backups, and settings.<\/p><\/dd>\n<dt id=\"what%20is%20the%20recycle%20bin%3F\"><h3>What is the Recycle Bin?<\/h3><\/dt>\n<dd><p>It is a protected local folder used to hold cleaned files before permanent deletion. Each cleanup batch includes a manifest and checksums so files can be restored to their original locations.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Unified DevDome suite icons and updated the suite hub with one-click installs for WordPress.org plugins.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Initial WordPress.org release.<\/li>\n<\/ul>","raw_excerpt":"Find unused images, orphaned files, and duplicate media. Clean your WordPress media library safely with Recycle Bin restore.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338794"}],"author":[{"embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/devdome"}],"wp:attachment":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338794"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338794"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338794"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338794"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338794"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}