A drop-in, local-first HEIC → JPG converter for any blog or docs site.
What you get. A small interactive widget where your readers drop a HEIC photo and download a JPG — converted entirely inside their browser. No upload, no signup, no rate limit. Works on desktop and mobile.
What it costs you. About 1.5 KB gzipped on your page (the script-tag loader). The 340 KB HEIC decoder loads inside the iframe in its own browser context — it does not hit your Core Web Vitals.
Live preview
Iframe embed (recommended)
Simplest, fully isolated. Paste this anywhere raw HTML is allowed.
The widget includes a small "Powered by Free File Converter" link in the bottom-right corner. This is required for free use — it's how we sustain the project (no ads, no paywall, no upload servers). Please don't hide or modify the badge.
Click-throughs from the badge are attributed via the ref you set, so different embeds across the same site (or different sites) can be tracked separately.
What gets sent to our servers?
By design, the file the reader converts never reaches our servers. Conversion runs entirely in the iframe via the open-source heic2any decoder.
Optional anonymous counter pings (one per session-start, one per successful conversion) feed our public trust counters at the bottom of freefileconverter.ai. They contain no filenames, no image bytes, and no IP-derived info beyond what Vercel logs at the edge by default.
Browser compatibility
Modern Chrome, Edge, Firefox, Safari (desktop + mobile). When required APIs (Canvas / Blob / FileReader) are unavailable, the widget shows a fallback message linking to the full converter.
FAQ
Why iframe instead of inline?
Isolation. No CSS conflicts, no globals, sandbox boundary courtesy of the browser. Drop it in, forget about it.
Will it work on WordPress / Ghost / Substack?
Yes. WordPress: paste into a Custom HTML block. Substack: use an embed block, paste the iframe.
Can I host the widget on my own CDN?
Not yet. Once we open-source the embed repo, self-hosting will be supported with a single config flag.
My users hit "Conversion failed" — what's wrong?
99% of the time the file isn't actually HEIC — some apps rename .jpg to .heic by mistake. Ask the reader to confirm the file is from an iPhone camera roll or a recent Mac screenshot.
Will the script-tag loader bloat my page?
It's ~1.5 KB gzipped. The heavy decoder loads inside the iframe in its own context and doesn't touch your critical path.