Skip to main content

wp media regenerate

Overview

Regenerate all cropped and scaled image sizes for your media library. Essential after changing image size settings, switching themes, or adding new custom image sizes — ensures every existing image has the correct derivative sizes on disk.

What It Does

wp media regenerate reads each attachment from the database, locates the original file on disk, and re-runs WordPress's wp_generate_attachment_metadata() to create all required derivative sizes (thumbnail, medium, large, custom). It replaces outdated or missing size files.

Syntax

wp media regenerate [<attachment-id>...] [OPTIONS]

Options

FlagDescription
[ATTACHMENT_ID...]One or more attachment IDs to regenerate (default: all)
--image-size=SIZERegenerate only a specific image size
--skip-deleteSkip deleting old thumbnail files before regenerating
--only-missingOnly regenerate sizes that don't already exist on disk
--yesSkip confirmation prompt

Basic Usage

Regenerate all attachments (with confirmation)

wp media regenerate

Output:

Found 342 images to regenerate.
1/342 Regenerated thumbnails for "hero-banner.jpg" (ID 101).
2/342 Regenerated thumbnails for "product-shot.jpg" (ID 102).
...
342/342 Regenerated thumbnails for "footer-logo.png" (ID 442).
Success: Regenerated 342 of 342 images.

Regenerate all without confirmation prompt

wp media regenerate --yes

Regenerate a single attachment by ID

wp media regenerate 101

Output:

1/1 Regenerating thumbnails for "hero-banner.jpg" (ID 101).
Success: Regenerated 1 of 1 images.

Regenerate only missing sizes (fastest, safest)

wp media regenerate --only-missing --yes

Output:

Found 342 images to regenerate.
Skipping "hero-banner.jpg" (ID 101) — all sizes present.
1/1 Regenerating thumbnails for "new-upload.jpg" (ID 443).
Success: Regenerated 1 of 342 images.

Regenerate only a specific image size

wp media regenerate --image-size=woocommerce_thumbnail --yes

Output:

Found 342 images to regenerate.
1/342 Regenerating thumbnails for "product-shot.jpg" (ID 102).
...
Success: Regenerated 342 of 342 images (woocommerce_thumbnail only).

Real-World Scenarios

Scenario 1: After adding a new custom image size

You added a new size in your theme:

add_image_size('feature-card', 800, 450, true);

Now regenerate all media to create the new crop:

wp media regenerate --image-size=feature-card --yes

Scenario 2: After switching themes

Different themes register different image sizes. After switching, regenerate everything to ensure the new theme's sizes exist:

wp theme activate new-theme
wp media regenerate --yes

Scenario 3: After server migration (missing crops)

After migrating from one server to another, some derivative images may be missing. Regenerate only missing sizes to avoid re-processing every image:

wp media regenerate --only-missing --yes

Scenario 4: Large library — regenerate in batches

For very large libraries (10,000+ images), regenerate in batches to avoid timeouts:

#!/bin/bash
# Regenerate in batches of 100
IDS=$(wp post list --post_type=attachment --format=ids --posts_per_page=100 --offset=0)
wp media regenerate $IDS --yes

IDS=$(wp post list --post_type=attachment --format=ids --posts_per_page=100 --offset=100)
wp media regenerate $IDS --yes

Scenario 5: WooCommerce product image regeneration

After changing WooCommerce image dimensions in Settings > Products > Images:

wp media regenerate --image-size=woocommerce_thumbnail --yes
wp media regenerate --image-size=woocommerce_single --yes
wp media regenerate --image-size=woocommerce_gallery_thumbnail --yes

Important Notes

BehaviourNotes
Original files are never modifiedOnly derivative/crop files are affected
Old size files are deleted by defaultUse --skip-delete to keep them
Works with external storageCompatible with S3/Cloudinary plugins that hook wp_generate_attachment_metadata

Best Practices

  1. Use --only-missing on large libraries — dramatically faster; only processes images that actually need regeneration.
  2. Use --image-size when you only added/changed one size — skip regenerating sizes that are already correct.
  3. Run during off-peak hours — CPU-intensive on large libraries.
  4. Take a database backup before running on production.

Troubleshooting

ProblemCauseFix
Warning: No file found for attachmentOriginal file missing from serverCheck wp-content/uploads/ or restore from backup
Sizes not generatedPHP memory_limit too low for large imagesIncrease memory_limit in php.ini or add wp config set WP_MEMORY_LIMIT 512M
Command times outLibrary too largeProcess in batches using attachment IDs

Quick Reference

wp media regenerate --yes                            # All images
wp media regenerate <id> # Single image
wp media regenerate --only-missing --yes # Only missing sizes
wp media regenerate --image-size=thumbnail --yes # One size only

Next Steps