NoHEIC

All tools

How the Converter Works Without Uploading

The converter works entirely inside your browser tab: your photos are read, decoded, converted and saved on your own device, and the page is not allowed to send them anywhere. Here is each step, and how to check it yourself.

What happens to a photo, step by step

  1. You choose a photo. The browser gives the page the file's bytes on your device. Nothing is sent over the network.
  2. The photo is decoded. Safari (on Mac, iPhone and iPad) can read HEIC by itself, so it does this step. Chrome, Edge and Firefox cannot, so they use libheif, an open-source HEIC decoder, compiled to WebAssembly. Your browser downloads it once from this website, like any other part of the page, and keeps it in its cache.
  3. The picture is drawn and saved in the new format. The decoded picture is drawn onto a canvas (an in-memory drawing surface) and the browser saves it as JPG, PNG or WebP. The rotation is applied, so it comes out upright.
  4. The photo details are copied back in. The date taken, camera and, unless you remove it, the location are written into the new JPG or PNG, so it sorts and searches like the original.
  5. The download is built in the tab. A batch is packed into one ZIP, and a PDF is assembled page by page, both in the browser, using the open-source fflate and pdf-lib libraries served from this site.
  6. The file goes to your downloads folder. It is created on your device and never leaves it.

The heavy work runs in background workers, so the page stays responsive. On our test Mac on 29 October 2026, Chrome converted a 12 megapixel iPhone-size HEIC in 0.8 seconds, a 48 megapixel one in 3.3 seconds, and a batch of twenty 12 megapixel photos in about 4.5 seconds. Phones are slower, but nothing waits in an upload queue.

The rule that blocks uploads

Every page on this site is sent with a Content Security Policy, a security rule that the browser itself enforces. This is the exact text:

default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; worker-src 'self'; connect-src 'self'; img-src 'self' blob: data:; style-src 'self'; font-src 'self'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'

What the important parts mean:

Part What it means for your photos
connect-src 'self' The page may only make network requests to this website. It cannot send data to any other server
script-src 'self' 'wasm-unsafe-eval' Only code from this website can run. The WebAssembly permission is what lets the libheif decoder work
form-action 'none' The page cannot submit forms anywhere
img-src 'self' blob: data: Images can only come from this site or from files made on your device
frame-ancestors 'none' Other sites cannot embed this page inside theirs

Could the page still send photos to this website? The converter code has no upload function, and the site has no server code that accepts files: it is a set of static pages. The policy also means no outside tracking or ad scripts could run here even if someone tried to add them.

Check it yourself

The Airplane Mode test (any device):

  1. Open the converter and wait for the page to load.
  2. Turn on Airplane Mode, or switch off Wi-Fi and unplug the network cable.
  3. Convert a few photos. It still works, because nothing needs the internet.

In Chrome, Edge or Firefox, convert one photo before going offline so the decoder is cached. Safari needs no download.

The developer tools test (computer):

  1. Open the converter, then open developer tools (F12 on Windows, or Option, Command, I on a Mac), and click the Network tab.
  2. Convert some photos.
  3. Watch the list. You will see the page's own files load from this site, and no request carrying your photos.

Limits we want you to know about

  • In Safari and on iPhone, this converter saves photos larger than about 16.7 megapixels at that size, to stay inside the memory Safari gives a web page. A 48 MP photo is saved at about 16.7 MP there. Chrome, Edge and Firefox on a computer keep the full size, and so does the iPhone app.
  • WebP output does not work in Safari or any iPhone browser. Use Chrome, Edge or Firefox for HEIC to WebP.
  • Phones have less memory. Convert 50 to 100 photos at a time on a phone.

No analytics, no cookies, no ads

The site has no analytics, no tracking scripts, no cookies and no ads, on the converter pages or anywhere else. See the privacy policy.

Questions

Is anything uploaded when I convert?

No. The photos are decoded and converted in your browser tab. The page's security policy only allows connections back to this website, and the converter has no upload code.

What is downloaded from this website?

The page itself, its styles and scripts, and, in browsers other than Safari, the libheif decoder. These are the same for everyone and contain nothing about you.

Does it work offline?

Yes, once the page has loaded. In Chrome, Edge or Firefox, convert one photo first so the decoder is saved in the browser cache.

Why are my 48 MP photos smaller after converting on iPhone?

In Safari and on iPhone, this converter saves photos over about 16.7 megapixels at that size, to stay inside the memory Safari allows a page. Use Chrome, Edge or Firefox on a computer, or the iPhone app, to keep full size.

On iPhone or iPad?

Convert right from the Photos app

The NoHEIC app adds "Convert" to the share sheet: select photos in Photos, tap Share, pick JPG, PNG or PDF. It keeps the date taken, so converted photos stay in order. No ads, no subscription: free for up to 25 photos at a time, $4.99 once for unlimited. Coming to the App Store soon.

See what the app does
  • Hundreds at oncefrom the photo picker, no library access needed
  • Dates and names keptIMG_1234.HEIC becomes IMG_1234.jpg
  • Fits upload formsset a size limit like "under 2 MB"