{"id":403418,"date":"2026-11-12T10:00:52","date_gmt":"2026-11-12T10:00:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/size-shelf-regenerate-thumbnails-image-sizes\/"},"modified":"2026-11-12T10:00:39","modified_gmt":"2026-11-12T10:00:39","slug":"size-shelf","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/size-shelf\/","author":23590357,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Size Shelf \u2013 Regenerate Thumbnails & Image Sizes","header_author":"Jean Swiegers","header_description":"Regenerate thumbnails (all, missing or chosen sizes) in resumable batches, see every registered image size and where it comes from, stop generating sizes you don't use, and safely clean up leftover size files with a dry run and undo.","last_updated":"2026-11-12 10:00:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/jeanswiegers\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"jeanswiegers","date":"2026-11-12 10:00:39","revision":3798004}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3798002,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3798002,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3798002,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3798002,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3798002,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3798002,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3798002,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3798002,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3798002,"resolution":"4","location":"assets","locale":"","width":1440,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3798002,"resolution":"5","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"Choose what to make and which images. The overview shows your library, sizes per upload and leftovers.","2":"A run in progress: live progress, counters and a filterable log. It resumes after timeouts and closed tabs.","3":"Cleanup dry run: leftover and switched-off size files, with the space they use, before anything is moved.","4":"Image sizes: every size with its source, shape and usage. Switch off the ones you don't need.","5":"The trash: restore a cleanup batch, or delete it permanently."}},"plugin_section":[],"plugin_tags":[292213,3473,292212,30630,2956],"plugin_category":[50],"plugin_contributors":[289290],"plugin_business_model":[],"class_list":["post-403418","plugin","type-plugin","status-publish","hentry","plugin_tags-delete-unused-image-sizes","plugin_tags-image-sizes","plugin_tags-missing-thumbnails","plugin_tags-regenerate-thumbnails","plugin_tags-thumbnails","plugin_category-media","plugin_contributors-jeanswiegers","plugin_committers-jeanswiegers"],"banners":{"banner":"https:\/\/ps.w.org\/size-shelf\/assets\/banner-772x250.png?rev=3798002","banner_2x":"https:\/\/ps.w.org\/size-shelf\/assets\/banner-1544x500.png?rev=3798002","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/size-shelf\/assets\/icon.svg?rev=3798002","icon":"https:\/\/ps.w.org\/size-shelf\/assets\/icon.svg?rev=3798002","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/size-shelf\/assets\/screenshot-1.png?rev=3798002","caption":"Choose what to make and which images. The overview shows your library, sizes per upload and leftovers."},{"src":"https:\/\/ps.w.org\/size-shelf\/assets\/screenshot-2.png?rev=3798002","caption":"A run in progress: live progress, counters and a filterable log. It resumes after timeouts and closed tabs."},{"src":"https:\/\/ps.w.org\/size-shelf\/assets\/screenshot-3.png?rev=3798002","caption":"Cleanup dry run: leftover and switched-off size files, with the space they use, before anything is moved."},{"src":"https:\/\/ps.w.org\/size-shelf\/assets\/screenshot-4.png?rev=3798002","caption":"Image sizes: every size with its source, shape and usage. Switch off the ones you don't need."},{"src":"https:\/\/ps.w.org\/size-shelf\/assets\/screenshot-5.png?rev=3798002","caption":"The trash: restore a cleanup batch, or delete it permanently."}],"raw_content":"<!--section=description-->\n<p>Size Shelf regenerates thumbnails and other image sizes after you change theme, install a plugin that adds sizes, or edit a size in Settings \u2192 Media. It also tidies up afterwards: it finds the leftover files of old and switched-off sizes, shows you exactly what it would remove, and moves them to a trash you can restore from.<\/p>\n\n<p>Everything in this plugin is free. There are no locked buttons, no ads and no upgrade nags in your dashboard.<\/p>\n\n<h4>Regenerate thumbnails<\/h4>\n\n<ul>\n<li><strong>Missing sizes only, all sizes, or just the sizes you choose.<\/strong> \"Missing sizes only\" is the quick fix after a theme switch: it only makes what isn't there yet and leaves existing files alone.<\/li>\n<li><strong>Whole library, a date range, or images you pick.<\/strong> Pick images in the familiar Media Library picker, or select them in the Media Library list and use the <strong>Regenerate thumbnails<\/strong> bulk action. Every image also gets a <strong>Regenerate thumbnails<\/strong> link in the list view and a button on its edit screen.<\/li>\n<li><strong>Built for big libraries and cheap hosting.<\/strong> Runs are processed in small, time-limited batches. If PHP times out, an image crashes the editor, or you close the tab, the run is saved after every image and picks up exactly where it stopped. One broken image is logged and skipped; it never ends the run.<\/li>\n<li><strong>Progress you can trust.<\/strong> A live progress bar with time elapsed and time left, counters for regenerated, skipped and failed images, and a filterable log that shows each problem with its reason.<\/li>\n<li><strong>Never touches originals.<\/strong> Size Shelf only writes the generated sizes. Your uploaded files and the \"-scaled\" originals stay exactly as they are. Sizes larger than an image are skipped (WordPress never makes them), and a size that fails keeps its old file.<\/li>\n<\/ul>\n\n<h4>Image sizes<\/h4>\n\n<ul>\n<li><strong>Every registered size in one list<\/strong> with its dimensions, crop, a shape preview, how many images have it, and where it comes from: WordPress, your theme, or which plugin.<\/li>\n<li><strong>Switch off sizes you don't use.<\/strong> WooCommerce, page builders and themes often add sizes your site never shows. Switched-off sizes are no longer made for new uploads or regenerations. Nothing is deleted when you switch a size off.<\/li>\n<li><strong>Big image scaling.<\/strong> Turn WordPress's automatic \"-scaled\" copy of very large uploads on or off.<\/li>\n<\/ul>\n\n<h4>Delete unused image sizes, safely<\/h4>\n\n<ul>\n<li><strong>Dry run first, always.<\/strong> The scan lists leftover files from sizes that no longer exist (for example from an old theme) and files of switched-off sizes, with their total size. Nothing is moved until you confirm.<\/li>\n<li><strong>Files that are still used are kept.<\/strong> Files referenced by any image's metadata are protected, and files whose names appear in post content or custom fields (for example a hard-coded <code>photo-300x200.jpg<\/code> in an old post) are kept and listed as \"kept\".<\/li>\n<li><strong>A real trash with undo.<\/strong> Files are moved into a trash folder inside uploads, not deleted. Restore a whole batch with one click (its metadata is restored too), or delete it permanently when you're happy.<\/li>\n<\/ul>\n\n<h4>WP-CLI<\/h4>\n\n<p>Everything works from the command line too, using the same resumable engine:<\/p>\n\n<pre><code>wp size-shelf regenerate [&lt;ids&gt;...] [--missing] [--sizes=&lt;names&gt;] [--from=&lt;date&gt;] [--to=&lt;date&gt;] [--yes]\nwp size-shelf sizes \u00b7 `wp size-shelf disable &lt;size&gt;` \u00b7 `wp size-shelf enable &lt;size&gt;`\nwp size-shelf cleanup scan|list|trash|restore|empty\nwp size-shelf job [status|resume|cancel]\n<\/code><\/pre>\n\n<h4>Size Shelf Pro<\/h4>\n\n<p>An optional paid add-on for people who want this on autopilot: background and scheduled runs, regenerating a <a href=\"https:\/\/wordpress.org\/plugins\/media-shelf\/\">Media Shelf<\/a> folder, custom image sizes without code, WebP\/AVIF sizes, and per-post-type size rules. The free plugin is complete without it.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Size Shelf sends nothing anywhere. It has no tracking, no remote calls and no external services. It stores its settings and run history in your database, and cleanup records in its own table.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Size Shelf from Plugins \u2192 Add New.<\/li>\n<li>Open <strong>Media \u2192 Size Shelf<\/strong>.<\/li>\n<li>Choose what to make and which images, then click <strong>Start regenerating<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20it%20change%20or%20delete%20my%20original%20images%3F\"><h3>Will it change or delete my original images?<\/h3><\/dt>\n<dd><p>No. Size Shelf never writes to, moves or deletes the uploaded originals (or WordPress's \"-scaled\" and \"-rotated\" copies). It only makes generated sizes, and cleanup only ever moves leftover generated sizes into its trash.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20my%20host%20times%20out%20halfway%3F\"><h3>What happens if my host times out halfway?<\/h3><\/dt>\n<dd><p>Progress is saved after every image. The next batch continues after the last finished image. If an image crashed PHP, it is marked as failed and the run goes on. If you close the page, the run waits as \"Interrupted\" with a <strong>Resume<\/strong> button.<\/p><\/dd>\n<dt id=\"how%20does%20cleanup%20decide%20what%20is%20safe%20to%20remove%3F\"><h3>How does cleanup decide what is safe to remove?<\/h3><\/dt>\n<dd><p>A file is only listed if it looks like a generated size of an image (<code>name-300x200.jpg<\/code>), sits next to that image, and is not referenced by any image's metadata in that folder. Files of switched-off sizes are listed separately and only when you ask for them. Files whose names appear in post content or custom fields are kept. Every file is checked again right before it is moved.<\/p><\/dd>\n<dt id=\"where%20does%20the%20trash%20live%2C%20and%20is%20it%20removed%20on%20uninstall%3F\"><h3>Where does the trash live, and is it removed on uninstall?<\/h3><\/dt>\n<dd><p>In <code>wp-content\/uploads\/size-shelf-trash\/<\/code>. Uninstalling removes Size Shelf's settings and tables but deliberately leaves the trash folder, so files can never be lost by uninstalling. Empty the trash from the Trash tab first if you don't need it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site has its own sizes, runs, cleanup records and trash. It can be network-activated or activated per site.<\/p><\/dd>\n<dt id=\"who%20can%20use%20it%3F\"><h3>Who can use it?<\/h3><\/dt>\n<dd><p>Administrators (the <code>manage_options<\/code> capability). Developers can change this with the <code>size_shelf_capability<\/code> filter. Regenerating a single image also requires permission to edit it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%2C%20elementor%20and%20other%20plugins%20that%20add%20sizes%3F\"><h3>Does it work with WooCommerce, Elementor and other plugins that add sizes?<\/h3><\/dt>\n<dd><p>Yes. Their sizes appear in the list with the plugin named as the source, and you can switch off the ones your site doesn't use.<\/p><\/dd>\n<dt id=\"where%20does%20the%20size%27s%20%22source%22%20come%20from%3F\"><h3>Where does the size's \"source\" come from?<\/h3><\/dt>\n<dd><p>Size Shelf notes which sizes exist before and after your theme and plugins load, and matches size names to active plugins and the theme. It's a good guide, not a guarantee; sizes added in custom code may show as \"A plugin or custom code\".<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Regenerate thumbnails in bulk or per image, fill in missing thumbnails, switch off image sizes you don't use, and delete unused image sizes safely.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/403418","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=403418"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jeanswiegers"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=403418"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=403418"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=403418"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=403418"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=403418"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=403418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}