{"id":343624,"date":"2026-07-25T03:36:47","date_gmt":"2026-07-25T03:36:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fraew-broken-media-inspector\/"},"modified":"2026-07-25T03:36:32","modified_gmt":"2026-07-25T03:36:32","slug":"fraew-broken-media-inspector","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/fraew-broken-media-inspector\/","author":23526852,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"fraew Broken Media Inspector","header_author":"Christopher Andrews","header_description":"Find exactly which images are broken, where they are used, and why.","assets_banners_color":"fcf4ee","last_updated":"2026-07-25 03:36:32","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buymeacoffee.com\/fraew","header_plugin_uri":"https:\/\/thebigcity.co.nz\/fraew-broken-media-inspector\/","header_author_uri":"https:\/\/thebigcity.co.nz","rating":0,"author_block_rating":0,"active_installs":0,"downloads":25,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"fraew","date":"2026-07-25 03:36:32"}},"upgrade_notice":{"1.0.0":"<p>Initial release of Broken Media Inspector.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3622086,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3622086,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3622086,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3622086,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3622086,"resolution":"1","location":"assets","locale":"","width":2515,"height":1466},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3622086,"resolution":"2","location":"assets","locale":"","width":2520,"height":1602},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3622086,"resolution":"3","location":"assets","locale":"","width":2520,"height":1568},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3622086,"resolution":"4","location":"assets","locale":"","width":2520,"height":1566}},"screenshots":{"1":"Every missing file with its likely cause, a suggested fix, and edit links to each post that uses it","2":"Orphaned Files tab \u2014 unregistered files in wp-content\/uploads with Add to Library \/ Archive actions","3":"Archive tab \u2014 review archived files, then Restore or permanently delete to reclaim space","4":"Scanning the Media Library, with live progress you can cancel at any time"}},"plugin_section":[],"plugin_tags":[14073,3786,163,84,267125],"plugin_category":[50],"plugin_contributors":[270694],"plugin_business_model":[],"class_list":["post-343624","plugin","type-plugin","status-publish","hentry","plugin_tags-broken","plugin_tags-cleanup","plugin_tags-images","plugin_tags-media","plugin_tags-orphaned","plugin_category-media","plugin_contributors-fraew","plugin_committers-fraew"],"banners":{"banner":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/banner-772x250.png?rev=3622086","banner_2x":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/banner-1544x500.png?rev=3622086","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/icon-128x128.png?rev=3622086","icon_2x":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/icon-256x256.png?rev=3622086","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/screenshot-1.png?rev=3622086","caption":"Every missing file with its likely cause, a suggested fix, and edit links to each post that uses it"},{"src":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/screenshot-2.png?rev=3622086","caption":"Orphaned Files tab \u2014 unregistered files in wp-content\/uploads with Add to Library \/ Archive actions"},{"src":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/screenshot-3.png?rev=3622086","caption":"Archive tab \u2014 review archived files, then Restore or permanently delete to reclaim space"},{"src":"https:\/\/ps.w.org\/fraew-broken-media-inspector\/assets\/screenshot-4.png?rev=3622086","caption":"Scanning the Media Library, with live progress you can cancel at any time"}],"raw_content":"<!--section=description-->\n<p>Broken Media Inspector is a fast, free media-maintenance tool for WordPress. It does two jobs exceptionally well \u2014 and unlike many alternatives, there is no paid tier, no row limit, and no external service.<\/p>\n\n<h4>\ud83e\ude7a Broken Media<\/h4>\n\n<p>After a migration, backup restore, or hosting change, images go missing. Broken Media Inspector scans every item in your Media Library and tells you:<\/p>\n\n<ul>\n<li>Which images are broken (file missing from disk, or incomplete metadata)<\/li>\n<li>Exactly which posts, pages, galleries and featured images use them \u2014 with direct edit links<\/li>\n<li>The likely cause and how to fix it<\/li>\n<\/ul>\n\n<p>Missing files are <strong>grouped by folder<\/strong>, so a whole missing directory shows up as a single line instead of hundreds \u2014 the fastest way to spot a migration that dropped a folder. Results export to CSV.<\/p>\n\n<p>The scan runs in two phases: a fast pass that checks every file on disk, then a background pass that works out usage only for the broken items. Thousands of images scan in seconds.<\/p>\n\n<h4>\ud83e\uddf9 Orphaned Files<\/h4>\n\n<p>Over time your <code>wp-content\/uploads<\/code> folder collects files that are no longer in the Media Library \u2014 leftovers from deleted posts, failed imports, and manual uploads. Broken Media Inspector finds them, shows you how much space they take, and lets you either:<\/p>\n\n<ul>\n<li><strong>Add to Library<\/strong> \u2014 register the file so WordPress manages it again, or<\/li>\n<li><strong>Archive<\/strong> \u2014 move it (with its folder structure preserved) to <code>wp-content\/uploads\/fbmi-archive<\/code><\/li>\n<\/ul>\n\n<p>Archiving is a safe, reversible cleanup. Nothing is deleted straight away: you archive the files you think you don't need, check your site still looks right, and only then empty the archive. Changed your mind about a file? Restore it back to uploads in one click. This \"archive, verify, then delete\" workflow means you never lose a file you actually needed.<\/p>\n\n<p>Generated thumbnails are recognised and never mistaken for orphans. Every file action is validated to stay inside your uploads folder and is limited to administrators.<\/p>\n\n<h4>Why choose this plugin<\/h4>\n\n<ul>\n<li><strong>Free and unlimited<\/strong> \u2014 no premium upgrade, no capped results<\/li>\n<li><strong>Fast<\/strong> \u2014 two-phase scanning and in-memory usage matching<\/li>\n<li><strong>Safe<\/strong> \u2014 the broken-media scan is read-only; file actions only touch what you select<\/li>\n<li><strong>Self-contained<\/strong> \u2014 no external API calls, works on any host including shared hosting<\/li>\n<li><strong>Zero configuration<\/strong> \u2014 install, activate, scan<\/li>\n<\/ul>\n\n<h3>Features<\/h3>\n\n<ul>\n<li><strong>Broken image detection<\/strong> \u2014 missing files and incomplete metadata<\/li>\n<li><strong>Folder grouping<\/strong> \u2014 whole missing directories summarised in one line<\/li>\n<li><strong>Usage mapping<\/strong> \u2014 featured images, Gutenberg blocks, galleries and direct URLs, with edit links<\/li>\n<li><strong>CSV export<\/strong> \u2014 hand the report to a colleague or keep it on file<\/li>\n<li><strong>Orphaned file scanner<\/strong> \u2014 find unregistered files in wp-content\/uploads<\/li>\n<li><strong>Safe archive workflow<\/strong> \u2014 archive orphans, verify your site, then delete or restore<\/li>\n<li><strong>Import orphans<\/strong> \u2014 add unregistered files back into the Media Library<\/li>\n<li><strong>Thumbnail-aware<\/strong> \u2014 generated sizes are never flagged as orphans<\/li>\n<li><strong>Two-phase scanning<\/strong> \u2014 fast results even on large libraries<\/li>\n<li><strong>No configuration, no external services, no paid tier<\/strong><\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<p>The plugin lives at Tools &gt; Broken Media Inspector and has three tabs.<\/p>\n\n<p><strong>Broken Media<\/strong><\/p>\n\n<ol>\n<li>Click \"Scan Media Library\".<\/li>\n<li>A progress bar tracks the scan; results appear grouped by folder.<\/li>\n<li>For each broken image you see the likely cause, a suggested fix, and direct edit links to every post\/page\/gallery that uses it.<\/li>\n<li>Click \"Export CSV\" to save or share the full report.<\/li>\n<\/ol>\n\n<p><strong>Orphaned Files<\/strong><\/p>\n\n<ol>\n<li>Click \"Scan Uploads Folder\" to list files on disk that aren't in the Media Library.<\/li>\n<li>Select the files you want to act on (individually or with \"Select all\").<\/li>\n<li>Choose \"Add to Library\" (register them) or \"Archive selected\" (move them aside \u2014 nothing is deleted yet). A progress bar tracks large batches.<\/li>\n<\/ol>\n\n<p><strong>Archive<\/strong><\/p>\n\n<ol>\n<li>After archiving, check your site still looks and works correctly.<\/li>\n<li>Open the Archive tab: \"Restore\" anything you still needed, or \"Delete selected permanently\" to reclaim the space once you're sure.<\/li>\n<\/ol>\n\n<h3>Support<\/h3>\n\n<p>For support, documentation, and feature requests, visit:\nhttps:\/\/thebigcity.co.nz<\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is released under the GPLv2 or later license. See license.txt for full details.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Broken Media Inspector is developed by Christopher Andrews.\nhttps:\/\/thebigcity.co.nz<\/p>\n\n<p>Built to help WordPress administrators diagnose broken media after migrations, backups and hosting changes \u2014 and safely clean up the stray files left behind. Free and unlimited. If it saves you time, you can support development at https:\/\/buymeacoffee.com\/fraew \u2615<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Navigate to Tools &gt; Broken Media Inspector<\/li>\n<li>Click \"Scan Media Library\"<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20the%20orphaned%20files%20feature%20safe%3F%20any%20risk%3F\"><h3>Is the Orphaned Files feature safe? Any risk?<\/h3><\/dt>\n<dd><p>Use it at your own risk, and always take a backup first. \"Orphaned\" only means a file is not registered in the Media Library \u2014 it does <strong>not<\/strong> guarantee the file is unused. Themes, page builders, sliders, custom code, and other plugins (including WebP and image-optimisation plugins) can reference files directly in ways WordPress cannot detect from its database. Treat the orphan list as a strong hint, not a certainty.<\/p>\n\n<p>That is exactly why the plugin does not delete orphans outright. Instead you <strong>Archive<\/strong> them \u2014 they are moved to <code>wp-content\/uploads\/fbmi-archive<\/code>, so your site behaves as if they were gone, but you can <strong>Restore<\/strong> any file instantly if something breaks. Only empty the archive once you have confirmed everything still works.<\/p><\/dd>\n<dt id=\"can%20the%20plugin%20fix%20broken%20images%20automatically%3F\"><h3>Can the plugin fix broken images automatically?<\/h3><\/dt>\n<dd><p>No. The broken-media scan is diagnostic \u2014 it tells you what's broken, where, and why, but restoring missing files is up to you (usually from a backup). This keeps it simple and safe.<\/p><\/dd>\n<dt id=\"will%20this%20plugin%20modify%20my%20files%20or%20database%3F\"><h3>Will this plugin modify my files or database?<\/h3><\/dt>\n<dd><p>The broken-media scan is strictly read-only. The Orphaned Files tool can change things, but only when you ask it to. Archiving and restoring simply move files between <code>wp-content\/uploads<\/code> and <code>wp-content\/uploads\/fbmi-archive<\/code>; permanent deletion happens only when you empty the archive. Every path is validated to stay inside the uploads folder.<\/p><\/dd>\n<dt id=\"how%20long%20does%20a%20scan%20take%3F\"><h3>How long does a scan take?<\/h3><\/dt>\n<dd><p>The broken-media scan checks every file on disk in a fast first pass, so even large libraries finish quickly \u2014 typically a few seconds for a few thousand images, with usage details filled in afterwards.<\/p><\/dd>\n<dt id=\"can%20i%20run%20this%20on%20a%20production%20site%3F\"><h3>Can I run this on a production site?<\/h3><\/dt>\n<dd><p>Yes. The broken-media scan only reads data. The orphan tools act only on the files you explicitly select.<\/p><\/dd>\n<dt id=\"are%20generated%20thumbnails%20flagged%20as%20orphans%3F\"><h3>Are generated thumbnails flagged as orphans?<\/h3><\/dt>\n<dd><p>No. The orphan scanner builds a list of every file WordPress knows about \u2014 originals, scaled versions, and all generated thumbnail sizes \u2014 so legitimate thumbnails are never mistaken for orphans.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20require%20any%20external%20services%3F\"><h3>Does this plugin require any external services?<\/h3><\/dt>\n<dd><p>No. Everything runs inside WordPress. No API calls, no cloud services, no data sent anywhere. Works on any hosting, including shared hosting.<\/p><\/dd>\n<dt id=\"can%20i%20see%20which%20posts%20use%20a%20broken%20image%3F\"><h3>Can I see which posts use a broken image?<\/h3><\/dt>\n<dd><p>Yes. For each broken image, the report shows which pages\/posts reference it, with direct links to edit them.<\/p><\/dd>\n<dt id=\"i%20have%2010%2C000%2B%20images.%20can%20this%20handle%20it%3F\"><h3>I have 10,000+ images. Can this handle it?<\/h3><\/dt>\n<dd><p>Yes. The plugin processes images in batches and tracks progress. Even massive libraries are supported.<\/p><\/dd>\n<dt id=\"what%20if%20all%20images%20check%20out%20as%20healthy%3F\"><h3>What if all images check out as healthy?<\/h3><\/dt>\n<dd><p>Congratulations! No action needed. The report shows detailed counts and can be exported as proof for your team or clients.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20image%20optimization%20or%20webp%20plugins%3F\"><h3>Does this work with image optimization or WebP plugins?<\/h3><\/dt>\n<dd><p>The broken-media scan works alongside any optimisation, lazy-load or CDN plugin \u2014 it checks whether the real file exists on disk. Note that WebP\/optimiser plugins often create extra files (such as photo.jpg.webp) that aren't in the Media Library, so those will appear in the Orphaned Files list. They're usually in active use, so review before archiving.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20multisite%3F\"><h3>Does this work with multisite?<\/h3><\/dt>\n<dd><p>Version 1.0 supports single-site installations. Multisite is a candidate for a future release.<\/p><\/dd>\n<dt id=\"can%20i%20schedule%20automatic%20scans%3F\"><h3>Can I schedule automatic scans?<\/h3><\/dt>\n<dd><p>Not in Version 1.0. Scheduled scanning is a candidate for a future release based on user feedback.<\/p><\/dd>\n<dt id=\"how%20do%20i%20interpret%20the%20%22likely%20cause%22%20suggestions%3F\"><h3>How do I interpret the \"likely cause\" suggestions?<\/h3><\/dt>\n<dd><p>The \"likely cause\" is a best guess based on the type of failure:<\/p>\n\n<ul>\n<li><strong>Missing<\/strong> \u2014 the file isn't on disk. Usually the uploads folder (or a sub-folder) wasn't copied during a migration or restore, or the file was deleted manually.<\/li>\n<li><strong>Metadata issue<\/strong> \u2014 the file exists but WordPress has no size\/metadata for it, typically from an incomplete upload or import.<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Broken media scan: missing files and incomplete metadata, grouped by folder<\/li>\n<li>Usage mapping with edit links (featured images, Gutenberg blocks, galleries, direct URLs)<\/li>\n<li>Two-phase scanning for fast results on large libraries<\/li>\n<li>CSV export of the full report<\/li>\n<li>Orphaned Files scanner for wp-content\/uploads<\/li>\n<li>Import orphaned files into the Media Library<\/li>\n<li>Safe archive workflow: archive orphans, then restore or permanently delete from the Archive tab<\/li>\n<li>Thumbnail-aware orphan detection<\/li>\n<li>WordPress 5.0+ and PHP 7.4+ support<\/li>\n<\/ul>","raw_excerpt":"Find broken images and where they&#039;re used, and clean up orphaned files in your uploads folder. Fast, free, no upsells.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/343624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=343624"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fraew"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=343624"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=343624"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=343624"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=343624"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=343624"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=343624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}