Toolkitly

Batch Image Processor

Resize, convert and rename a whole folder of images in one pass, then download the lot as a ZIP. Free, no sign-up, no upload — every file is decoded and re-encoded in your browser.

Nothing is uploaded — every file is decoded and re-encoded inside your browser.

How to batch process images

Four steps, and a list showing exactly what will be written before anything is.

  1. 1Add the filesDrop them in, pick them from the dialog, or choose a whole folder. They are sorted numerically by name, so asset_2 comes before asset_10.
  2. 2Choose how to resizeFit inside a box caps both dimensions without distorting anything — the mode you want nine times out of ten. Scale by a factor is right when every source is already the size you meant it to be.
  3. 3Pick a format and a name patternKeep the original format, or convert everything to PNG, WebP or JPEG. The pattern takes {name}, {i0}, {w} and {h}.
  4. 4Check the list, then run itEvery row shows the output name and size before you commit. Run the batch and the ZIP downloads when it finishes, with a before-and-after byte count.

Fit, scale or exact

Fit inside a box constrains both axes and keeps the aspect ratio, so "max 512×512" means what everyone assumes it means: a wide image is limited by its width, a tall one by its height, and neither is stretched. By default images already smaller than the box are left alone — enlarging them would invent detail that is not there.

Scale by a factor multiplies every image by the same amount. Use it when the sources are already consistent — halving a folder of 2× assets, say — and avoid it on a mixed batch, where it just preserves the inconsistency at a new size.

Exact size forces every image to identical dimensions regardless of its aspect ratio, which distorts anything that does not already match. It is the right answer for icon sets and the wrong answer for almost everything else.

Choosing an output format

PNG

Lossless, alpha, universally supported. The right default for sprites, tiles and anything going into an engine. Larger files than the alternatives.

WebP

Lossy or lossless, alpha, typically 25–35% smaller than PNG at the same visual quality. The right default for anything shipped over the web.

JPEG

Lossy, and no alpha channel at all. Fine for backgrounds and photographic art, wrong for anything with transparency or hard edges — the compression puts a halo around every outline.

Names that survive contact with a file system

Two things go wrong with batch renaming, and both are silent.

The first is sort order. Without zero padding, asset_10 sorts before asset_2 in every file browser and most asset importers. The {i0} token pads to the width of the largest index in the batch, so a hundred files come out 001 to 100 and stay in order everywhere.

The second is collisions. Strip the extension off hero.png and hero.jpg, convert both to WebP, and you have two files called hero.webp. A ZIP archive will hold both entries quite happily — and the extractor will keep whichever it reads last, so your batch of 40 comes out as 39 with nothing to say why. Collisions are resolved with numbered suffixes before anything is written, comparing case-insensitively because Windows and macOS do.

When you need this

Trimming an asset pack down

Marketplace packs ship at the largest size anyone might want. Fit the whole folder into the size you actually use and cut the project weight.

Preparing web builds

Convert a texture folder to WebP in one pass. The byte count at the end tells you whether it was worth it.

Normalising inconsistent sources

Assets from three different artists at three different sizes, renamed and resized into one convention before they reach the repository.

Screenshots for a store page

A folder of captures resized to a fixed maximum, converted to JPEG, and numbered in order.

Working with pixel art

Set sampling to nearest and scale by whole numbers. Anything else blurs the art or makes some pixels wider than others — the Pixel Art Resizer goes into why, and handles the single-image case with a preview.

Note that fit inside a box almost never produces a whole-number scale, because it derives the ratio from whatever the source happens to be. For a folder of pixel art, scale by a factor instead.

Frequently asked questions

How do I resize multiple images at once?

Drop the whole folder in, choose a resize mode — fit inside a box is the usual one — and download the result as a ZIP. Every file is processed in your browser, one after another, with the output name and size shown for each before you commit.

Is there a limit on how many files I can process?

300 per batch. That is a deliberate ceiling rather than a technical one: files are decoded one at a time so memory stays flat, but a browser tab is still a browser tab, and a batch that takes ten minutes is a batch you will close halfway through.

Should I convert to WebP?

For anything shipped over the web, usually yes — WebP is typically 25 to 35 percent smaller than PNG at visually identical quality and keeps the alpha channel. For textures going into a game engine it matters less, because the engine re-encodes to a GPU format on import anyway.

Why did my transparent background turn white?

You converted to JPEG, which has no alpha channel at all. Every transparent pixel has to become some solid colour, and the tool lets you pick which — white by default. If you need transparency, use PNG or WebP.

What happens if two files end up with the same name?

They are given numbered suffixes automatically. This matters more than it sounds: a ZIP will happily hold two entries with the same name, and the second silently replaces the first, so the batch comes out short with nothing to explain it. The comparison ignores case, because Hero.png and hero.png collide on Windows and macOS.

Should I use nearest or smooth sampling?

Nearest for pixel art — it copies whole pixels and never invents a colour, so edges stay hard. Smooth for photographs, rendered art and UI screenshots, where averaging neighbouring pixels is what you actually want.

Are my files uploaded to a server?

No. Every file is decoded, resized and re-encoded with the Canvas API inside your browser, and the ZIP is built there too. Nothing leaves your machine, which also means there is no file size limit imposed by an upload.

Related tools