Anonymizer

How
it
works.

Everything happens in your browser. Here is each step, from the file you pick to the file you save, with the real numbers used by the code.

  1. Openyour file stays on the device
  2. Read30 images per second
  3. Detecta face model, in the background
  4. Followlink detections over time
  5. Reviewyou fix what is wrong
  6. Exporta new file, masks painted in

1 · Loading the tool

The page, the fonts, the face-detection model (YuNet, 338 KB) and its engine (ONNX Runtime, compiled to WebAssembly) all come from this one address. A security rule in the page, the Content-Security-Policy, forbids the browser from contacting any other address, so even a bug could not send anything out.

The model runs in background workers: up to 3 (2 on iPhone), always leaving one processor core free so the page stays smooth. If workers are not available, it runs on the page itself, more slowly.

2 · Reading your file

Your file is never uploaded. The browser opens it through a private local address (blob:) that exists only in this tab.

Videos are scaled so the longest side is at most 1920 px, photos 4096 px. A video is analysed at 30 images per second. To do it quickly, Anonymizer plays the video and copies each image as it appears. If the phone skips images, playback slows down automatically. If playback is not possible, it jumps to each image one by one, which is slower but sure.

3 · Finding faces

Each image is given to YuNet, a small face-detection network. The image is padded to a multiple of 32 px, then the network looks at it at three scales (steps of 8, 16 and 32 px) and proposes boxes, each with a score between 0 and 1. Overlapping boxes on the same face are merged (overlap above 30%).

4 · Deciding what is a face

A box is kept only if its score is high enough, and the bar depends on its size. Small faces are hard to see, and an extra mask costs little, so the bar is low. Large boxes with a medium score are usually false alarms (a wall, a tree), so the bar is high.

0 .3 .85 .2 12% 25% face width / shorter side of the image minimum score

Under 12% of the shorter side, 0.20 is enough. Between 12% and 25%, the bar rises from 0.30 to 0.85. Above 25%, it stays at 0.85. One exception: a box from 0.30 is accepted if the second look at one third of the size finds the same face.

5 · Following faces over time

Detections are linked from one image to the next. A new box continues an existing face if it is close (within about 1.6 times the average size of the two boxes) and of similar size (less than 2.5 times bigger or smaller). A face may disappear for up to 20 images (0.67 s) and still be the same one.

+4 detected gap, filled detected +4

6 · Your review

You see the result before anything is saved. Tap a mask to remove it (from that image on), or restore it. Tap anywhere else to add a mask by hand, drag it, resize it, or extend it to the whole video. Scrub the timeline or step image by image to check. If there is no mask at all, Anonymizer says so and asks you to confirm before it exports.

The style is a solid black square or an emoji. For an emoji, the black square is always painted first and the emoji on top, so the face can never show through the emoji's rounded edges.

7 · Export

The saved file is built from scratch: every image is redrawn, the masks are painted on it, and the images are encoded again. The original file is never copied, so nothing in it can leak through.

original masked new file

8 · What is kept

Nothing. No cookie, no localStorage, no sessionStorage, no IndexedDB, no service worker, no analytics. Working data lives in memory and disappears when you close the tab or choose another file. The only thing that remains is the file you save yourself.

Limits, honestly

A detector can miss faces: profiles, faces partly hidden by a hand or a hat, very small or very blurry faces, faces at the edge of the image. That is why the review step exists. Watch the whole result before posting.

A mask hides a face, not clothes, tattoos, a distinctive voice, a place or a name said aloud.

Where to read it

Everything is on github.com/yakuzaax/anonymizer. To check the privacy claims yourself, see Verify Anonymizer.

Mask a video→