How to redact bystander faces in body-cam and dashcam video before release
- Step 1Open the tool — it lands on the video face pixelator — The bulk face pixelator routes to the JAD video pixelate engine at /video-tools/face-pixelate, which takes a single body-cam or dashcam clip and mosaics every face it detects across it. If you only have a single still frame extracted from the footage, this engine needs a decodable video stream and will report 'Source has no video stream' — redact a single still with an image redactor instead.
- Step 2Drop ONE clip — keep it on the local machine — Drag a single video onto the tool (no folder, no batch). Body-cam
.mp4and most dashcam containers load through the browser's<video>element; a proprietary or non-standard codec gives 'Could not load source video for face detection.' Because everything runs locally, the footage stays on the machine. Watch your tier's security file limit (Free 10 MB; Pro 100 MB; Pro-media 500 MB; Developer 2 GB) — the video face-pixelate engine is a Pro-media tier tool, and 500 MB / 2 GB tiers exist for longer footage. - Step 3Set Sample rate higher for fast motion — Sample rate (1–15 Hz, default 4) is how many frames per second are inspected. Body-cam and dashcam footage is full of fast camera motion and people who pass through frame quickly, so push toward 8–12 Hz so brief appearances accumulate enough detections to track. Detection time scales roughly with sample rate; 15 Hz is the maximum.
- Step 4Set Pixel size for the 'redacted' look — Pixel size (4–40, default 16) is the mosaic block size — each face crop is scaled down by this factor with nearest-neighbour sampling then back up. For a public release where the redaction must be obvious, 24–36 gives the heavy, clearly-censored block look. Avoid 4–8: subtle blocks can leave recognisable face structure, which defeats the purpose for disclosure.
- Step 5Set Padding to cover moving heads — Padding (0–1, default 0.25) grows each detected box outward before pixelation, covering hairline, jaw, and ears. Raise it toward 0.4–0.5 for body-cam footage where heads turn rapidly and the detector may clip the box. Keep it lower when several people stand close together and you don't want adjacent mosaics to merge.
- Step 6Run, then review every frame before disclosure — Press run. You'll see 'Loading face detector (one-time WebGPU + model warm-up)', then 'Detecting faces · sample n/N', then 'Pixelating faces · k faces'. When the
.mp4downloads, review the entire clip frame by frame — BlazeFace short-range is weakest on profiles, motion blur, low light, and small/distant faces, and only the 12 most-detected tracks are kept. For a defensible release, any miss must be caught and manually redacted. Use a region redactor for non-face PII like screens, license plates, badge numbers, and on-screen names.
Settings for common body-cam / dashcam conditions
Only three controls exist — no sensitivity slider, no per-face toggle, no blur-strength (that's the separate face-blur tool). Practical starting values for the conditions these cameras produce, all within the real ranges.
| Condition | Sample rate | Pixel size | Padding |
|---|---|---|---|
| Fast foot pursuit / lots of motion | 12 Hz | 24 | 0.40 |
| Stationary interview / traffic stop | 5 Hz | 28 | 0.30 |
| Low-light / night footage | 8 Hz | 24 | 0.40 |
| Dashcam, person crossing in front | 10 Hz | 24 | 0.35 |
| Heavy 'obviously redacted' release look | 8 Hz | 36 | 0.45 |
Pipeline behaviour relevant to a defensible release
What the engine does when you press go. Browser path and local JAD Runner use the same BlazeFace short-range model and the same nearest-neighbour mosaic.
| Stage | Behaviour | Why it matters for disclosure |
|---|---|---|
| Where it runs | In-browser (TFJS WebGPU/WebGL/CPU) or local JAD Runner (headless Chromium) | Footage never leaves the machine — no cloud, no third-party processor |
| Detection | BlazeFace short-range, confidence fixed at 0.5, no exposed threshold | Profiles, motion blur, and low light are weak spots — manual review is mandatory |
| Tracking | IOU-clustered (0.2) spatial tracks across sampled frames | A bystander who moves through the scene gets one continuous mosaic window |
| Track cap | Keeps only the 12 most-detected tracks, ranked by hit count | A crowded scene can exceed 12 — low-hit faces are dropped and left exposed |
| Pixelation | crop -> scale down (neighbor) -> scale up (neighbor), per face time window | Irreversible: no recoverable original, which is what a release requires |
| Output | Single H.264 .mp4 | Standard container to attach to the records response |
File-size limits by plan (security family)
A file-based tool, so tier size limits apply; the engine takes one video at a time, so per-file size is the binding constraint. The video face-pixelate engine itself is a Pro-media tier feature.
| Plan | Max file size | Practical note |
|---|---|---|
| Free | 10 MB | Only short low-res test clips fit |
| Pro | 100 MB | Short clips; note face-pixelate needs Pro-media |
| Pro-media | 500 MB | Realistic tier for most body-cam / dashcam clips |
| Developer | 2 GB | Long continuous recordings; encode time grows with duration |
Cookbook
Walk-throughs grounded in what the engine actually does on the kind of footage records offices handle — one clip in, mosaic MP4 out. Stage labels are the real progress messages.
Traffic-stop dashcam, bystander redacted for release
A stationary dashcam clip with an uninvolved pedestrian in frame. Heavy pixel size for an unmistakably redacted look; review the whole clip.
Source: stop-01.mp4 (1080p, 120s) Controls: Sample rate 5 Hz · Pixel size 28 · Padding 0.30 Progress: Loading face detector (one-time WebGPU + model warm-up) Detecting faces · sample 601/601 Pixelating faces · 3 faces · 120.0s / 120.0s Output: stop-01-pixelated.mp4 (H.264) -> Review frame-by-frame before attaching to the response.
Fast foot pursuit — raise the sample rate
A body-cam pursuit with heavy motion; people pass through frame in well under a second. The default rate misses them, so push the sample rate up.
Problem at default: Sample rate 4 Hz -> 1 sample every 0.25s Bystander visible ~0.4s -> ~1-2 detections -> thin track Fix: Sample rate 12 Hz -> 1 sample every ~0.083s Same person now gets several detections -> solid track Padding 0.40 -> covers rapidly turning heads Trade-off: detection time scales with sample rate. Max 15 Hz.
Low-light night footage
Night body-cam footage where faces are dim. The short-range model is weaker in low light, so combine a higher sample rate with heavy padding and verify carefully.
Source: night-call.mp4 Controls: Sample rate 8 Hz · Pixel size 24 · Padding 0.40 Reality check: Low light + grain reduce detection reliability. Some frames a face is detected, some it is not. Padding 0.40 keeps coverage wide where detected. Mandatory: scrub the whole clip; manually redact any frame where a face was visible but the mosaic dropped.
Crowd scene exceeds the 12-track cap
A scene with more than 12 people produces more than 12 clusters. The engine keeps the 12 most-detected and drops the rest, so faint background faces may be exposed.
Detected clusters: 16 Track limit: 12 (most-detected kept) Console: face-blur - 16 clusters, capped to 12 most-detected Result: 4 lowest-hit clusters are NOT mosaicked. Mitigation: - Split the timeline into segments with <=12 faces each - Raise sample rate so genuine faces accumulate hits and rank high - Manual region pass for any face left exposed before release
Non-face PII: screens, plates, badge numbers
A face detector only finds faces. License plates, in-car screens, badge numbers, and on-screen names need a manual region redactor.
In frame, also requiring redaction: - license plate of a parked car - MDT / laptop screen content - a name on a document This tool will NOT redact those (not faces). Use the manual region redactor and draw a rectangle over each, set the time range, for the duration it is visible.
Edge cases and what actually happens
Pixelation cannot be undone
By designEach face crop is scaled down with nearest-neighbour sampling and scaled back up, discarding the original detail — there is no key or reverse pass. For a public-records release that's the requirement: the disclosed copy has no recoverable original. Retain the un-pixelated master separately under your normal evidence retention.
It opens the video tool, not a batch tool
ExpectedChoosing the bulk face pixelator redirects to /video-tools/face-pixelate, which processes one clip and tracks faces across its frames. It is not a multi-file uploader. Process each clip in a release set individually.
Nothing is uploaded
By designDetection runs in your browser (TFJS WebGPU/WebGL/CPU) and the mosaic is encoded with ffmpeg.wasm, or locally on the JAD Runner in headless Chromium. Evidentiary footage never reaches a third-party server, which is what keeps it suitable for sensitive disclosures.
No faces detected
No facesIf no sampled frame yields a face, you get 'No faces detected. Try a lower sample rate or a clearer source.' On this footage that usually means low light, heavy motion blur, hard profiles, or distant subjects. Raise the sample rate, supply a clearer copy, and manually redact anyone the near-frontal model can't catch.
Faces found but not grouped into a region
No tracksDetections existed but clustering produced no usable track ('Faces detected but could not be grouped into redaction regions'). Sparse single-frame hits from fast motion at a low sample rate cause this. Raise the sample rate so detections of the same person accumulate into a coherent track.
Face at frame edge drops below minimum size
No regionsAfter padding, clamping to the frame, and rounding to even dimensions, an edge box can shrink below the 4-pixel minimum and be skipped; if all do, you get 'Detected faces fell outside frame after clamping.' Lower the padding or, if you have the source, reframe — though for evidence you generally can't, so plan to manually redact edge faces.
More than 12 people in a scene
12-track capOnly the 12 most-detected tracks are kept (ranked by hit count); the console logs 'capped to 12 most-detected'. Frequently-seen people win; a bystander glimpsed once at the back can be dropped. For crowded scenes, split the timeline and always review the output before disclosure.
Profiles, low light, and motion blur are missed
Detection limitBlazeFace short-range is tuned for clear near-frontal faces. Hard profiles, fast head turns, low-light grain, and small/distant faces are detected unreliably regardless of settings. Padding helps only after a detection exists; mandatory frame-by-frame review plus a manual pass is the only way to guarantee a complete release.
Footage container/codec won't decode
Load failedDetection loads the source through an HTML <video> element, so it depends on browser codec support. A proprietary body-cam codec or a corrupt header gives 'Could not load source video for face detection.' (browser) or 'Cannot load source video' (runner). Re-encode to a standard H.264 MP4 first, then pixelate.
Output is always MP4
SupportedWhatever the input container, the result is an H.264 .mp4. There's no option to keep the original container or pick a codec. Re-mux afterward with a converter if your records system requires a specific format.
Frequently asked questions
Can I use this for FOIA / public-records body-cam redaction?
It produces irreversible local face redaction with no upload, which fits the technical requirements for disclosure. It is a redaction tool, not legal advice or a records-management system — your office still owns the review, the audit trail, and retention of the un-pixelated master. Always review the output frame by frame before release.
Does any footage leave my network?
No. Detection runs in your browser via TensorFlow.js (WebGPU, then WebGL, then CPU) and the mosaic is encoded with ffmpeg.wasm, or locally on the JAD Runner in headless Chromium. The footage never touches a third-party server, avoiding cloud chain-of-custody concerns.
Is the redaction truly irreversible?
Yes. Each face is downscaled with nearest-neighbour sampling and scaled back up, permanently destroying the underlying pixels — there is no key or reverse pass. A soft blur can sometimes be partially recovered; a mosaic at a sensible block size cannot.
How do I get the obvious, heavily-redacted look reviewers expect?
Raise Pixel size to 24–36 for chunky, unmistakable blocks. Smaller values (4–8) look subtle but risk leaving recognisable structure, which is exactly what you want to avoid for a release.
The footage is fast and the mosaic keeps dropping. What do I change?
Raise the Sample rate toward 12 Hz so brief appearances accumulate enough detections to form a solid track, and raise Padding to 0.40+ to cover rapidly turning heads. Detection time scales with sample rate; the max is 15 Hz.
Why was someone in the background left unblurred?
Either they were too distant/dim for the short-range model, or the scene exceeded the 12-track cap so a low-hit cluster was dropped. Raise the sample rate, split crowded segments, and frame-by-frame review then manually redact any miss — for a release this manual verification is not optional.
How do I redact license plates, screens, or badge numbers?
Those aren't faces, so a face detector won't find them. Use the manual region redactor at /video-tools/video-redactor to blur a chosen rectangle for a chosen time range. Bleep names in the audio with /video-tools/audio-mute-region.
Can I tune a confidence threshold to catch more faces?
No. The only controls are Sample rate, Pixel size, and Padding; detection confidence is fixed at 0.5. To catch more, raise the sample rate or supply a clearer copy — and manually redact what the near-frontal model can't see.
What's the output format?
Always a single H.264 .mp4, regardless of input container. Re-mux afterward if your records system needs a different container.
How long a clip can I process?
Security-family limits apply: Free 10 MB, Pro 100 MB, Pro-media 500 MB, Developer 2 GB, one video at a time. The video face-pixelate engine is a Pro-media tier feature; Pro-media or Developer is realistic for body-cam runs. Detection and encode time both grow with duration and resolution.
Does it handle still frames extracted from the footage?
No — this is the video engine and needs a decodable video stream. A single still is rejected with 'Source has no video stream'. For one frame, use an image/region redactor, or wrap it in a short clip first.
Should I pixelate or blur for a disclosure?
Pixelate (this tool) reads as deliberately redacted and is irreversible, which is the conventional release look. A softer blur is available at /video-tools/face-blur if your policy prefers it. Either way, strip GPS/device metadata afterward with /video-tools/metadata-scrubber.
Privacy first
Every JAD Security operation runs entirely in your browser. Files, passwords, and PGP private keys never leave your device — verified by zero outbound network requests during processing.