resiz[ly]A PictureEditor.com tool

Two hundred files in a browser

A tab is a real program with a budget somebody else set. This is where that budget runs out, what it looks like when it does, and the size of job at which you should be writing a script instead.

The only arithmetic that matters

A photograph on disk is compressed. To change its size it has to be uncompressed into a grid of pixels, and that grid is four bytes per pixel no matter how small the file was. Everything about the ceiling follows from that one conversion:

a 12 MP phone photo   4032 × 3024  =  12.2 M pixels  ≈  49 MB decoded
a 24 MP camera file   6000 × 4000  =  24.0 M pixels  ≈  96 MB decoded
a 45 MP camera file   8192 × 5464  =  44.8 M pixels  ≈ 179 MB decoded

on disk, each of those is between 3 MB and 60 MB

The run opens several files at once — one per worker, up to six — so the number to hold in your head is that product. Six 24-megapixel files being worked on simultaneously is about 600 MB of live pixels before the outputs, which is comfortable on a laptop with headroom and is most of a phone’s entire allowance.

Three things deliberately do not scale with the length of the queue, and they are why a thousand files is possible at all:

  • Queuing reads sixty-four kilobytes per file and decodes nothing. A folder of a thousand costs a few megabytes to list, measure and plan.
  • A source is decoded once and all of its outputs are written from that one decode before the worker lets go of it. Four outputs per photograph cost one decode, not four.
  • Finished outputs go straight into the archive as handles the browser stores for itself. The ZIP grows on disk rather than in the tab.

So queue length is cheap and pixel dimensions are expensive. Two thousand web-sized images are easier than eighty raw-converted 45-megapixel files, and file count is the wrong thing to be nervous about.

Where each machine gives up

MachineComfortablePushing itWhat running out looks like
Laptop or desktop, 16 GBa few hundred camera filesa thousand or moreSlowing down, then a failed row with a reason. The run continues.
Older machine, 4–8 GBa hundred or soa few hundredSwapping. Everything on the machine gets slow before anything here fails.
Chromebook or low-end tableta few dozena hundredIndividual large files refused; small ones keep going.
iPhone or iPada few dozen small filesdo notThe tab is discarded. No error, no partial archive, the page simply reloads.

The last row is the one that costs people work, and it is not a matter of degree. Every other platform here degrades: a file fails, the ledger says why, and the remaining files are written. Safari on iOS reclaims the whole tab instead, and it does so without telling the page first, so there is nothing to catch and nothing to save. A run that would take three minutes on a laptop can end at file 140 on a phone with nothing written at all.

Refusals are not failures

A single image past about a hundred megapixels is refused on its own line, mid-run, with its reason in the ledger, and the rest of the queue carries on. Above a lower threshold the run asks once, before it starts, whether it may work from lighter copies of the largest sources — outputs smaller than the copy are identical either way. Both of those are the run protecting itself rather than the run breaking, and the distinction is visible in the ledger: a refusal has a reason next to it.

A tab you cannot see is barely running

Browsers throttle background tabs hard, and that is not a setting anyone can turn off from inside a page. A run that is producing four files a second with the window in front can drop to a trickle when you switch to your mail, and it will pick up again the moment you switch back. Nothing is lost; it simply stops making progress, which looks identical to being stuck if you check on it an hour later.

  • Leave the window in front and the machine awake for the duration of a large run.
  • A second window over the top is fine. It is tab visibility that matters, not focus.
  • If you need the machine, pause instead. Whatever was in flight lands, and resuming picks up exactly where it stopped.

Where a script wins

It is worth being blunt about this, because the alternative to being blunt is someone spending an afternoon fighting a tab. Command-line tools on the same machine use every core, decode straight from disk without a browser’s safety margins, and have no tab to lose.

The jobBetter answerBecause
A folder, once, on a machine you do not administerthis pageNothing to install and nothing to ask permission for.
The same folder every week, by youeitherA recipe here, or six lines of shell. Whichever you will still understand in March.
The same folder every week, by someone elsethis pageA rule stack can be handed to a person who has never opened a terminal.
Ten thousand filesa scriptQueue length is cheap here, but an hour-long run in a tab is a bad bet.
Anything on a server, or in CIa scriptThere is no browser, and this page is a browser program.
Formats a browser cannot read, such as rawa scriptThe decoding happens in the browser, so its format list is the whole list.

What this page has that a script does not is the plan: the full list of files that will be written, with their names and sizes, before anything is written. A script that produces the wrong six hundred files has cost more than doing it by hand, and reading the answer first is cheaper than running it twice.

None of these numbers are promises

The figures above are arithmetic and experience, not guarantees. How much a tab may hold depends on the browser, the operating system, what else is open and how much physical memory the machine has, and it can change with an update you did not ask for. Treat them as the right order of magnitude and the ledger as the truth: it says what was written, what was skipped and why, and it is the only account of a run worth trusting.

Reference

Is there a hard limit on how many files I can queue?

Five thousand. Past that the queue itself — the list, the filter, the plan rows — costs more than the pictures do, and a page that accepts a drop it cannot survive is worse than one that refuses. Under that ceiling nothing is refused in advance; the limits that matter are the ones in this guide and they depend on the machine.

Can I put a folder of iPhone HEIC files through this?

Yes, and expect the first of them to lag. Nothing in the browser reads HEIC unaided, so that file waits on a WebAssembly codec being fetched and started before any pixels exist, and the ones behind it reuse what is already loaded. Decoding then happens on the main thread, one picture at a time instead of across the worker pool, so a queue of mostly phone photos occupies the machine several times longer than the same count of JPEGs would.

Can I close the laptop lid while a run is going?

No. Sleeping suspends the tab, and whether it resumes cleanly, resumes slowly or is discarded outright is the operating system's decision rather than this page's. Pause the run before you close the lid and resume it afterwards; everything already written is still in the archive.

Does the archive need as much free memory as it is large?

No. Outputs are appended to the archive as they land and held as blob handles, which the browser backs with its own disk storage rather than keeping in the tab. Peak memory is roughly one decoded source per worker, not the size of the finished ZIP, which is why a four gigabyte archive is possible on a machine with far less than that free.

The catalogue-shaped version of this problem is in the product photo guide, and what the tool does with what it opens is on the front page.