RotatePicturesA PictureEditor.com tool
The turn is computed on this device; the file never leaves this tab.

Rotate a folder of pictures by their tags

Read every file’s Orientation field, turn only the ones that claim to be turned, and hand back a ZIP with a line saying what happened to each.

Drop a photo, or paste one.Choose as many as you like. Everything is read here, in this tab, one file at a time.

Nothing to hand?

The table of files, their tags and their outcomes appears here. Nothing is uploaded to produce it and nothing is queued anywhere but in this tab.

Reading first, deciding second

A folder of scans and a camera-roll dump share a shape: nearly every file carries the same defect, and a few of them do not. The expensive way to handle that is to decode everything and re-encode everything, which spends a generation of quality on the files that were already fine. This page reads the orientation field of every file first — a few hundred bytes from the front of each — and only then decides which ones to open.

The table above is the deliverable as much as the archive is. It lists every file, the value the queue read it as, and what was done about it, so that a queue of forty is auditable rather than a black box that returns a ZIP. A file carrying no orientation field at all is read as upright and shown that way, which is the same instruction and the same outcome, though not the same file. When the run finishes, the summary line underneath reads like the account a person would give: how many were already upright, how many were corrected and from what, and how many could not be processed and were passed through.

What the queue refuses to do

Questions about correcting a queue

Are the files that were already upright re-encoded too?
No, and that is the point of reading the tags first. A file whose orientation field already reads 1 needs nothing done to it, so it is copied into the archive byte for byte and never touches an encoder. On a typical camera-roll dump that is most of the queue, and re-encoding all of it to change nothing would spend a generation of quality on every one.
What happens to a file with no orientation tag?
It comes back exactly as it went in — copied into the archive byte for byte, never decoded and never touched by an encoder. What the table cannot do is tell you that is what you had: the reading pass takes an absent field and a field that reads 1 as the same instruction, upright, and the row says upright for both. Only the orientation page separates the two cases, because only there is the metadata block read in full. The outcome is identical either way, because a portrait photograph and a photograph lying on its side are indistinguishable to anything short of understanding what is in the frame, and this tool does not understand what is in the frame. Guessing would silently turn a perfectly good vertical picture on its side, which is a worse failure than doing nothing.
How many files can it take?
Files are decoded one at a time rather than all at once, so the queue length is limited by patience rather than by memory — but the finished archive is assembled in this tab before it is handed to the browser, so a few hundred large photographs will eventually exhaust the tab. If the assembly step reports that it ran out of room, run the queue in two halves and you will get two archives.
Can I turn every file by a fixed angle instead of by its tag?
Not in this version. Batch by fixed angle and batch straightening with a review grid are real features with real edge cases, and half of either would be worse than neither, so the queue does the one job it can do exactly right: apply what each file already claims about itself.

To see the reasoning behind the repair before running it on forty files, open one on the orientation page, which reports what it found and lets you choose. The workflow for a scanner in particular is set out in the explainer.