WordPress plugin — Image Locator
WP plugin: which image is used where?And which ones do we no longer need?
Deleting unused images is easily said. WordPress only shows which post an image was attached to — not where it actually appears. This plugin goes and looks: in content, featured images, custom fields, page-builder data, widgets, logo, site icon and term images, WooCommerce included. Afterwards the media library shows, next to every image, where it is used — and which one is used nowhere. You can then clean up in one go — with a safety net behind it.
Image Locator on wordpress.org
Free, no volume limit. No pro version.

Cleaning up the media library, in five steps
Run the library scan once
The scan works in small batches, so it never runs into a time limit. On a large library it takes a while, because every image is checked individually — with the same logic that applies before a deletion. That effort happens once; after that only new uploads are added.
See in the media library where an image is used
A column with the number of places, a “Used in” panel with a link to each one, and a page per image that re-checks live at the push of a button.
Filter for unused images
Used, unused, not checked yet. Drafts count as usage; revisions and trashed items do not.
Delete unused images in one go
The bulk action re-checks every image immediately beforehand. If one does turn up somewhere, it is skipped and reported, not deleted.
The safety net brings back what went too far
It is switched on for new installations, and as long as you leave it on, nothing is deleted for good: the images move to the SEO'n'AI trash, the file stays on the server, the image keeps its ID, one click restores it. The bulk action says so too — “Move unused to SEO'n'AI Trash (verified)”. After 30 days WordPress clears it out. If the media trash built into WordPress is switched on, the plugin uses that one instead.
At a glance
Runs in the admin area only. The public site stays untouched, the media library only reads stored values.
What a scan cannot see
“Unused” is a finding from the database, not a guarantee. An image hard-coded in a theme file, or used only as a CSS background, is invisible to a database search. That is why the plugin never deletes on its own, re-checks before every deletion and, with the safety net on, puts everything into the trash first. Afterwards, look at the places a search cannot reach: home page, sliders, hero sections, category and product pages, older posts. Only then empty it.
Image Locator on wordpress.org
WordPress 6.0 or higher, PHP 7.4 or higher. GPLv2, free, no pro version.