

The Control Center: your whole library, now showing where each image is actually used - sort by it to surface what nothing points at.
WordPress will not let you change the file behind an existing attachment. You delete, re-upload, then hunt down thirty broken images by hand.
EvoMedia replaces the file in place, keeps the attachment ID, and rewrites every reference to it across your whole database – post content, postmeta, and the serialized structures page builders and custom fields store their data in.
That last part is the whole point. An image URL is not only in your post content. It is buried inside Elementor’s JSON, inside ACF fields, inside WooCommerce gallery meta – all of it serialized, where a naive search-and-replace corrupts the data and takes the page down with it. EvoMedia unserializes, replaces, and re-serializes each value, so the byte lengths stay correct and nothing breaks.
The same engine then lets it do something no image optimizer does: convert a JPEG to WebP and keep the attachment, renaming photo.jpg to photo.webp and repointing every reference at the new file. Other plugins keep the original and add a parallel file served through an .htaccess rule, a <picture> tag or a CDN. EvoMedia changes the actual file on your disk. There is no rewriting layer at page-render time – nothing to break when you switch hosts, and nothing to un-install later.
And once your library grows, EvoMedia helps you see into it: an index of where every image is actually used, so you know what is safe to remove – plus reports of the duplicate and orphaned files quietly wasting your disk.
Everything runs on your own server, through Imagick or GD. No account, no API key, no credits, no monthly quota, no upload limit. Your images are never sent anywhere.
Try this with any other tool: put an image in an Elementor section, then rename the file. Elementor stores its layout as a serialized PHP array inside postmeta, and every string in it is prefixed with its own byte length. Change photo.jpg to photo.webp with a plain SQL replace and the recorded length no longer matches the string. PHP refuses to unserialize it. The section disappears.
EvoMedia walks the structure, replaces the value, and lets PHP recompute the lengths. This is why it can offer replace, format conversion and (in the Pro add-on) renaming at all – and it is the part that took the longest to get right.
Every upload, WordPress quietly creates a stack of resized copies – thumbnail, medium, large, and hidden HiDPI versions – whether your theme uses them or not. EvoMedia lists every registered size with a live count of how many images in your library have it, lets you turn off the ones you don’t need (only new uploads and regenerations are affected – files already on disk are left alone), and regenerates your whole library to match with a single button and a progress bar. Core sizes are flagged, so you never switch off one the theme relies on by accident.
Every library accumulates images nobody uses, and the reason they are never cleared out is that you cannot tell which ones they are. Deleting the wrong one takes a page down.
EvoMedia scans your posts, pages, custom fields and site settings and records where each image is referenced – including the ones page builders name by ID with no URL to search for, and the ones held in a category image, an author profile or your site logo. Each image then carries a count you can sort by, and opening it lists the exact places, with the size each one uses.
It reports only what it can prove. An image referenced solely from a theme file, a stylesheet or an external service cannot be seen from the database, and every list says so rather than pretending otherwise. An image that has not been scanned yet shows “?” and never “0” – because “nobody uses this” and “nobody has looked” are different answers, and confusing them is how cleanup tools delete pictures that were still on a page.
The same honesty applies to sizes. The count tells you an image is in use; it cannot always tell you which sub-size, because page builders store the image and choose the size while the page is being drawn. The Image Sub-sizes panel says so where you would act on it, rather than letting a confident number imply more than it knows.
Media plugins break each other. EvoMedia is written to notice what else is installed:
PHP 8.1 or later, and either Imagick (recommended) or GD. Which output formats you can use depends on your host’s image driver – WebP and AVIF are common, JPEG XL is rare; the System Info page tells you exactly what your server can do.
Every WordPress library quietly fills with weight nothing uses: the same photo uploaded three times, sub-sizes your theme never touches, the full-resolution originals WordPress keeps beside every large image, and files left orphaned by years of renames and imports. It swells your backups, slows every migration, and quietly runs up your storage bill – and it never gets cleaned out for one reason: you cannot safely tell what is still in use.
The free EvoMedia shows you exactly where all that waste is. EvoMedia Pro is what clears it – built on the same link-safe engine, so it does the one thing other cleanup plugins get dangerously wrong: it never removes anything your site still needs.
Before it deletes a single file, the Pro re-checks your live content at that moment, not some stale scan. An image still used anywhere is left alone. A resize that would break a page is refused, and shows you which posts to fix first. Merging duplicates moves every reference – in posts, meta and page-builder data, by URL and by ID – onto the copy you keep before the others go. You get the disk space back without the broken images.
EvoMedia Pro installs alongside this plugin and needs it to run. It is available from the author at store.gfxproductions.com.
None of that code is in this plugin. This plugin is not a trial and has nothing locked, disabled or limited. There is no licence check, no upsell nag, no counter, no expiry, and no cap on how many images you may process. Everything it ships, it does.