RotatePictures

Batch rotate imagesRotate a whole folder at once

Drop lots of photos and get them all back upright in one ZIP.

or drop it here — pasting works too

Choose as many as you like. Every tag is read here, in this tab, and nothing is queued anywhere else.

— sub-folders are kept as folders inside the ZIP.

No photo handy?

FreeNo sign-upPhotos stay on your device

Read every file's orientation field first, compose the turn you asked for onto what that field already says, and hand back a line per picture saying how far its array moved and whether anything was re-encoded.

The table of files, the tag each one arrived with and the distance each array travelled appears here. Nothing is uploaded to produce it.

Choose photo

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 treated as upright and its row says “No tag”, so it is never confused with a file whose tag reads 1. 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 files with no tag?

A file with no orientation field is treated as already upright and its row says "No tag", so you can tell it apart from a file whose tag reads 1. It gets exactly the turn you chose for the folder and nothing more — with no turn chosen it is copied into the archive byte for byte, never decoded. It is never turned on a guess, 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.

Batch
Photographic visual for Batch