Hide faces in photos and videos of demonstrations, parties, or any other event. Masque runs entirely in your browser: files are never uploaded, and once loaded the app keeps working offline and can be installed on a phone's home screen.
Drop several photos to process them together and download one ZIP. In videos, faces are tracked between frames, so a face the detector misses for a moment stays masked. Every mask can be reviewed and edited before export, and when detection misses a face or fails, dragging across it adds a mask by hand.
Face detection uses the CenterFace model (MIT), as in deface. public/models/centerface.onnx is deface's model with dynamic input sizes, produced by uv run scripts/prepare-model.py.
The interface is available in English and French; it follows the browser language and can be switched in the footer.
Masque is created by onestla.tech and L'Offensive, and uses onestla.tech's design. https://masque.onestla.tech is hosted by Infomaniak.
- No backend, no analytics, no third-party requests. A strict Content Security Policy (
connect-src 'self') blocks the page from sending data anywhere else. - Output files carry no metadata: no EXIF, GPS, or device identifiers in photos; no tags or creation dates in videos. Downloads get random or numbered names, never the original ones.
- Video exports use temporary browser storage where available. “Open another file” deletes the temporary export a few seconds later, once the download has had time to finish. Closing the tab or a crash can leave it behind; clear this site's data to remove it.
- Hiding faces does not hide everything: clothing, tattoos, banners, gait, and landmarks can still identify people. Your phone may also have uploaded the originals to a cloud backup. Read the EFF's Attending a Protest guide, or onestla.tech's Guide d'autodéfense numérique pour les mouvements sociaux in French.
npm ci
npm run devChecks:
npm run check
npm test
npx playwright install
npm run e2enpm run build writes a static site to dist/. The host must send the headers defined in security.ts: the cross-origin isolation headers enable multi-threaded WebAssembly.
- Netlify:
dist/_headersis generated by the build. - Apache, including Infomaniak web hosting:
dist/.htaccessis generated by the build and requiresmod_headersandmod_rewrite; it also redirects HTTP to HTTPS. - Caddy:
caddy run --config deploy/Caddyfile.
GitHub Pages cannot set these headers and is not supported. Cloudflare Pages rejects files over 25 MiB, and the ONNX Runtime WebAssembly file is larger, so it is not supported either.