FaceBlur accuracy benchmark
A fresh stock-only test of Fast and Thorough. No user-uploaded content was used in this run or included in the public evidence.
· Current motion rerun and historical baseline results.
Current app: Thorough by default
Thorough is now the default for single and batch videos. Fast remains available. Analysis also uses two consistent detections to cover the preceding frame of a newly appearing face, within a short time limit and the same detected scene.
Nine fresh stock clips, 12 scenarios, 63 seconds per mode, and 1,512 consecutive frames per mode. Three scenarios repeat at 2× playback speed. No user-uploaded content was used.
Motion findings
Both modes now cover the reappearing face at 3.500 seconds in the head-turn clip. Fast also covers the previously missed first frame of the close-up party clip.
Thorough covers the reviewed head-roll and 2×-speed failure intervals. Fast still misses seven consecutive frames from 2.417 to 2.708 seconds and four from 2.917 to 3.083 seconds in the party clip (ends exclusive). At 2× speed, partial or missing Fast masks remain on frames 30–31 and 34–36.
We visually reviewed the same 64 selected source timestamps and 128 output frames again. Existing mask coordinates and tracking labels were unchanged across all 3,024 analyzed frames; the repair only added preceding-frame masks. This does not establish coverage of every face in the unreviewed frames.
This rerun uses the same footage that guided the fix. The selected frames are regression checks, not an independent accuracy benchmark. The earlier 98.3% score is historical and does not measure this update.
Inspect the reappearance failure and recovery
| Mode | Decoded output frames | Analysis seconds | Export seconds |
|---|---|---|---|
| Fast | 1512 / 1512 | 200.9 | 12.8 |
| Thorough | 1512 / 1512 | 900.5 | 23.4 |
Motion timings are one local run with background evidence generation, not a controlled speed comparison. Model initialization is excluded.
Compare motion: source on the left, Fast in the middle, Thorough on the right. Videos show actual exports at half resolution; analysis and export used 1280 × 720 at 24 fps. Audio was removed.
Small faces and group choreography (1×)
Overlapping dancers and hand occlusion (1×)
Fast head turns and hair occlusion (1×)
Fast head turns and hair occlusion (2×)
Camera motion and low-light dancing (1×)
Close-up head movement and colored light (1×)
Close-up head movement and colored light (2×)
Full-body dancing and hair movement (1×)
Download every-frame motion trace (CSV) · Motion review and failure windows (JSON) · Motion summary (JSON) · Motion provenance manifest (JSON)
Before the app update
Continuous-motion stress test
Nine fresh stock clips, 12 scenarios, 63 seconds per mode, and 1,512 consecutive frames per mode. Three scenarios repeat at 2× playback speed. No user-uploaded content was used.
Every frame was analyzed and every exported frame decoded. These checks verify processing, not complete face coverage. The 98.3% score below belongs only to the earlier fixed-sample baseline.
Motion findings
Fast missed eight consecutive face-visible frames during the close-up head roll, from 2.417 to 2.750 seconds (end exclusive). Thorough covered that interval. Fast also missed five frames from 2.917 to 3.125 seconds.
Both modes missed the reappearing face at 3.500 seconds in the head-turn clip and covered it again at 3.542 seconds. Thorough placed a mask on the torso instead of the face in the missed frame.
At 2× speed, Fast also produced lagging masks that left facial features visible. A nonzero mask count is not proof of face coverage. These selected failures do not establish a complete ranking across all motion scenarios.
Selected failure windows were reviewed frame by frame by Codex. This is not an exhaustive motion accuracy score or an independent human review. A frame with no masks is not automatically a missed face.
Inspect the head-roll failure frames · Inspect the reappearance failure and recovery
| Mode | Decoded output frames | Analysis seconds | Export seconds |
|---|---|---|---|
| Fast | 1512 / 1512 | 176.5 | 19.7 |
| Thorough | 1512 / 1512 | 753.4 | 11.6 |
Motion timings are one local run with background evidence generation, not a controlled speed comparison. Model initialization is excluded.
Compare motion: source on the left, Fast in the middle, Thorough on the right. Videos show actual exports at half resolution; analysis and export used 1280 × 720 at 24 fps. Audio was removed.
Back-of-head running control (1×)
Open comparison video · Mixkit stock source · 0–6s → 6s
Small faces and group choreography (1×)
Open comparison video · Mixkit stock source · 4–10s → 6s
Overlapping dancers and hand occlusion (1×)
Open comparison video · Mixkit stock source · 3–9s → 6s
Rotation and cartwheels (1×)
Open comparison video · Mixkit stock source · 0–6s → 6s
Rotation and cartwheels (2×)
Open comparison video · Mixkit stock source · 0–6s → 3s
Fast head turns and hair occlusion (1×)
Open comparison video · Mixkit stock source · 2–8s → 6s
Fast head turns and hair occlusion (2×)
Open comparison video · Mixkit stock source · 2–8s → 3s
Camera motion and low-light dancing (1×)
Open comparison video · Mixkit stock source · 1–7s → 6s
Close-up head movement and colored light (1×)
Open comparison video · Mixkit stock source · 5–11s → 6s
Close-up head movement and colored light (2×)
Open comparison video · Mixkit stock source · 5–11s → 3s
Full-body dancing and hair movement (1×)
Open comparison video · Mixkit stock source · 5–11s → 6s
Overhead camera pass and exit (1×)
Open comparison video · Mixkit stock source · 0–6s → 6s
Download every-frame motion trace (CSV) · Motion review and failure windows (JSON) · Motion summary (JSON) · Motion provenance manifest (JSON)
Fast motion raw results · Thorough motion raw results
Sources were downloaded directly from Mixkit for this run. The manifest records source hashes, excerpt ranges, playback speeds, model and code hashes, and evidence hashes. The running control shows people from behind; it is not counted as a face-coverage success.
Fixed-sample baseline
| Mode | Covered / faces | Coverage | Missed | False positives |
|---|---|---|---|---|
| Fast (YuNet) | 58 / 59 | 98.3% | 1 | 20 |
| Thorough (SCRFD-10G) | 58 / 59 | 98.3% | 1 | 10 |
Coverage counts visibly masked faces at fixed sample times. False positives are masks on non-human objects or background. These are sampled face instances, not unique people.
Both modes missed the cropped face at 10.5 seconds in the group clip. Thorough halved the false positives in this sample, with longer analysis time.
Results by scenario
| Scenario | Frames | Faces | Fast: covered / false positives | Thorough: covered / false positives |
|---|---|---|---|---|
| Frontal close-up | 5 | 5 | 5 / 0 | 5 / 0 |
| Full profile | 12 | 12 | 12 / 0 | 12 / 2 |
| Hand and hair occlusion | 15 | 15 | 15 / 9 | 15 / 2 |
| Low-light group | 15 | 27 | 26 / 11 | 26 / 6 |
Distant-pedestrian stress test
The 18 distant-crowd samples are unscored because blur and distance make face labels ambiguous. They contribute no faces or successes to the coverage percentage.
Masks in the unscored samples: 95 Fast · 76 Thorough
Frame evidence
Stock source and detection boxes on the left; mosaic output on the right.
Low-light group
seconds


