How to pixelate students' faces in classroom and school video
- 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 classroom recording and mosaics every face it detects across it. If you only have a still class photo with a no-consent child in it, this engine needs a decodable video stream and will report 'Source has no video stream' — redact one still with an image redactor instead.
- Step 2Drop ONE recording — Drag a single video onto the tool (no folder, no batch). Tablet
.mov, webcam.mp4, and screen-recorded.webmlesson clips load through the browser's<video>element; an unusual codec gives 'Could not load source video for face detection.' Keep the file under your tier's security limit (Free 10 MB; Pro 100 MB; Pro-media 500 MB; Developer 2 GB). The video face-pixelate engine is a Pro-media tier feature, which is also the realistic tier for a full lesson recording. - Step 3Set Sample rate for a busy room — Sample rate (1–15 Hz, default 4) is how many frames per second are inspected. A whole-class recording where children move, turn, and lean in and out of frame is better served by 6–10 Hz so each child accumulates detections. 4 Hz is fine for a fairly static seated lesson. Detection time scales roughly with sample rate; 15 Hz is the maximum.
- Step 4Set Pixel size for a school-appropriate 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 school video, 16–20 reads clearly as anonymised without looking alarming. Avoid 4–8, which can leave a child's face structure recognisable; you can go higher (24+) if a child is large and close to the camera.
- Step 5Set Padding to cover small, moving heads — Padding (0–1, default 0.25) grows each detected box outward before pixelation, covering hairline, jaw, and ears. Children fidget and turn, so 0.30–0.40 is a sensible margin to keep a face covered as it moves. Keep it lower when children sit close together and you don't want adjacent mosaics to merge.
- Step 6Run, then watch the whole clip before you share — 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, watch the entire recording — BlazeFace short-range is weakest on profiles, motion blur, small/distant faces, and children looking down at desks, and only the 12 most-detected tracks are kept. Any no-consent child the detector missed must be manually redacted before you share. Use a region redactor for non-face identifiers like a name on a worksheet, a name badge, or a class list on the wall.
Settings starting points for classroom footage
Only three controls exist — no sensitivity slider, no per-child toggle, no blur-strength (that's the separate face-blur tool). These are practical starting values for common school recordings, all within the real ranges.
| Recording type | Sample rate | Pixel size | Padding |
|---|---|---|---|
| Static seated lesson | 4 Hz | 16 | 0.30 |
| Active whole-class / group work | 8 Hz | 18 | 0.35 |
| Assembly or concert (children far away) | 6 Hz | 20 | 0.30 |
| Close-up of one child at a desk | 4 Hz | 24 | 0.30 |
| Heads-down deskwork (faces tilted) | 8 Hz | 18 | 0.40 |
What the engine does, and what it can't see
The pipeline when you press go, and the model's blind spots that matter most in a classroom. Browser path and local JAD Runner use the same BlazeFace short-range model and nearest-neighbour mosaic.
| Aspect | Behaviour | Classroom implication |
|---|---|---|
| Detection model | BlazeFace short-range, confidence fixed at 0.5 | Children looking down at desks (face tilted away) are a common miss |
| Where it runs | In-browser (TFJS) or local JAD Runner — no upload | Video of minors stays on the teacher's machine / school network |
| Tracking | IOU-clustered (0.2) spatial tracks across sampled frames | A child who moves around the room still gets one continuous mosaic |
| Track cap | Keeps only the 12 most-detected tracks | A class of 25+ exceeds 12 — but it mosaics the 12 most-seen, so confirm which children are covered |
| Pixelation | crop -> scale down (neighbor) -> scale up (neighbor) | Irreversible — the shared copy has no recoverable original |
| Output | Single H.264 .mp4 | Shareable on staff drives and school channels |
Cookbook
Walk-throughs grounded in what the engine actually does on classroom footage — one recording in, mosaic MP4 out. Stage labels are the real progress messages.
Lesson observation where two children lack media consent
Here the tool mosaics every detected face, so it covers the two no-consent children plus everyone else. If you only need to anonymise the whole class, that's exactly the behaviour; there is no per-face on/off.
Source: lesson-obs.mp4 (1080p, 8 min) Controls: Sample rate 6 Hz · Pixel size 18 · Padding 0.35 Progress: Loading face detector (one-time WebGPU + model warm-up) Detecting faces · sample 2881/2881 Pixelating faces · 12 faces · 480.0s / 480.0s Note: there is no per-face toggle -- every detected face is mosaicked. To anonymise the whole class this is ideal. If only specific children need covering and others must stay visible, this engine can't do selective; use a manual region redactor instead.
Heads-down deskwork keeps dropping the mosaic
Children working at desks tilt their faces down and away, which the near-frontal model misses. Raise the sample rate and padding to catch the moments they look up.
Problem: Faces tilted down -> BlazeFace short-range under-detects Default 4 Hz -> few of the look-up moments are sampled Fix: Sample rate 8 Hz -> more frames sampled, more look-up hits Padding 0.40 -> wider coverage when a face is found Reality: a face that never faces the camera may not be detected at all -> manually redact that child before sharing.
School concert, children at a distance
A stage recording where children are small and far away. Slightly heavier pixel size keeps the blocks readable at distance; expect to manually fix distant misses.
Source: concert.mp4 Controls: Sample rate 6 Hz · Pixel size 20 · Padding 0.30 Why: small/distant faces are a weak spot for the short-range model. pixelSize 20 keeps blocks visible; sampleHz 6 catches children moving on stage. Mandatory: scrub the whole clip; manually redact any no-consent child the detector missed in the back rows.
Whole class exceeds the 12-track cap
A class of 25 produces far more than 12 clusters. The engine keeps the 12 most-detected and drops the rest, so you must confirm the no-consent children are among the covered 12.
Detected clusters: 24
Track limit: 12 (most-detected kept)
Console: face-blur - 24 clusters, capped to 12 most-detected
Result: 12 lowest-hit clusters are NOT mosaicked.
Mitigation:
- Re-frame / split so the children needing coverage are the
most-seen, or process the room in segments of <=12 faces
- Always verify each no-consent child is actually mosaickedSource is a still class photo, not a recording
This engine is the video pixelator and needs a decodable video stream. A still JPEG/PNG is rejected.
Input: class-photo.jpg
Result: error -- "Source has no video stream"
(browser path: "Could not load source video")
Fix options:
- Wrap the still in a 1-2s clip, then pixelate
- Use an image/region redactor for a single class photo
- For a name on a worksheet (non-face PII) use a region redactorEdge 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 detail — there is no key or reverse pass. For footage of minors that's the point: the copy you share has no recoverable original. Keep your un-pixelated master on the secure school drive if you ever need it.
Every detected face is mosaicked — no per-child selection
ExpectedThe engine has no per-face on/off. It mosaics every face the detector finds, which is perfect for anonymising a whole class. If your scenario needs some children visible and only specific ones covered, this tool can't do selective redaction — use a manual region redactor for the specific seats instead.
It opens the video tool, not a photo batch tool
ExpectedChoosing the bulk face pixelator redirects to /video-tools/face-pixelate, which processes one recording and tracks faces across its frames. It is not a multi-photo uploader. Process each recording individually.
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.' In a classroom this usually means children facing away/down, small distant faces, or motion blur. Raise the sample rate, use a clearer source, and manually redact children 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 — a child who briefly looks up once — at a low sample rate cause this. Raise the sample rate so detections accumulate into a coherent track.
Child at the edge of frame 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 reframe so children aren't flush against the border, and manually check edge seats.
Class larger than 12 children
12-track capOnly the 12 most-detected tracks are kept (ranked by hit count); the console logs 'capped to 12 most-detected'. The most-seen children are covered; a child seen briefly can be dropped. For a full class, process in segments of 12 or fewer and confirm every no-consent child is actually mosaicked.
Tilted-down and profile faces are missed
Detection limitBlazeFace short-range is tuned for near-frontal faces. A child looking down at a desk, in hard profile, or with hair across the face is detected unreliably regardless of settings. Padding helps only after a detection exists — review the recording and manually redact any no-consent child the model skips.
First run warms up before any face appears
ExpectedThe detector model, WASM graph, and (on WebGPU) shaders compile on first use, shown as 'Loading face detector (one-time WebGPU + model warm-up)'. This one-time cost happens before sampling; later runs in the same session reuse the cached detector.
Output is always MP4
SupportedWhatever the input container (.mov, .webm, etc.), the result is an H.264 .mp4 — fine for staff drives, the school channel, and portfolio submissions. There's no option to keep the original container; re-mux afterward if needed.
Frequently asked questions
Can I cover only the children without media consent and leave the rest visible?
No — this engine mosaics every face it detects, with no per-face on/off. That's ideal when you want to anonymise the whole class. If you specifically need some children visible and only a few covered, use the manual region redactor at /video-tools/video-redactor to blur the seats of the no-consent children for the time they're in frame.
Is video of minors uploaded anywhere?
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. The recording never leaves the teacher's laptop or the school network.
Is the pixelation reversible?
No. Each face is downscaled with nearest-neighbour sampling and scaled back up, permanently destroying the detail — there is no key or reverse pass. The shared copy has no recoverable original, which is what you want for footage of children.
Does it work on a still class photo?
No — this is the video engine and needs a decodable video stream. A still is rejected with 'Source has no video stream'. For one photo, wrap it in a short clip or use an image/region redactor.
Why are some children at desks not covered?
Children working heads-down tilt their faces away from the camera, and the near-frontal short-range model under-detects those. Raise the Sample rate to 8 Hz to catch look-up moments and Padding to about 0.40, then review and manually redact any child who never faces the camera.
My class has more than 12 children — is that a problem?
The engine keeps only the 12 most-detected tracks. It mosaics the 12 most-seen children and drops the rest, so for a large class you must confirm each no-consent child is among the covered set, process the room in segments of 12 or fewer, and scrub the output.
How blocky should I make the mosaic for a school video?
Use Pixel size 16–20 for a clear-but-friendly anonymised look. Avoid 4–8, which can leave a child's face recognisable. Go higher (24+) only when a child is large and close to the camera.
How do I redact a name on a worksheet or a class list on the wall?
Those aren't faces, so a face detector won't find them. Use the manual region redactor at /video-tools/video-redactor to blur the rectangle for the time it's visible.
Is there a confidence slider 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 children, raise the sample rate or use a clearer recording — and manually redact what the near-frontal model can't see.
What format and tier do I need?
Output is always a single H.264 .mp4. The video face-pixelate engine is a Pro-media tier feature; Pro-media (500 MB) is also the realistic file tier for a full lesson recording. Free is 10 MB, Pro 100 MB, Developer 2 GB — one video at a time.
Will this catch every child automatically?
No automated detector catches every face. Profiles, heads-down poses, small/distant faces, and motion blur are missed by the near-frontal model, and only the 12 most-detected tracks are kept. Always watch the full recording and manually redact any no-consent child before sharing — the tool assists review, it doesn't replace it.
Should I pixelate or blur, and what about the audio?
Pixelate (this tool) is irreversible and reads as clearly anonymised. A softer, natural blur is at /video-tools/face-blur. If a child's name is spoken, mute that range with /video-tools/audio-mute-region, and strip device/GPS metadata 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.