Redact video without ever uploading it.
OpenScrub finds and blurs faces, license plates, full bodies, and on-screen text — 14 kinds of sensitive data — in your videos and screen recordings. GPU-accelerated, reviewed by you, running entirely on your own machine.
A moving subject, blurred frame by frame.
Real footage, redacted on one machine with the person category and silhouette masking — no cloud in the loop.
The divider sweeps across to reveal the untouched original underneath. The silhouette tracks the skier through every carve, while the skis, poles, powder spray and the mountain behind stay sharp — only the person is obscured. Footage: Pexels.
Fourteen kinds of sensitive data — caught automatically.
One pass detects the things that identify people in footage: their faces and bodies, the plates on their cars, and the text that names them. Structured recognizers are checksum-gated, so a real match gets blurred and a lookalike doesn’t.
Faces
Ellipse blur tuned for deface-style coverage — even turned heads and profiles.
License plates
YOLO plate models that hold through motion, glare, and 4K frames.
People (full body)
Silhouette masking, not just a box — build and gait are covered too.
On-screen text
Finds text regions in the wild — signs, badges, documents, handwriting.
Names & dates
spaCy-backed name detection and dates of birth in captured text.
SSNs & cards
Checksum-gated Social Security and payment-card numbers — no false blurs.
Emails, phones, IPs
Contact details and network addresses caught across the frame.
Addresses
Street and mailing addresses recognized in on-screen text.
API keys & secrets
Tokens and credentials that leak in terminals and dashboards.
Bank, crypto, passports
IBAN/routing, wallet addresses, and passport MRZ — checksum-verified.
QR & barcodes
Detected and covered as regions — the payload is never even decoded.
Screens
TVs, laptops, and phones blurred whole — whatever's on them stays private.
Scan. Review. Render.
You stay in control of every frame — nothing is trusted until you’ve seen it.
Scan
Point OpenScrub at a video. It detects sensitive regions across all 14 categories on your GPU — faces and bodies per frame, text via OCR.
Review
Every detection shows up in your browser, grouped by person and object. Adjust, add, or clear anything before it’s final.
Render
Export a clean copy — blur, box, mosaic, or inpaint, with audio muting and HDR-aware output. The original is never touched.
The safest place for sensitive footage is the machine it’s already on.
Redaction exists to protect the people in your footage. OpenScrub is built so that protecting them never requires handing that footage to anyone else.
Your video never leaves the device
Detection and rendering run on your own CPU or GPU. There’s no upload step, no processing queue somewhere else, and no copy of your footage sitting in storage you don’t control. If your policies say the material can’t leave the building, it doesn’t have to.
Runs with the network unplugged
No sign-up, no API key, no licence check phoning home. Once you’ve pulled the image or installed the app, OpenScrub works fully offline — which is the only way it can work at all on an isolated or air-gapped machine.
You can read exactly what it does
The whole thing is open source under Apache‑2.0. You don’t have to take a privacy promise on faith — you, or your security team, can read the code, watch the network interface, and confirm the behaviour for yourselves.
One clip or a thousand hours
OpenScrub is free, and the work happens on hardware you already own. The only thing a longer job costs is the time your own machine spends on it, so there’s nothing to ration and no reason to redact less than you should.
A public benchmark — and its current numbers.
There’s no industry certification for video redaction, so OpenScrub ships a reproducible benchmark instead: anyone can rerun it and get their own numbers. Here are the current ones — and the leaks the benchmark caught on the way to them.
OPENSCRUB v1.0.78 · CPU ONLY · CORPUS v2 · 5 FRAMES SAMPLED PER PLANTED VALUE · MEASURED JULY 2026
planted PII values still readable in the rendered output, across an 8-scenario adversarial corpus — 100 % recall, 0.00 % frame leak rate.
redacted faces re-identified by a face recognizer that had already learned each identity from the unredacted original.
of non-sensitive text still readable after redaction with the default engine — catching everything didn’t mean blurring everything.
Text PII: is it still readable?
OPENSCRUB v1.0.78 · CPU ONLY · CORPUS v2 · 5 FRAMES SAMPLED PER PLANTED VALUESWIPE THE TABLE →
| OCR ENGINE | PII RECALL | FRAME LEAK RATE | BENIGN PRESERVED |
|---|---|---|---|
| ONNX PP-OCRv5 (default engine) | 100.0 % | 0.00 % | 100.0 % |
| Tesseract (fallback engine) | 100.0 % | 0.00 % | 97.7 % |
Faces: can a recognizer still identify the person?
OPENSCRUB v1.0.78 · DEFAULT BLUR MODE · SFACE RECOGNIZER · SAME-PERSON THRESHOLD 0.55SWIPE THE TABLE →
| FOOTAGE | FACES ATTACKED | RE-IDENTIFIED | STILL DETECTED AS A FACE |
|---|---|---|---|
| Handheld 1080p party video — five people, constant motion, faces at many angles (stock footage, Pexels #7100826) | 125 | 0 (0.0 %) | 0.0 % |
| The same party video at native 4K — larger faces, more recoverable detail | 128 | 0 (0.0 %) | 0.0 % |
| Public-domain interview — large, frontal, close-up faces (Wikimedia Commons) | 133 | 0 (0.0 %) | 0.7 % |
| The party video redacted in mosaic (pixelation) mode | 125 | 0 (0.0 %) | 4.8 % |
The scorer doesn’t trust OpenScrub’s own bookkeeping: it crops the rendered output and runs an independent OCR over it, so a leak counts as a leak even if the report claims the region was covered. Post-redaction similarity sat below the cross-person chance floor in every run — a redacted face matches its own original no better than a random stranger’s face matches it. And every graded clip first passed a control check: the recognizer had to reliably re-identify the same faces in the unredacted footage. Two candidate clips failed that control, and the harness refused to grade them rather than publish a hollow zero.
Rerun it yourself — the corpus is deterministic (same seed, same layout for everyone) and plants only fake PII from reserved documentation ranges: github.com/austinmabry/OpenScrub/benchmark → Best-effort redaction — always review your output; a benchmark run is evidence, not a promise.
Get started in one command.
OpenScrub runs on your own hardware. Docker is the recommended way — it bundles the engine, the review UI, and GPU support, and updates cleanly.
Run the app in one line
Then open https://localhost:8384 in your browser.
$ docker run -d -p 8384:8384 \
-v openscrub_data:/root/.local/share/OpenScrub \
pharmhero/openscrub
Have a GPU? Pick the matching image below — the default image above is CPU‑only, so the GPU flags alone won’t accelerate anything.
$ docker run -d --gpus all -p 8384:8384 \ -v openscrub_data:/root/.local/share/OpenScrub \ pharmhero/openscrub:cuda
$ docker run -d -p 8384:8384 \ --device /dev/dri:/dev/dri \ -v openscrub_data:/root/.local/share/OpenScrub \ pharmhero/openscrub:intel
Mac (Apple Silicon & Intel) — use the default image, no extra flags; it runs on CPU. The NVIDIA image is several GB larger than the others. Your data lives in the mounted volume; the container is disposable.
Windows installer
A native app with a Start Menu shortcut. Download for Windows →
pip / from source
Python 3.10+ on Windows or Linux. Install from GitHub →
Every version & checksum
Release notes and signed builds. GitHub Releases → · Docker Hub →
Which install actually uses your GPU?
OpenScrub runs on any machine, but where each stage runs depends on how you install it. Docker is the easiest route — the images arrive pre-wired, with nothing to install on the host but the driver you already have — and the NVIDIA image is the only one that puts every stage on the GPU. Anything that can’t reach your graphics card falls back to the processor rather than failing.
SWIPE THE TABLE →
| INSTALL METHOD | FACES & BODIES | PLATE / TEXT-REGION MODELS | TEXT OCR | VIDEO ENCODING |
|---|---|---|---|---|
Docker · NVIDIApharmhero/openscrub:cuda |
GPU | GPU | GPU | GPU |
Docker · Intelpharmhero/openscrub:intel |
CPU § | GPU | GPU | GPU |
Docker · defaultpharmhero/openscrub |
CPU | CPU | CPU | CPU |
Windows installerOpenScrub-Setup.exe |
CPU § | GPU | GPU | GPU † |
pip / from sourcepip install OpenScrub |
CPU § | OPTIONAL ‡ | OPTIONAL ‡ | GPU † |
GPU runs that stage on your graphics card; CPU runs it on
your processor. Every GPU path pre-flight-tests itself with a real encode or inference pass
and falls back to the CPU automatically, so a missing or mismatched driver degrades speed
instead of failing your job.
† Needs ffmpeg on your PATH exposing NVENC (NVIDIA) or Quick
Sync (Intel) — the Windows installer can install ffmpeg for you in one click.
‡ On Windows, the guided installer adds DirectML acceleration
for the ONNX detectors on any DirectX 12 GPU — NVIDIA, AMD or Intel. Elsewhere,
GPU OCR means adding PaddleOCR’s CUDA build, which the guided installer offers when it
detects an NVIDIA card.
§ The built-in face detector runs on the processor on these
builds; an optional downloadable face model runs on the GPU instead.
Every build now reads text with the same PP-OCRv5 models, with Tesseract kept as a fallback
— so a CPU cell above means that stage runs slower, not that it reads less
accurately.
GPU acceleration covers NVIDIA and Intel hardware — on a Mac, every stage runs on the
CPU.
Keep your footage yours.
Free, open source, and built to fail closed — over-blur beats under-blur, and nothing you scan ever leaves your machine.