Hand and hair occlusion
seconds


Hand and hair occlusion
seconds


Low-light group
seconds


Distant-pedestrian stress test
seconds


Download all frame results (CSV) · Visual annotations (JSON)
Method and limitations
Both modes analyze every decoded frame, apply tracking and gap repair, then export with the saved analysis. Settings: mosaic, strength 72, margin 42, no manual edits, audio removed.
We inspect fixed samples at 0.5 seconds, then one second apart: 5 frontal, 12 profile, 15 occlusion, 15 group, and 18 crowd frames. Source resolution is 1280 × 720.
A single Codex visual review scores the source and output frames; there is no independent human review. Profiles, partially occluded faces, and cropped faces count. Statues, hair-only, chin-only, and nose-tip-only fragments do not.
Masks on excluded human fragments are ignored: none in Fast, two in Thorough.
A covered face has its visible eyes, nose, and mouth obscured by the mosaic. A missing or incomplete mask counts as a miss. This is a visual masking check, not a test of whether someone can be identified.
The previous BlazeFace benchmark used different footage and labels. Its percentages are not directly comparable to this run.
Export checks
All five clips were exported in each mode and every output frame decoded successfully. Output frame counts matched analysis frame counts; output dimensions were 1280 × 720 and audio tracks were absent.
| Mode | Decoded output frames | Analysis seconds | Export seconds |
|---|---|---|---|
| Fast | 1637 / 1637 | 196.4 | 19.3 |
| Thorough | 1637 / 1637 | 761.7 | 10.5 |
Test environment: Chrome 153.0.8010.53 · macOS · ONNX Runtime WASM · 4 threads
Timings are one local headless-browser run, not a speed guarantee. Model initialization is excluded; export uses cached analysis. Other browsers and devices were not retested in this run.
Machine-readable summary · Fast raw results · Thorough raw results
Sources and provenance
Fresh copies were downloaded directly from Mixkit for this test. The manifest records source pages, download URLs, retrieval times, source file hashes, model and code hashes, and every evidence image hash. The runner checks the allowlist before opening any media.
- Frontal close-up · Mixkit
- Full profile · Mixkit
- Hand and hair occlusion · Mixkit
- Low-light group · Mixkit
- Distant-pedestrian stress test · Mixkit
Mixkit Stock Video Free License · Provenance manifest (JSON)
The footage license and detector model license are separate. Thorough uses SCRFD weights with upstream non-commercial research terms.
Check your own video
Inspect automatic masks and add manual covers wherever a face is missed.
Open tool