{"id":367236,"date":"2026-09-17T06:55:48","date_gmt":"2026-09-17T06:55:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mediaboost-image-optimizer-media-cleaner\/"},"modified":"2026-09-17T09:05:28","modified_gmt":"2026-09-17T09:05:28","slug":"mediavoom-image-optimizer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/mediavoom-image-optimizer\/","author":20758638,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.9","stable_tag":"1.0.9","tested":"7.1.1","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"MediaVoom - Image Optimizer & Media Cleaner","header_author":"TheLeoPress","header_description":"Optimize images to WebP\/AVIF, find unused and duplicate media, detect orphan files, and clean the WordPress Media Library safely.","assets_banners_color":"394579","last_updated":"2026-09-17 09:05:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":10,"downloads":66,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.6":{"tag":"1.0.6","author":"yuss246","date":"2026-09-17 06:55:11","revision":3699642},"1.0.7":{"tag":"1.0.7","author":"yuss246","date":"2026-09-17 08:47:18","revision":3699838},"1.0.9":{"tag":"1.0.9","author":"yuss246","date":"2026-09-17 09:05:28","revision":3699884}},"upgrade_notice":{"1.0.9":"<p>Adds a polite, dismissible WordPress admin review notice after users have had time to use MediaVoom.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3699744,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3699744,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3699744,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3699744,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.6","1.0.7","1.0.9"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"MediaVoom dashboard with media health metrics and the Safe Media Usage Scanner.","2":"Bulk image optimizer with WebP\/AVIF generation and background processing.","3":"Safe Trash workflow for reversible media cleanup.","4":"Duplicate and orphan-media management tools."}},"plugin_section":[],"plugin_tags":[238093,29161,227565,146945,15376],"plugin_category":[],"plugin_contributors":[279870],"plugin_business_model":[],"class_list":["post-367236","plugin","type-plugin","status-publish","hentry","plugin_tags-duplicate-images","plugin_tags-image-optimization","plugin_tags-media-cleaner","plugin_tags-unused-images","plugin_tags-webp","plugin_contributors-yuss246","plugin_committers-yuss246"],"banners":{"banner":"https:\/\/ps.w.org\/mediavoom-image-optimizer\/assets\/banner-772x250.png?rev=3699744","banner_2x":"https:\/\/ps.w.org\/mediavoom-image-optimizer\/assets\/banner-1544x500.png?rev=3699744","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mediavoom-image-optimizer\/assets\/icon-128x128.png?rev=3699744","icon_2x":"https:\/\/ps.w.org\/mediavoom-image-optimizer\/assets\/icon-256x256.png?rev=3699744","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>MediaVoom is a safety-first Media Library maintenance toolkit that combines usage auditing, reversible cleanup, exact duplicate detection, orphan-file discovery, and local next-generation image generation in one workflow.<\/p>\n\n<p>Its cleanup tools are deliberately conservative: files are classified before action, cleanup candidates can be moved to reversible Safe Trash, and permanent deletion remains a separate administrator-controlled step.<\/p>\n\n<h4>Image optimization<\/h4>\n\n<ul>\n<li>Generate WebP copies locally.<\/li>\n<li>Generate AVIF copies when the server can reliably encode AVIF.<\/li>\n<li>Process original images and WordPress-generated image sizes.<\/li>\n<li>Optional optimization of new uploads.<\/li>\n<li>Frontend next-generation delivery using standards-based <code>&lt;picture&gt;<\/code> markup.<\/li>\n<li>Original JPEG\/PNG\/WebP files remain available as the fallback.<\/li>\n<li>Background bulk processing with Pause, Stop, Continue, Restart, WP-Cron fallback, and stale-job recovery.<\/li>\n<li>Existing up-to-date generated files are reused instead of regenerated.<\/li>\n<\/ul>\n\n<h4>Media cleanup<\/h4>\n\n<ul>\n<li>Scan WordPress for media usage across content, featured images, common metadata, taxonomy metadata, widgets, theme settings, WooCommerce, Elementor, and selected media-shaped settings.<\/li>\n<li>Classify attachments as Used, Probably Unused, Needs Review, or Missing File.<\/li>\n<li>Move selected cleanup candidates to reversible Safe Trash.<\/li>\n<li>Restore Safe Trash items before permanent deletion if you change your mind.<\/li>\n<li>Detect exact duplicate images using SHA-256 file hashes.<\/li>\n<li>Scan the uploads filesystem separately for orphan files.<\/li>\n<li>Filter and bulk-select cleanup candidates.<\/li>\n<li>Keep technical optimizer messages on a separate Logs screen.<\/li>\n<\/ul>\n\n<h4>Safety and privacy<\/h4>\n\n<p>MediaVoom does not automatically delete media.<\/p>\n\n<p>\"Probably Unused\" means that no supported reference was detected. A theme or plugin can still store a media reference in a custom location, so review cleanup candidates before moving or deleting them.<\/p>\n\n<p>Image optimization is performed locally on your WordPress server. MediaVoom does not require an external optimization API and does not include telemetry.<\/p>\n\n<h4>Multisite<\/h4>\n\n<p>MediaVoom is multisite-aware. Each site keeps its own scan state, settings, Safe Trash, optimizer jobs, duplicate results, and orphan results. Network activation initializes defaults for existing sites and for newly created sites.<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>All first-party JavaScript and CSS included with MediaVoom is shipped directly in human-readable, modifiable source form. No minified or obfuscated first-party JavaScript is distributed, and no build step is required to modify the bundled admin assets.<\/p>\n\n<p>MediaVoom does not bundle third-party JavaScript or CSS libraries.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>MediaVoom performs image optimization locally on the WordPress server. It does not require an external optimization API, does not send media to a third-party optimization service, and does not include telemetry.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>mediavoom-image-optimizer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or upload the ZIP from Plugins &gt; Add New.<\/li>\n<li>Activate <strong>MediaVoom - Image Optimizer &amp; Media Cleaner<\/strong>.<\/li>\n<li>Open <strong>MediaVoom<\/strong> in WordPress Admin.<\/li>\n<li>Run the Media Usage Scanner before performing cleanup.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20mediavoom%20delete%20images%20automatically%3F\"><h3>Does MediaVoom delete images automatically?<\/h3><\/dt>\n<dd><p>No. Cleanup actions require an administrator to explicitly select the files. Safe Trash is reversible and permanent deletion is a separate action.<\/p><\/dd>\n<dt id=\"are%20%22probably%20unused%22%20files%20guaranteed%20to%20be%20unused%3F\"><h3>Are \"Probably Unused\" files guaranteed to be unused?<\/h3><\/dt>\n<dd><p>No. It means MediaVoom did not find a supported WordPress reference. Custom theme or plugin code can store media references in other locations.<\/p><\/dd>\n<dt id=\"are%20original%20images%20replaced%20during%20optimization%3F\"><h3>Are original images replaced during optimization?<\/h3><\/dt>\n<dd><p>No. MediaVoom generates next-generation copies and keeps the original file untouched.<\/p><\/dd>\n<dt id=\"does%20frontend%20delivery%20require%20server%20rewrite%20rules%3F\"><h3>Does frontend delivery require server rewrite rules?<\/h3><\/dt>\n<dd><p>No. MediaVoom can output <code>&lt;picture&gt;<\/code> \/ <code>&lt;source&gt;<\/code> markup when matching generated files exist. The original image remains as the fallback.<\/p><\/dd>\n<dt id=\"does%20mediavoom%20work%20with%20woocommerce%3F\"><h3>Does MediaVoom work with WooCommerce?<\/h3><\/dt>\n<dd><p>The scanner checks common WooCommerce image fields and product galleries, and frontend delivery hooks into WooCommerce product image HTML.<\/p><\/dd>\n<dt id=\"does%20it%20use%20a%20third-party%20image%20optimization%20service%3F\"><h3>Does it use a third-party image optimization service?<\/h3><\/dt>\n<dd><p>No. Conversion is performed locally using the image capabilities available on the WordPress server.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20safe%20trash%20if%20i%20uninstall%20mediavoom%3F\"><h3>What happens to Safe Trash if I uninstall MediaVoom?<\/h3><\/dt>\n<dd><p>MediaVoom attempts to restore quarantined media before removing plugin state. If a restore cannot be completed, the Safe Trash index is preserved rather than discarding the recovery map.<\/p><\/dd>\n<dt id=\"are%20generated%20webp%2Favif%20files%20deleted%20on%20uninstall%3F\"><h3>Are generated WebP\/AVIF files deleted on uninstall?<\/h3><\/dt>\n<dd><p>No. Generated image files are preserved intentionally to avoid breaking cached or externally stored markup.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multisite%3F\"><h3>Does it support multisite?<\/h3><\/dt>\n<dd><p>Yes. MediaVoom stores and processes data per site. Network activation initializes the plugin for current sites and newly created sites.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Standardized the plugin name and all first-party runtime identifiers on the MediaVoom namespace.<\/li>\n<li>Updated publisher branding to TheLeoPress.<\/li>\n<li>Removed CSS that suppressed unrelated WordPress and third-party admin notices.<\/li>\n<li>Repositioned the plugin around safety-first Media Library auditing, reversible cleanup, duplicate\/orphan detection, and local WebP\/AVIF generation.<\/li>\n<li>No external optimization API or telemetry is used.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Standardized runtime, option, hook, AJAX, nonce, meta, transient, script and CSS identifiers on the distinctive MediaVoom prefix to reduce collision risk.<\/li>\n<li>Renamed internal class files and PHP classes to use the MediaVoom prefix.<\/li>\n<li>Removed suppression of unrelated WordPress admin notices on MediaVoom screens.<\/li>\n<li>Added explicit human-readable source-code and external-service disclosures for WordPress.org review.<\/li>\n<li>Kept all image optimization local to the WordPress server; no telemetry or external optimization API is used.<\/li>\n<li>No original media files are automatically deleted.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Existing plugin data and media are unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added MediaVoom branding\/logo to the plugin navigation bar.<\/li>\n<li>Added bundled admin logo assets.<\/li>\n<li>Added complete WordPress.org icon, banner and screenshot asset pack.<\/li>\n<li>No scanner, optimizer, Safe Trash, duplicate, orphan or generated-media data is changed by this update.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Removed obsolete development-version roadmap cards and old audit-only version wording from the dashboard.<\/li>\n<li>Added search, status, and size filters to the latest attention results.<\/li>\n<li>Added Select All Visible Eligible and bulk Move to Safe Trash actions directly on the dashboard results.<\/li>\n<li>Added a per-image Move to Safe Trash action for eligible Probably Unused attachments.<\/li>\n<li>Missing-file and Needs Review rows remain non-destructive from the dashboard.<\/li>\n<li>Fixed Plugin Check global-variable prefix warnings in uninstall.php.<\/li>\n<li>Existing scanner data, optimizer jobs, generated images, Safe Trash, duplicates, orphans, and logs are preserved.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable public release.<\/li>\n<li>Added versioned data migration so existing installations inherit new defaults safely without losing scanner or optimizer state.<\/li>\n<li>Added multisite-aware activation, deactivation, and new-site initialization.<\/li>\n<li>Added deactivation cleanup for background schedules and watchdog locks while preserving resumable job data.<\/li>\n<li>Hardened frontend WebP\/AVIF delivery for image URLs containing query strings or fragments.<\/li>\n<li>Prevented frontend delivery markup from being injected into normal wp-admin screens or feeds.<\/li>\n<li>Added safe multisite uninstall cleanup.<\/li>\n<li>Safe Trash items are restored before uninstall state is removed; failed restores keep their recovery index.<\/li>\n<li>Generated WebP\/AVIF files are preserved during uninstall to prevent broken cached references.<\/li>\n<li>Finalized WordPress.org metadata, FAQ, privacy\/safety language, installation instructions, and stable version information.<\/li>\n<\/ul>\n\n<h4>0.8.1<\/h4>\n\n<ul>\n<li>Fixed the MediaVoom admin UI losing its CSS and JavaScript after the rebrand.<\/li>\n<li>Admin assets now load by plugin page slug instead of generated WordPress hook names.<\/li>\n<li>Fixed the two Plugin Check warnings reported in v0.8.0.<\/li>\n<li>Removed the direct https_local_ssl_verify hook invocation from the background loopback request.<\/li>\n<li>Renamed the scanner extension hook to mediavoom_image_optimizer_scanner_meta_keys.<\/li>\n<li>Existing plugin data and generated media are preserved.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Rebranded the release candidate as MediaVoom - Image Optimizer &amp; Media Cleaner.<\/li>\n<li>Changed the proposed public plugin folder, main file, and text domain to mediavoom-image-optimizer.<\/li>\n<li>Updated WordPress.org-facing description and discovery tags.<\/li>\n<li>Updated admin branding to MediaVoom.<\/li>\n<li>Preserved existing scan data, optimizer jobs, Safe Trash records, duplicate\/orphan results, and logs during the rebrand.<\/li>\n<li>Includes the v0.7.2 scanner compatibility fix and v0.7.1 background optimizer reliability improvements.<\/li>\n<\/ul>\n\n<h4>0.7.2<\/h4>\n\n<ul>\n<li>Fixed the Media Usage Scanner error \"Unknown column option_id in WHERE\".<\/li>\n<li>The targeted WordPress options scan no longer depends on an option_id column.<\/li>\n<li>Options are now paginated deterministically by option_name with a saved stage offset.<\/li>\n<li>Existing scan results, optimizer progress, generated images, Safe Trash data, duplicates, orphans, and logs are preserved.<\/li>\n<li>Includes the v0.7.1 background optimizer reliability fixes.<\/li>\n<\/ul>\n\n<h4>0.7.1<\/h4>\n\n<ul>\n<li>Fixed bulk optimization stalling after leaving the Optimizer screen on some shared hosts.<\/li>\n<li>Improved non-blocking loopback handoff reliability for the background optimizer.<\/li>\n<li>Schedules the WP-Cron fallback before each work cycle so interrupted requests can recover.<\/li>\n<li>Added a lightweight watchdog that restarts stale running jobs when normal WordPress traffic occurs.<\/li>\n<li>Added a short watchdog lock to avoid overlapping recovery workers.<\/li>\n<li>Reduced fallback delay while preserving saved progress and completed-attachment tracking.<\/li>\n<li>Existing optimization progress and generated files are preserved.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Added frontend WebP\/AVIF delivery using standards-based picture\/source markup.<\/li>\n<li>Keeps original JPEG\/PNG images as the browser fallback.<\/li>\n<li>Supports WordPress attachment images, featured images, post content, and WooCommerce image HTML.<\/li>\n<li>Generates next-gen srcset values only when every referenced local derivative exists.<\/li>\n<li>Leaves external and CDN-hosted image URLs untouched.<\/li>\n<li>Added a Frontend delivery toggle to Optimizer settings.<\/li>\n<li>No original media files are replaced or deleted.<\/li>\n<\/ul>\n\n<h4>0.6.3<\/h4>\n\n<ul>\n<li>Final Plugin Check warning cleanup based on the v0.6.2 report.<\/li>\n<li>Added narrowly scoped security annotations at the exact Safe Trash request-read lines after nonce\/capability verification.<\/li>\n<li>Clarified bulk attachment ID normalization after wp_unslash() and absint sanitization.<\/li>\n<li>Moved the intentional read-only scanner database-query annotation to the exact aggregate query line.<\/li>\n<li>Existing plugin data and media remain untouched.<\/li>\n<\/ul>\n\n<h4>0.6.2<\/h4>\n\n<ul>\n<li>Follow-up Plugin Check cleanup after v0.6.1 reached zero errors.<\/li>\n<li>Documented nonce verification at protected AJAX request-read sites.<\/li>\n<li>Bulk attachment IDs are unslashed and normalized element-by-element before use.<\/li>\n<li>Added narrow documentation for two intentional read-only scanner aggregate count queries.<\/li>\n<li>Existing plugin data is preserved.<\/li>\n<\/ul>\n\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>Corrected the Plugin Check findings reported against v0.6.0.<\/li>\n<li>Replaced direct PHP rename() calls in Safe Trash with WP_Filesystem move operations.<\/li>\n<li>Added wp_unslash() and normalization for attachment IDs received by admin AJAX actions.<\/li>\n<li>Corrected SQL LIKE wildcard handling by using esc_like() values through wpdb prepare placeholders.<\/li>\n<li>Corrected prepared-query execution annotations for dynamically generated IN placeholders.<\/li>\n<li>Removed the generic dynamic table\/count SQL helper and replaced it with explicit core-table scanner count queries.<\/li>\n<li>Renamed the scanner filter hook to use the full mediavoom_image_optimizer prefix.<\/li>\n<li>No existing scan, optimizer, Safe Trash, duplicate, orphan, or log data is reset.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Added the missing Orphans tab to the main plugin workflow navigation, including Optimizer.<\/li>\n<li>Security hardening before wider testing.<\/li>\n<li>Confirmed privileged AJAX actions require manage_options capability and a valid WordPress nonce.<\/li>\n<li>Safe Trash now rejects traversal, stream-wrapper, and filesystem paths outside the WordPress uploads directory.<\/li>\n<li>Safe Trash move, restore, and permanent-delete operations validate both source and destination paths.<\/li>\n<li>Permanent attachment deletion now uses wp_delete_attachment() instead of direct database deletion, allowing WordPress cleanup hooks and cache invalidation to run normally.<\/li>\n<li>Existing optimizer, scan, Safe Trash, duplicate, orphan, and log data is preserved.<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Added Clear Logs on the Logs page.<\/li>\n<li>Added log filtering by date and time range.<\/li>\n<li>Existing search and format filters remain available.<\/li>\n<li>Clear Logs removes stored optimizer error history only and does not modify media files.<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Added clear guidance for choosing which duplicate copy to keep.<\/li>\n<li>Added duplicate search, file-size filters, and Suggested Keep \/ Duplicate Copy filtering.<\/li>\n<li>Added per-duplicate checkboxes and Select All Visible Duplicates.<\/li>\n<li>Added bulk Move Selected to Safe Trash; selected files remain restorable and are not permanently deleted.<\/li>\n<li>Suggested Keep rows cannot be bulk-selected by default.<\/li>\n<li>Removed Logs from the main horizontal workflow navigation while keeping the Logs page available from the WordPress sidebar and Optimizer View Logs action.<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Fixed fatal error on the Orphans admin page caused by a malformed submenu callback registration.<\/li>\n<li>Rebuilt all Media Optimizer submenu registrations with explicit valid class callbacks.<\/li>\n<li>No scanning or optimization data is reset by this update.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Split Duplicates and Orphan Files into separate tools.<\/li>\n<li>Duplicate scanning now checks Media Library attachments only for much faster exact-hash duplicate detection.<\/li>\n<li>Added a dedicated Orphans page for optional deep uploads-filesystem scanning.<\/li>\n<li>Added independent background progress, Pause, Stop, Continue, and Restart controls for both Duplicates and Orphans.<\/li>\n<li>Added a dedicated Logs page for technical optimizer errors.<\/li>\n<li>Removed raw technical error details from the main Optimizer screen; users now see a friendly message and a View Logs button.<\/li>\n<li>Updated plugin navigation to Dashboard, Optimizer, Safe Trash, Duplicates, Orphans, and Logs.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Replaced raw optimizer server errors with user-friendly warnings.<\/li>\n<li>Technical image-editor messages are hidden under an expandable View technical details section.<\/li>\n<li>Repeated AVIF encoder failures automatically stop AVIF for the current run instead of creating hundreds of identical errors.<\/li>\n<li>WebP optimization continues when AVIF is stopped.<\/li>\n<li>Original images remain untouched.<\/li>\n<li>Removed leaked PHP\/source text from the Duplicates &amp; Orphans page.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Fixed the Safe Trash submenu callback regression in v0.4.0.<\/li>\n<li>Rebuilt Duplicates &amp; Orphans scanning as a true background job.<\/li>\n<li>Added live progress for attachment hashing and uploads filesystem scanning.<\/li>\n<li>Added Pause, Stop, Continue, and Restart From Zero controls.<\/li>\n<li>Scan progress is preserved after Pause\/Stop and continues after leaving the page.<\/li>\n<li>Added live duplicate-group, extra-copy, and orphan counters during scanning.<\/li>\n<li>Added WP-Cron fallback and a secure loopback worker so long scans do not depend on one AJAX request.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added Duplicates &amp; Orphans phase.<\/li>\n<li>Exact duplicate detection uses SHA-256 hashes of original attachment files.<\/li>\n<li>Duplicate groups show all matching attachments, thumbnails, file sizes, and a conservative suggested copy to keep.<\/li>\n<li>Added estimated duplicate storage recovery.<\/li>\n<li>Added conservative uploads-folder orphan detection against known attachment originals, WordPress image sizes, WebP, and AVIF siblings.<\/li>\n<li>Orphan results include search, type, and size filters.<\/li>\n<li>Duplicate\/orphan phase is audit-only; nothing is deleted automatically.<\/li>\n<\/ul>\n\n<h4>0.3.4<\/h4>\n\n<ul>\n<li>Fixed AVIF jobs that could report Ready but fail during actual conversion.<\/li>\n<li>AVIF conversion now falls back from the WordPress image editor to explicit Imagick and then GD imageavif() when available.<\/li>\n<li>Added exact optimizer error logging with attachment ID, filename, format, and server\/image-editor message.<\/li>\n<li>Added a visible optimizer error details panel with separate WebP and AVIF error counts.<\/li>\n<li>Removed all third-party and WordPress admin notices from every MediaVoom - Image Optimizer &amp; Media Cleaner screen using action suppression plus CSS fallback.<\/li>\n<\/ul>\n\n<h4>0.3.3<\/h4>\n\n<ul>\n<li>Added multi-selection to Probably Unused media and Safe Trash contents.<\/li>\n<li>Added Select All Visible for filtered Probably Unused results.<\/li>\n<li>Added bulk Move Selected to Safe Trash.<\/li>\n<li>Added Select All, Restore Selected, and Permanently Delete Selected in Safe Trash.<\/li>\n<li>Bulk permanent deletion requires an explicit confirmation.<\/li>\n<li>Bulk actions preserve existing Safe Trash safety rules.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Fixed Optimizer state buttons not changing after Pause or Stop.<\/li>\n<li>The button-state helper had been scoped inside the scanner script, causing the Optimizer UI update to stop with a JavaScript error.<\/li>\n<li>Running now shows only Pause and Stop.<\/li>\n<li>Paused or stopped now shows only Continue and Restart From Zero.<\/li>\n<li>Completed shows Run Again and Restart From Zero.<\/li>\n<li>Button state changes happen immediately without a page refresh.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Fixed AVIF support incorrectly changing to Unavailable after AVIF files had already been generated.<\/li>\n<li>Successful WebP\/AVIF generation is now persisted as verified server capability.<\/li>\n<li>Optimizer now shows only context-relevant controls: running shows Pause\/Stop; paused or stopped shows Continue\/Restart; completed shows Run Again\/Restart.<\/li>\n<li>Restored distraction-free plugin pages by hiding unrelated WordPress and third-party admin notices on all plugin screens.<\/li>\n<li>Added Safe Trash filters for search, image type, and file size.<\/li>\n<li>Added media thumbnails plus View Media and Media Details actions before moving an item to Safe Trash.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added reversible Safe Trash for scanner-flagged Probably Unused media.<\/li>\n<li>Safe Trash moves originals, WordPress thumbnails, and generated WebP\/AVIF siblings together.<\/li>\n<li>Added Restore and separately confirmed Permanent Delete actions.<\/li>\n<li>Nothing is automatically deleted.<\/li>\n<li>Optimizer buttons now change immediately to match Start, Pause, Continue, Stop, and completed states.<\/li>\n<\/ul>\n\n<h4>0.2.5<\/h4>\n\n<ul>\n<li>Fixed Continue after Pause\/Stop so the job processes immediately and resumes reliably.<\/li>\n<li>Added a browser heartbeat that re-kicks a running background job if the worker chain stalls.<\/li>\n<li>Fixed WebP\/AVIF generated counters to count only newly created files, not reused files.<\/li>\n<li>Fixed AVIF handling so successful AVIF generation is preserved while failed conversions report real errors.<\/li>\n<li>Real WebP\/AVIF capability checks now use an actual local conversion test.<\/li>\n<li>Fixed the AVIF-only retry job and preserved all existing optimized files.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li>Fixed AVIF capability reporting by performing a real local conversion probe instead of relying only on editor declarations.<\/li>\n<li>AVIF\/WebP conversion failures now record their exact WordPress image-editor error.<\/li>\n<li>Added Retry Missing AVIF Only, which preserves existing WebP files and attempts only missing AVIF derivatives.<\/li>\n<li>Existing optimized files remain untouched and are reused.<\/li>\n<li>Preserves Pause\/Stop\/Continue behavior and saved progress.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Added Pause, Stop, Continue, Refresh, and Restart From Zero controls.<\/li>\n<li>Pause and Stop preserve job counters, generated-file results, and completed attachment IDs.<\/li>\n<li>Continue resumes from the saved position without reprocessing attachments already completed in the job.<\/li>\n<li>Existing up-to-date WebP\/AVIF files are still reused even after a full restart.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Increased optimizer batch size from 3 to 10 attachments.<\/li>\n<li>Increased bounded background work per worker cycle for substantially faster bulk processing.<\/li>\n<li>Existing up-to-date WebP\/AVIF files are reused instead of regenerated.<\/li>\n<li>Existing running jobs continue from their saved position after updating the plugin.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Fixed bulk optimizer jobs remaining at 0% while waiting for WP-Cron.<\/li>\n<li>Bulk optimization now starts immediately through a secure server loopback worker.<\/li>\n<li>WP-Cron remains as a fallback if the loopback worker is interrupted.<\/li>\n<li>Added per-job worker authentication and bounded processing cycles.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added Optimizer module.<\/li>\n<li>Added WebP and AVIF capability detection.<\/li>\n<li>Added local WebP\/AVIF generation for original and resized images.<\/li>\n<li>Added background bulk optimization.<\/li>\n<li>Added optional automatic optimization after new uploads.<\/li>\n<li>Added optimizer quality settings.<\/li>\n<li>Originals remain untouched for safety.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Replaced broad numeric-ID metadata matching with a targeted smart scanner.<\/li>\n<li>Stops treating arbitrary numbers in unrelated metadata as media usage.<\/li>\n<li>Targets WordPress featured images, Gutenberg\/classic content, Elementor data, WooCommerce galleries, common media fields, taxonomy image fields, widgets, theme settings, and selected plugin settings.<\/li>\n<li>Records where a detected image is used, including post\/product\/term IDs where available.<\/li>\n<li>Avoids brute-force scanning every postmeta row.<\/li>\n<li>Keeps secure background processing and page-independent scanning.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Scanner now continues server-side after leaving the plugin page.<\/li>\n<li>Added secure per-scan background worker token with a WP-Cron fallback.<\/li>\n<li>Browser now polls progress instead of driving the scan.<\/li>\n<li>Fixed misleading progress display: discovery stages now show database records checked rather than \"0 \/ N media classified\".<\/li>\n<li>Shows media references found during discovery before final classification.<\/li>\n<li>Keeps third-party notices hidden only on the plugin screen.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Dramatically faster staged scanner that reads WordPress tables in batches instead of querying each image repeatedly.<\/li>\n<li>Added stage-aware progress reporting.<\/li>\n<li>Cached Media Library dashboard totals for faster page loads.<\/li>\n<li>Hid unrelated third-party admin notices on the plugin screen only.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial development release.<\/li>\n<li>Added Media Health dashboard.<\/li>\n<li>Added batch-based Media Usage Scanner.<\/li>\n<li>Added cautious Used \/ Probably Unused \/ Needs Review classification.<\/li>\n<li>Added missing-file detection.<\/li>\n<li>Added attention-results table.<\/li>\n<li>No destructive media operations.<\/li>\n<\/ul>","raw_excerpt":"Safely clean your Media Library, find duplicates and orphan files, and generate local WebP\/AVIF images.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367236","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=367236"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/yuss246"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367236"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367236"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367236"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367236"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367236"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}