WordPress image sizes are the reason a single upload turns into five or six files on your server. When you add one photo, WordPress automatically generates several scaled copies so it can serve the right one for each layout and screen. Here is what each size is for, how to control them, and why your disk fills up faster than you expect.
The default WordPress image sizes
On a fresh install, WordPress registers these sizes and generates them from every uploaded image:
- thumbnail: 150x150, hard cropped to an exact square.
- medium: max 300px on the longest side, proportions kept.
- medium_large: max 768px wide, proportions kept.
- large: max 1024px on the longest side, proportions kept.
- full: the original file you uploaded, untouched in dimensions.
There is also a quiet one. Since WordPress 5.3, any image wider or taller than 2560px gets a “scaled” version capped at 2560px, and that scaled copy is what gets used as the full size on the front end. Your true original is still stored, just not served by default.
So one large upload can produce thumbnail, medium, medium_large, large, the 2560 scaled file, and the original. That is the disk usage tradeoff: more sizes means faster, sharper pages but more storage.
Why WordPress makes so many copies
These copies power responsive images. WordPress builds a srcset attribute listing the available widths, and the browser picks the smallest file that still looks crisp for the visitor’s screen. A phone grabs the medium file instead of downloading a 2MB original. That is good for performance, but it means every size you register multiplies across every upload.
To estimate the storage and dimensions before you commit, run your numbers through the WordPress Image Size Calculator. It works out scaled dimensions and helps you see what each registered size will produce.
How to control your image sizes
Three of the sizes are editable without code. Go to Settings > Media in your dashboard, where you can set the thumbnail, medium, and large dimensions, and toggle whether thumbnails are cropped to an exact square.
For custom sizes, your theme registers them in functions.php:
add_image_size( 'card-thumb', 600, 400, true );
The last argument, true, hard crops to exact dimensions. Leave it false to scale proportionally. To use the new size in a template, call the_post_thumbnail( 'card-thumb' ).
Here is the practical workflow:
- Plan your dimensions with the WordPress Image Size Calculator.
- Set thumbnail, medium, and large under Settings > Media.
- Add any custom sizes with
add_image_size()in your theme. - Upload a test image and confirm the right files appear in
/wp-content/uploads/.
Changes only affect new uploads
This trips up almost everyone. When you change a size in Settings > Media or register a new one with add_image_size(), WordPress applies it only to images uploaded afterward. Existing images keep their old set of copies.
To apply new sizes to your back catalog, regenerate thumbnails. The “Regenerate Thumbnails” plugin does it from the dashboard, or WP-CLI handles it in one command:
wp media regenerate
Regenerating rebuilds every registered size for every existing image, which can take a while and, again, eats disk space. Only register sizes you will actually use in your templates.
Related tools
- Image Resizer - resize a photo to exact pixels before you upload it.
- Image Compressor - shrink file size so your uploads load faster.
- PNG to WebP Converter - convert to WebP for smaller, sharper images.
Know your default sizes, register only what you use, and regenerate when you change them.