{"id":252904,"date":"2025-10-05T07:58:28","date_gmt":"2025-10-05T07:58:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/prune-thumbnails\/"},"modified":"2026-08-01T04:35:12","modified_gmt":"2026-08-01T04:35:12","slug":"thumbnail-manager","status":"publish","type":"plugin","link":"https:\/\/zgh.wordpress.org\/plugins\/thumbnail-manager\/","author":21137534,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.0.2","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Thumbnail Manager","header_author":"YoOhw.com","header_description":"Clean up unused thumbnails with progress; find orphan -WxH files; disable sizes for future uploads.","assets_banners_color":"77787b","last_updated":"2026-08-01 04:35:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/thumbnail-manager","header_author_uri":"https:\/\/yoohw.com","rating":5,"author_block_rating":0,"active_installs":80,"downloads":1157,"num_ratings":1,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"yoohw","date":"2025-10-05 07:58:14"},"1.0.1":{"tag":"1.0.1","author":"yoohw","date":"2025-12-03 02:11:14"},"1.1":{"tag":"1.1","author":"yoohw","date":"2026-03-19 04:47:53"},"1.2":{"tag":"1.2","author":"yoohw","date":"2026-05-09 03:10:17"},"1.3":{"tag":"1.3","author":"yoohw","date":"2026-06-12 04:58:42"},"1.4.0":{"tag":"1.4.0","author":"yoohw","date":"2026-08-01 04:35:12"}},"upgrade_notice":{"1.4.0":"<p>Adds persistent resumable jobs, explicit manifest approval, folder-limited scans, and a safer workflow for large Media Libraries.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3517019,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3517019,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3517019,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3517019,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.0.1","1.1","1.2","1.3","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3610954,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3610933,"resolution":"2","location":"assets","locale":"","width":1920,"height":1080},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3610933,"resolution":"3","location":"assets","locale":"","width":1920,"height":1080},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3610933,"resolution":"4","location":"assets","locale":"","width":1920,"height":1080}},"screenshots":[]},"plugin_section":[],"plugin_tags":[3786,3473,233,30630,2956],"plugin_category":[50],"plugin_contributors":[223812],"plugin_business_model":[],"class_list":["post-252904","plugin","type-plugin","status-publish","hentry","plugin_tags-cleanup","plugin_tags-image-sizes","plugin_tags-media-library","plugin_tags-regenerate-thumbnails","plugin_tags-thumbnails","plugin_category-media","plugin_contributors-yoohw","plugin_committers-yoohw","plugin_support_reps-jacobb26"],"banners":{"banner":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/banner-772x250.png?rev=3517019","banner_2x":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/banner-1544x500.png?rev=3517019","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/icon-128x128.png?rev=3517019","icon_2x":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/icon-256x256.png?rev=3517019","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/screenshot-1.png?rev=3610954","caption":""},{"src":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/screenshot-2.png?rev=3610933","caption":""},{"src":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/screenshot-3.png?rev=3610933","caption":""},{"src":"https:\/\/ps.w.org\/thumbnail-manager\/assets\/screenshot-4.png?rev=3610933","caption":""}],"raw_content":"<!--section=description-->\n<p><a href=\"https:\/\/yoohw.com\/product\/thumbnail-manager\/\">Product page<\/a> | <a href=\"https:\/\/docs.yoohw.com\/category\/thumbnail-manager\/\">Documentation<\/a> | <a href=\"https:\/\/workspace.yoohw.com\/\">Support<\/a><\/p>\n\n<p>Thumbnail Manager helps regenerate WordPress image sizes, prevent future thumbnail bloat, and review generated files before cleanup. Use it after changing themes or WooCommerce image settings, migrating a site, or finding obsolete sizes in a long-running Media Library.<\/p>\n\n<p>Large operations run as persistent, cursor-based jobs. They continue in bounded batches, survive a page reload or network interruption, and can be limited to selected upload years or months.<\/p>\n\n<h4>Thumbnail control and regeneration<\/h4>\n\n<ul>\n<li>Review every registered image size and decide which sizes WordPress should generate for future uploads.<\/li>\n<li>Generate only missing sizes or force-regenerate selected image attachments.<\/li>\n<li>Process all images, selected attachments, the current year, or selected upload folders.<\/li>\n<li>Review recommendations based on protected WordPress sizes, WooCommerce-related sizes, attachment metadata, and common content references.<\/li>\n<li>Resume or cancel persistent jobs and review recent job results and per-item errors.<\/li>\n<\/ul>\n\n<h4>Review-first cleanup<\/h4>\n\n<p>Prune Files separates discovery from deletion:<\/p>\n\n<ol>\n<li>Choose the image sizes to keep.<\/li>\n<li>Scan all uploads or selected year and month folders.<\/li>\n<li>Review the immutable, hashed manifest and estimated storage total.<\/li>\n<li>Explicitly approve the reviewed manifest.<\/li>\n<li>Delete only those approved generated files in resumable batches.<\/li>\n<\/ol>\n\n<p>Original full-size uploads are protected. Candidate paths are validated inside the WordPress uploads directory, and attachment metadata is updated when a generated size is removed.<\/p>\n\n<p>Metadata-backed legacy sizes can be included in the review. Disk-only files that match a <code>-WIDTHxHEIGHT<\/code> pattern but cannot be mapped reliably to attachment metadata are reported and skipped by default.<\/p>\n\n<h4>Scope<\/h4>\n\n<p>Thumbnail Manager controls image-size generation, regeneration, and cleanup. It does not compress images, convert them to WebP or AVIF, configure a CDN, offload media, or unregister a size from the theme or plugin that originally registered it.<\/p>\n\n<p>Recommendations are an informed starting point. Verify the sizes used by the active theme, plugins, WooCommerce templates, and custom code before disabling generation or approving deletion.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Thumbnail Manager does not collect, store, or transmit personal data to external services. Thumbnail analysis, regeneration, recommendations, and cleanup run locally on the WordPress site.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin through the WordPress Plugins screen, or upload it to <code>\/wp-content\/plugins\/thumbnail-manager\/<\/code>.<\/li>\n<li>Activate Thumbnail Manager.<\/li>\n<li>Go to <strong>Tools &gt; Thumbnail Manager<\/strong>.<\/li>\n<li>Run Recommendations and review the result for your theme and plugins.<\/li>\n<li>Configure future Thumbnail Sizes before regenerating or cleaning files.<\/li>\n<li>Back up the uploads directory before approving cleanup on a production site.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20regenerate%20thumbnails%20after%20changing%20image%20sizes%3F\"><h3>Can I regenerate thumbnails after changing image sizes?<\/h3><\/dt>\n<dd><p>Yes. <strong>Only Missing<\/strong> creates absent sub-sizes. <strong>Force Regenerate<\/strong> rebuilds the selected attachments more comprehensively from an available original image source.<\/p><\/dd>\n<dt id=\"can%20it%20clean%20unused%20generated%20thumbnails%3F\"><h3>Can it clean unused generated thumbnails?<\/h3><\/dt>\n<dd><p>Yes. Prune Files first builds a manifest for review. Nothing is deleted until the scan finishes and an administrator explicitly approves that manifest.<\/p><\/dd>\n<dt id=\"will%20it%20delete%20original%20images%3F\"><h3>Will it delete original images?<\/h3><\/dt>\n<dd><p>No. Original full-size uploads are protected. Cleanup candidates must also pass path and attachment checks.<\/p><\/dd>\n<dt id=\"can%20i%20scan%20several%20upload%20folders%3F\"><h3>Can I scan several upload folders?<\/h3><\/dt>\n<dd><p>Yes. Search for and select multiple years or months. Selecting an entire year automatically covers its month folders.<\/p><\/dd>\n<dt id=\"is%20it%20suitable%20for%20a%20large%20media%20library%3F\"><h3>Is it suitable for a large Media Library?<\/h3><\/dt>\n<dd><p>Yes. Recommendations, regeneration, scanning, manifest creation, and deletion use persistent jobs and bounded batches that can resume after interruption.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20close%20the%20page%20during%20a%20job%3F\"><h3>What happens if I close the page during a job?<\/h3><\/dt>\n<dd><p>The job state remains in the database. Reload the admin page to resume it. Cancelling stops future batches while retaining an audit record.<\/p><\/dd>\n<dt id=\"does%20orphan%20discovery%20delete%20disk-only%20files%3F\"><h3>Does orphan discovery delete disk-only files?<\/h3><\/dt>\n<dd><p>No. Unmapped disk-only filename matches are reported and skipped by default. Only approved, validated manifest items are deleted.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20for%20woocommerce%20sites%3F\"><h3>Is it safe for WooCommerce sites?<\/h3><\/dt>\n<dd><p>The plugin recognizes WooCommerce-related sizes in Recommendations, but storefront requirements vary. Verify the sizes used by your store before disabling or pruning them.<\/p><\/dd>\n<dt id=\"does%20disabling%20a%20size%20unregister%20it%20from%20a%20theme%20or%20plugin%3F\"><h3>Does disabling a size unregister it from a theme or plugin?<\/h3><\/dt>\n<dd><p>No. It changes which registered sizes WordPress generates for future uploads. The original registration remains in place.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0 (Jul 17, 2026)<\/h4>\n\n<ul>\n<li>Added persistent jobs with ownership, expiry, cancellation, locking, resume, and per-item errors.<\/li>\n<li>Split cleanup into scanning, immutable manifest review, explicit approval, and resumable deletion.<\/li>\n<li>Added searchable multi-folder selection and limited scans to selected upload folders.<\/li>\n<li>Improved force regeneration, batched Recommendations, admin responsiveness, and automated release coverage.<\/li>\n<\/ul>\n\n<p>See <code>changelog.txt<\/code> for the complete release history.<\/p>","raw_excerpt":"Regenerate WordPress thumbnails, control image sizes, and safely clean generated files with resumable, review-first jobs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/252904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=252904"}],"author":[{"embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/yoohw"}],"wp:attachment":[{"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=252904"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=252904"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=252904"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=252904"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=252904"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/zgh.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=252904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}