Skip to content

How to verify nothing is uploaded (don't take our word for it)

Every tool that handles sensitive files claims to respect your privacy. The claims are cheap and mostly unfalsifiable, which is why you should not extend this site any more trust than the others until you have checked. Here is how — arranged from the fastest test to the most thorough.

The useful thing about this particular claim is that it is the kind you can check. “We delete your files after 24 hours” is unverifiable from outside. “Your file is never transmitted” is visible in any browser’s developer tools.

1. The thirty-second version: pull the plug

Load this site. Transcribe a short file once, so the speech model downloads and caches. Then:

Now drop in another file and transcribe it. It works. The transcript appears, the player plays, the downloads download.

That is the whole argument, really. Software that was sending your audio somewhere cannot function with the network off. There is no cached-response trick that would let it — a transcript of a file it has never seen has to be computed on the spot.

2. Watch the network tab while it runs

More informative, still quick.

  1. Press F12 (or right-click → Inspect) and open the Network tab.
  2. Tick Preserve log so nothing disappears on navigation.
  3. Reload the page, then transcribe a file.

You will see a long list of requests. Read the Method column: every single row says GET. A GET request asks a server for something; it is how the page, the stylesheet, the script and the model weights arrive. Sending a file requires POST or PUT, and there are none.

You will also see the model download — a run of requests to /models/whisper-base.en/…, some ending in .part0, .part1 and so on. Those are the weights arriving in pieces, because the host refuses files over 25 MiB. They come down. Nothing corresponding goes up.

Sort by Size if you want the quick version: your recording is probably the largest thing in the session, and it is not in the list at all, because it was never transmitted.

3. Check where the requests go

Still in the Network tab, look at the Domain column (you may need to right-click the column headers to enable it). Every request goes to this site’s own domain. There is no request to an AI provider, no analytics vendor collecting your content, no CDN fetching a model from somebody else’s bucket.

That last one is worth dwelling on, because it is where similar tools quietly leak. Most in-browser AI demos load their model straight from Hugging Face’s CDN — which means a third party learns your IP address, which model you loaded and when, every time you use it. Your audio is still private, but your usage is not. This site self-hosts the model files and the inference runtime for exactly that reason, and the automated test suite fails the build if a cross-origin request ever appears.

4. Read the source

The site is static files. Press Ctrl+U to view the page source, or open the Sources panel in developer tools and read the JavaScript. It is not minified beyond recognition and there is not much of it.

What you are looking for is any fetch() or XMLHttpRequest with a method other than GET, or any FormData, or a WebSocket. You will not find them. What you will find is a Web Worker that loads model weights, an audio decoder that calls the browser’s own decodeAudioData, and a lot of code about subtitles.

If you would rather not read JavaScript, the strongest structural argument is this: the site is hosted as static files on a CDN, with no backend of any kind. There is no server-side code in the project to receive an upload. Adding one would not be a configuration change — it would be a different kind of website.

What is stored, and where

Being precise about this matters more than a blanket “nothing is stored”:

The honest caveats

Verification tells you about this visit to this version of the site. To be complete:

None of these are reasons not to check. They are reasons to know what checking proved.