Visual Verifier¶
Anonymization QA for images and videos¶
Your anonymizer says the video passed. Frame 4 still exposes the licence plate.
Visual Verifier tests blur, redaction, masking, and other visual processing frame by frame, and returns a deterministic PASS/FAIL, temporal evidence, and CI-ready reports.
Visual Verifier brings software-testing discipline to processed image and video output. Instead of trusting that an anonymization or visual-processing job completed, it independently checks what happened frame by frame, verifies required regions when targets are supplied, and produces reproducible PASS/FAIL evidence for CI and review.
No clone, no fixtures to download, no media of your own required. The sample is generated on your machine.
Runs entirely on your machine
Your media is never uploaded. The package imports no networking library at all, and a test enforces that on every commit. This documentation site loads no third-party fonts or trackers either.
Anonymization is the named use case, not the limit¶
The engine is a general pixel-level change verifier. It measures what actually changed between a reference and a candidate, region by region and frame by frame, so anything that alters pixels can be verified the same way.
| Use it for | What a FAIL means |
|---|---|
| Blur, pixelation, redaction, masking | A frame was left unprotected |
| Watermark and overlay application | The mark is missing or too faint |
| Encoding, transcoding, filter chains | A stage silently did nothing |
| Compositing, inpainting, style transfer | The edit did not land everywhere |
| Any processed-media regression test | Output drifted from the reference |
Privacy work is where the failure is most expensive, so it is what the documentation leads with. The verification contract itself makes no assumption about why the pixels changed.
The missing test after visual processing¶
Image and video pipelines are usually tested as software: the function ran, the model returned detections, the encoder produced a file, and the job exited successfully.
None of that proves the output media is correct.
An anonymizer can complete successfully while missing one frame. A masking pipeline can modify the frame while missing the required face or licence plate. A watermark job can finish while the mark disappears during part of a video. In every case the exit code is zero and the media is wrong.
Visual Verifier tests the produced media itself. It is not an anonymizer; it is the independent test that runs after one:
any anonymizer, redactor, or image/video processor
↓
processed output
↓
VISUAL VERIFIER
↓
Did the transformation happen?
Did it happen in every frame?
Did it cover the required target?
Where exactly did it fail?
↓
PASS / FAIL + evidence
↓
fix → rerun → verify
Instead of asking only whether the software executed, it asks whether the expected visual transformation actually appeared, frame by frame, and — when reviewed targets are supplied — in the required region.
Think of it as regression testing for processed visual media: deterministic PASS/FAIL, the exact failing frames and regions, reviewable evidence, and CI-ready exit codes.
Your code has tests. Why shouldn't your processed media?
That also means tools like face blurrers, plate redactors, and OCR scrubbers are not competitors. They are upstream systems this verifies.
Start here¶
| Document | Read it when you want to |
|---|---|
| Getting started | Install it and see a real failure in 60 seconds |
| Anonymization QA | Understand exactly what a PASS does and does not prove |
| Use it in CI | Fail a build on an anonymization gap |
| Limitations | Know the failure modes before trusting a PASS |
Reference¶
| Document | Contents |
|---|---|
| Command line | Every command, option, and exit code |
| Python API | Functions, result models, and error codes |
| Output schema | Field-by-field meaning of every report |
| Temporal tracking | Association, lifecycle, lineage, and metrics |
| Verification contract | The formal inputs and outputs |
| Target annotation | Reviewed target schema and coverage behaviour |
| Benchmark | Measured comparison against global-metric baselines |
| GitHub Action | Every action input, output, and permission |
Scope and roadmap¶
| Document | Contents |
|---|---|
| Problem statement | Why this exists and what it excludes by design |
| Use cases | Supported uses and unsupportable claims |
| Policy system | The planned V5.4 selectable policy protocol |
Working on the code¶
| Document | Contents |
|---|---|
| Architecture | Module boundaries and dependency direction |
| Code style | Naming, typing, docstring, and length rules |
| Release checklist | Everything a release must satisfy |
| Development history | How the prototype became this package |
Project files live in the repository: AGENTS.md, CONTRIBUTING.md, CHANGELOG.md, ROADMAP.md, SECURITY.md, and CODE_OF_CONDUCT.md.