How it works

Converter Suite is built around a simple constraint: conversion should happen on the device that already has the file. For the HEIC converters, the page reads selected files with the browser File API. The file bytes are transferred to a Web Worker, where a WASM build of libheif decodes the HEIC image away from the main UI thread.

After decoding, the worker gets one RGBA frame. That frame is drawn into an OffscreenCanvas and encoded by the browser as the requested output format. JPG output uses the worker-owned quality setting; PNG output asks the browser for lossless PNG encoding. The worker checks the MIME type returned by the browser before it hands the result back, because browser encoders can fall back when a requested format is unsupported.

Downloads are created as blob URLs. That means the converted file is a browser-managed object in local memory, not a file returned by an upload service. During conversion there should be no network requests for the image. You can verify that directly: open DevTools, switch to the Network tab, select a HEIC file, and watch the conversion run. The page still needs its bundled JavaScript and WASM to load, but the image conversion path itself does not call a server.

Audio and short-video converters use ffmpeg compiled to WebAssembly. The ffmpeg engine is bundled with the site, downloads from the same origin on the first media conversion, and then runs in the browser to extract, remux, decode, and encode without uploading the selected media file.

PDF conversion uses document-specific browser libraries. JPG and PNG files are wrapped into one-page PDFs with pdf-lib. PDF pages are parsed by pdf.js in its own worker, then each page is drawn through the browser canvas API before it is encoded as JPG or PNG. That canvas drawing step runs on the main thread, so very large pages and PDFs above the page-count limit are refused before unsafe raster work begins.

There is also an explicit memory budget. Compressed HEIC files can expand into much larger decoded RGBA buffers, and browsers do not all fail gracefully when a tab runs out of memory. Converter Suite estimates the decoded frame size and refuses images above the configured budget instead of trying to process them and risking a crash. That refusal is a tradeoff, but it is easier to reason about than a frozen tab or a half-finished download.

The privacy claim is meant to be inspectable, not taken on trust. Use DevTools, block network access after the page loads, or review the source. The implementation is intentionally small so the conversion path can be audited without chasing analytics, account flows, service workers, or upload endpoints.