Title: Fruti Media Integrity Audit
Author: frutilabs
Published: <strong>September 28, 2026</strong>
Last modified: September 28, 2026

---

Search plugins

![](https://ps.w.org/fruti-media-integrity-audit/assets/banner-772x250.png?rev=3717601)

![](https://ps.w.org/fruti-media-integrity-audit/assets/icon-256x256.png?rev=3717601)

# Fruti Media Integrity Audit

 By [frutilabs](https://profiles.wordpress.org/frutilabs/)

[Download](https://downloads.wordpress.org/plugin/fruti-media-integrity-audit.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/fruti-media-integrity-audit/#description)
 * [Reviews](https://wordpress.org/plugins/fruti-media-integrity-audit/#reviews)
 *  [Installation](https://wordpress.org/plugins/fruti-media-integrity-audit/#installation)
 * [Development](https://wordpress.org/plugins/fruti-media-integrity-audit/#developers)

 [Support](https://wordpress.org/support/plugin/fruti-media-integrity-audit/)

## Description

Fruti Media Integrity Audit compares your Media Library with the files that actually
exist in your uploads
 directory and shows two things:

 * **Missing files** – attachments, including the image sizes recorded in their 
   metadata, that
    WordPress expects to exist but that are absent from the local
   filesystem.
 * **Orphan candidates** – files present in the uploads tree that no attachment 
   metadata claims.

It is a diagnostic. It never deletes, moves, renames, imports, regenerates or repairs
anything, it
 does not modify attachment metadata, and it writes nothing to your
database.

The plugin is deliberately conservative. A file is only reported as an orphan candidate
when its own
 directory is already referenced by an attachment from the current 
scan window. Everything else is listed as _unknown / not classified_ instead of 
being called orphaned, because a wrong “orphan” label is worse than no label.

Useful after a migration, a backup restore, a host move or an offload/CDN change,
and as a sanity
 check before running any cleanup tool.

## Screenshots

[⌊The audit result for one scanned window: totals for missing files, orphan candidates,
unknown files and derived variants.⌉⌊The audit result for one scanned window: totals
for missing files, orphan candidates, unknown files and derived variants.⌉[

The audit result for one scanned window: totals for missing files, orphan candidates,
unknown files and derived variants.

[⌊The two conservative groups in detail: files WordPress expects but cannot find
on disk, and files no attachment claims, with unknown files kept separate.⌉⌊The 
two conservative groups in detail: files WordPress expects but cannot find on disk,
and files no attachment claims, with unknown files kept separate.⌉[

The two conservative groups in detail: files WordPress expects but cannot find on
disk, and files no attachment claims, with unknown files kept separate.

## Installation

 1. Upload the plugin folder to `/wp-content/plugins/`, or install the ZIP through 
    Plugins -> Add New -> Upload Plugin.
 2. Activate the plugin.
 3. Go to Tools -> Fruti Media Integrity Audit and press “Run audit”.

#### How to use it

 1. Open Tools -> Fruti Media Integrity Audit.
 2. Press **Run audit**. The plugin checks the attachment window and scans the uploads
    window you configure on the same screen.
 3. Read the two result groups. Missing files are checked exactly: WordPress metadata
    says the file should exist and it does not.
 4. If the notice says the file scan hit its per-run limit, the window is partial –
    raise the file offset and run again to inspect the rest.
 5. Press **Download CSV for this window** to export the current results. The CSV is
    generated on the fly and is never stored.

## FAQ

### Does this plugin delete or fix anything?

No. It is strictly read-only: no deletion, no import, no thumbnail regeneration,
no metadata change,
 no automatic repair. Fixing is a decision you make with another
tool, after reading this report.

### Can it see files outside my uploads directory?

No. It only inspects the uploads tree that WordPress itself reports, it never accepts
a path from the
 browser, and symlinks are not traversed.

### Why are some files listed as “unknown” instead of orphaned?

Because the plugin refuses to guess. If a file’s directory is not referenced by 
any attachment in the
 current window, the plugin cannot tell whether the file is
unused or simply belongs to a part of the library outside this window, so it reports
it as unknown.

### What happens on very large media libraries?

Each run is bounded: a limited number of attachments and files are processed per
run, nothing is
 loaded into memory in full, and the screen tells you when the window
was partial so you can continue manually. There is no background job and no cron.

### Privacy

Everything runs locally inside your own admin request. Filenames, paths and results
are never
 uploaded, never sent to any external service, never logged and never 
stored in the database. The plugin makes no network requests and collects no telemetry.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Fruti Media Integrity Audit” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ frutilabs ](https://profiles.wordpress.org/frutilabs/)

[Translate “Fruti Media Integrity Audit” into your language.](https://translate.wordpress.org/projects/wp-plugins/fruti-media-integrity-audit)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/fruti-media-integrity-audit/),
check out the [SVN repository](https://plugins.svn.wordpress.org/fruti-media-integrity-audit/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/fruti-media-integrity-audit/)
by [RSS](https://plugins.trac.wordpress.org/log/fruti-media-integrity-audit/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * First release: a read-only Media Library to local uploads integrity audit with
   missing-file and
    conservative orphan-candidate reporting, bounded manual scanning,
   and CSV export for the current window.

## Meta

 *  Version **1.0.0**
 *  Last updated **21 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [diagnostics](https://wordpress.org/plugins/tags/diagnostics/)[files](https://wordpress.org/plugins/tags/files/)
   [media](https://wordpress.org/plugins/tags/media/)[tools](https://wordpress.org/plugins/tags/tools/)
   [uploads](https://wordpress.org/plugins/tags/uploads/)
 *  [Advanced View](https://wordpress.org/plugins/fruti-media-integrity-audit/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/fruti-media-integrity-audit/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/fruti-media-integrity-audit/reviews/)

## Contributors

 *   [ frutilabs ](https://profiles.wordpress.org/frutilabs/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/fruti-media-integrity-audit/)