HEIC to JPG
Hundreds of iPhone .heic photos to JPG or PNG, one ZIP, names and capture dates kept. Nothing is uploaded. No account.
Drop .heic photos, or a folder of them
They stay in this tab.
The photos stay in this tab
Most HEIC converters are a form in front of a server. You drop a holiday roll, they store it, they re-encode it, and then they ask for an account before you can have your own files back. This page does not do that. Once the JavaScript has loaded, the files stay in memory here.
Mixpanel and Google Analytics load with the rest of Softery.io. They see that someone opened the tool. They do not get the file names or the bytes. If you came here because a privacy page promised zero third-party scripts, that is not this site, and I will not write that sentence.
One zip, the names you already have
Drop a folder of iPhone shots. Pick JPG or PNG. The page converts them one by one so the progress bar can paint, then hands you a single zip. One photo downloads as that photo. Two or more come back as heic-to-jpg-12.zip, or png in the name if you picked png.
The stem stays. IMG_1234.HEIC becomes IMG_1234.jpg. A collision gets a number, not a silent overwrite. Capture dates ride along as JPEG EXIF and as the zip entry date, which is how PNG keeps a date at all.
The 200 photo wall
A thread on r/ios asked for software to bulk convert about 2,400 images. The post sat at 126 points with 93 comments. The sites those comments name still stop you: a prompt per file, a 200 photo cap, a signup, or a paid Windows codec. I built this page so the cap is the memory in the tab, not a counter on someone else's form.
I am not going to tell you 8,000 photos will feel instant. A huge folder can hitch the tab. There is still no daily quota and no 200 file wall. If you want the longer version of why those caps exist, I wrote it up in The Site Capped Me at 200 Photos.
What this tab cannot open
The decoder is libheif, loaded as a WASM module the first time you convert. Safari 17 and later can often decode HEIC without that module. Chrome and Firefox need it. libheif is LGPL-3.0. It is not compiled into the first paint. It arrives when you actually convert.
Some iPhone shots use HEVC inside the HEIC container in a way this build cannot decode. That file stays in the list as failed. The rest still download. I would rather show a failed row than a black JPEG.
Common questions
Does this page upload my photos?
No. The files stay in this tab. The decode runs in JavaScript here, after a WebAssembly decoder loads. Mixpanel and Google Analytics load with Softery.io. They see that someone opened the tool. They do not get file names, EXIF, or the bytes.
Is there a 200 photo cap?
No. heictojpg.com stops at 200 and wants an account past that. This page does not count files and does not ask you to sign in. A huge folder can hitch the tab, because the work shares memory with the rest of the page. There is no daily quota.
Do the file names and capture dates survive?
Yes. IMG_1234.HEIC becomes IMG_1234.jpg. On a JPEG we copy DateTimeOriginal back on after the re-encode, and we set Orientation to 1 because the pixels are already rotated. The ZIP entry uses that same capture date, so Finder shows it on PNG too.
Why did one photo fail?
Some iPhone HEIC files wrap HEVC in a way this libheif build cannot open. That file stays in the list as failed. The rest still download. A damaged file fails the same way. This page will not pretend it decoded something it did not.
Nearby tools
If the next job is a packet of pages, Merge PDF stays in the tab the same way. Unit Converter is the page I wanted when a search result put an ad over 350 F. Password Generator makes the password in this tab and never sends it.