BACK TO DIRECTORY

Janitorix Media Audit

by Monowar Hossain (devmonowar)

5.0
(2 ratings)

Most cleanup plugins tell you an image is unused. This one tells you how sure it is, and why.

That difference matters, because the cost of being wrong is not symmetric. Leaving an unused image costs you a few kilobytes. Deleting a used one breaks your site — and you may not find out for weeks.

Version 1.1.0 adds an alt text audit with rule-based and optional AI suggestions — see below.

Read the full guide — why “unattached” is not the same as “unused”, the places a reference hides, and how to check by hand · Plugin page · Development on GitHub — report issues or contribute.

What it actually does

Scanners search every place an image can hide: featured images and post attachments, post content, Gutenberg blocks and synced patterns, full-site-editing templates, the Customizer, theme options, widgets, menus, Elementor, ACF, WooCommerce, and your theme’s PHP, CSS, and JavaScript files.

Then two independent judgements are made about every image:

  • Confidence — how sure we are the image is unused
  • Risk — how much damage deleting it would cause if we are wrong

These are never blended into one score. A site logo nobody references and a stray upload nobody references look identical to a confidence score, and demand opposite actions.

Alt text audit

A separate screen lists every image missing alt text (or carrying a weak one like “IMG_2034”), suggests a replacement built from the filename, title, or parent post, and applies it only when you say so — with undo. The suggestion is editable: apply it as-is or write your own words. Images can be marked decorative, a Dashboard card tracks your coverage, and wp janitorix alt stats reports coverage for scripting. Nothing here affects confidence, risk, or any deletion recommendation.

Optional AI suggestions

The alt text screen can also ask an AI model — but only if you enable it under Settings and add your own API key. One-click presets for Gemini, OpenAI, Groq, and OpenRouter fill in the endpoint and a working default model, so setup is “pick yours, paste the key” — and a test-connection button confirms it works before you spend anything. The plugin ships no key and makes no AI calls on its own. Each suggestion is reviewed in the textbox before anything is saved, exactly like a rule-based one, with rate-limit handling and cached answers so you never pay twice for the same image.

External services

AI suggestions are off by default. When you enable them and save a key, each image you ask about is sent — resized to at most 1024px — together with its filename and its parent post’s title, to the service at the base URL you configured. The plugin itself stores nothing externally; what the service does with that data is governed by its own terms, which you accept when you create your key. Providers differ — some train on API data, some do not — so read your chosen service before enabling. Examples (your own service’s terms apply, not these examples):

No other part of this plugin contacts any external service. Scans, suggestions, and reports all run on your own site.

What it refuses to do

  • It will not recommend deleting anything if it could not search enough of your site. Below 70% coverage, it says so and recommends a rescan instead.
  • It will not offer Trash for anything at Medium risk or above, no matter how confident it is.
  • It will never delete your site logo, icon, or header — those are refused outright, not merely scored low.
  • It will not touch an image uploaded in the last 24 hours, because you probably have plans for it.
    • It never deletes anything in one step. Trash first, always, and only from the Trash can anything be permanently removed.
    • It never contacts any external service on its own. The only network call the plugin can ever make is an AI suggestion you explicitly ask for, after enabling it with your own key.

Every number shows its work

Open any image and you can see which scanner found what, how strong each piece of evidence was, and exactly why the plugin reached its conclusion. A confidence score you cannot inspect is a number you have no reason to trust.

Honest about its limits

A perfect scan reports 97%, not 100%. Proving an image is used takes one piece of evidence; proving it is unused means proving the absence of evidence everywhere — and “everywhere” is not somewhere you can finish visiting. Theme frameworks store images in ways nobody can fully predict, and page builders can assemble URLs at render time.

The plugin reports the honest number rather than a comfortable one.

Screenshots

The dashboard — a verdict first, with the reasons behind it

The dashboard — a verdict first, with the reasons behind it

Every unused image with its confidence, its risk, and what to do about it. A row that cannot be trashed has no checkbox

Every unused image with its confidence, its risk, and what to do about it. A row that cannot be trashed has no checkbox

Why an image scored what it did — where the plugin looked, what it found, and how the risk was reached

Why an image scored what it did — where the plugin looked, what it found, and how the risk was reached

An image that is in use, with every reference that proves it, and the rule that refuses to trash it

An image that is in use, with every reference that proves it, and the rule that refuses to trash it

The behaviour you cannot switch off, stated rather than offered

The behaviour you cannot switch off, stated rather than offered

Every scan kept as a snapshot a later one never rewrites

Every scan kept as a snapshot a later one never rewrites

The alt text audit — every image missing or weakening its alt text, with a suggestion ready

The alt text audit — every image missing or weakening its alt text, with a suggestion ready

Optional AI suggestions with one-click provider presets and test connection (off by default)

Optional AI suggestions with one-click provider presets and test connection (off by default)

Plugin Details

Active Installs
0
Total Downloads
663
Version
1.1.0
Requires WP
6.2
Requires PHP
7.4
Tested Up To
7.1.3
Added
2026-08-21
Last Updated
2026-10-07 5:21pm GMT

Ratings

5
2
4
0
3
0
2
0
1
0