The Genesis of SterileFile
Why we built a strictly client-side metadata scrubber.
Read More →A client-only forensic metadata scrubber for documents and images. Drop your files to destroy hidden traps and tracking data instantly.
Start SanitizingSupports .pdf, .jpg, .png, .tiff
Or click to browse
Designed for security researchers, journalists, and privacy advocates.
Your files never leave your device. All forensic parsing and sanitization happens entirely in your browser's memory using WebAssembly and Canvas APIs.
Identifies hidden text traps in PDFs where selectable text is painted over with graphic fill layers to trick reviewers.
Completely re-encodes raw pixel data natively. Prevents "Uncropped Thumbnail" leaks where EXIF thumbnails retain uncropped image fragments.
Safely destroys embedded XMP metadata streams that can leak local file paths, editing history, or call home to third-party servers.
Read more about file privacy, OPSEC, and metadata security on our blog.
Why we built a strictly client-side metadata scrubber.
Read More →Integrate SterileFile into your local workflows using headless browser bots. Zero API keys, zero uploads.
import { test, expect } from '@playwright/test';
test('bulk sanitize files', async ({ page }) => {
// 1. Open SterileFile locally or via URL
await page.goto('https://sterilefile.anmo.space/bot');
// 2. Upload file via the hidden automation input
await page.setInputFiles('#bot-file-input', 'confidential-report.pdf');
// 3. Wait for the sanitization to complete and download
const downloadPromise = page.waitForEvent('download');
await page.click('#sanitize-btn');
const download = await downloadPromise;
// 4. Save the sterile file to your machine
await download.saveAs('./clean-files/confidential-report-sterile.pdf');
});
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 1. Open SterileFile locally or via URL
await page.goto('https://sterilefile.anmo.space/bot');
// 2. Upload file via the hidden automation input
const fileInput = await page.$('#bot-file-input');
await fileInput.uploadFile('confidential-report.pdf');
// 3. Set up download path and trigger sanitization
const client = await page.target().createCDPSession();
await client.send('Page.setDownloadBehavior', { behavior: 'allow', downloadPath: './clean-files/' });
await page.click('#sanitize-btn');
// Wait for file to download (implement custom wait logic)
await new Promise(r => setTimeout(r, 2000));
await browser.close();
})();
No. SterileFile is a pure HTML/JS application. You can disconnect from the internet after loading the page, and it will still work perfectly.
Instead of risky EXIF tag deletion, we paint the image onto an offscreen HTML5 canvas and extract the raw, naked pixels. This guarantees absolute zero-metadata re-encoding.
When someone tries to redact a PDF by drawing a white box over text instead of permanently deleting the text objects. The text remains selectable and extractable beneath the box.