How it works
Your photos never leave your device
Most converters upload your photos to a server, convert them there and send them back. We don't have a server that can even receive them. Here is what happens instead.
Your device
Everything happens here.
- 1photo.heic
- 2libheif decoder (WebAssembly)
- 3Canvas: rotate, crop, resize
- 4Encoder: JPG, PNG, WebP, AVIF or PDF
- 5photo.jpg in your Downloads
Our servers
They hand you the app, then step aside.
- Send you this page and the decoder, once
- Count anonymous visits (Google Analytics)
- Receive your photos
- Store, view or process your photos
- See file names, locations or camera data
01
Your browser reads the file
When you drop a photo, the browser hands the bytes to this page. There is no upload form and no server endpoint to send them to.
02
A HEIC decoder wakes up on your device
We ship libheif, the same open source decoder used by GIMP and ImageMagick, compiled to WebAssembly. It runs in background workers on your own CPU.
03
Pixels are edited on a canvas
Rotation, cropping, resizing and colour handling happen on an offscreen canvas. Several workers run in parallel, so batches stay fast.
04
The new file is saved by your browser
JPG, PNG, WebP, AVIF, HEIC or PDF is encoded locally and handed straight to your Downloads folder. The original never leaves your machine.
Don't trust us. Check.
"No uploads" is easy to claim. Here are two ways to prove it in under a minute.
Turn off your internet
Open any tool, wait for the page to finish loading, then switch on airplane mode. Convert a photo. It still works, because nothing needs the network.
Watch the network tab
On a computer, press F12 (or ⌥⌘I on a Mac), open Network, then convert a 5 MB photo. You will not see a single request anywhere near that size.
What we use
- libheif decodes HEIC and HEIF, including 10-bit, grid and multi-image files from iPhones and Android phones.
- Your browser's own encoders write JPG, PNG and WebP. Where Safari lacks WebP, we fall back to Google's libwebp in WebAssembly.
- AVIF uses libaom via jSquash. HEIC output uses libheif with the kvazaar encoder.
- PDFs are assembled with pdf-lib, and batch downloads are zipped on the fly.
- Colour profiles (including iPhone Display P3) and the camera data you choose to keep are copied across by our own small metadata writer, so colours look right and nothing extra sneaks in.
Why the first conversion takes a second
The decoder is about 1.5 MB. Your browser downloads it the first time you use a tool, then keeps it in its cache, so later visits start instantly, even offline.
Limits
Everything runs on your device's memory, so very large batches on an older phone can be slow. iPhones and iPads cap a single canvas at about 16.7 megapixels, so very large panoramas are scaled down to fit when you convert them there. On a computer there is no practical limit.