SafeFrame

No server · no uploads · works offline

Video safety that never leaves the device

SafeFrame detects inappropriate video content with a two-tier ML cascade running entirely in your browser — from low-end phones to high-end desktops. Because a kids-safety product should never ship a child's screen to a server.

Two-tier ML cascadeInstallable PWA · offline after first scanTimestamped segment mapLow-end to high-end devices

How it works

1Sample

Seek-based frame extraction at ~1 fps, densifying around anything suspicious — a 10-minute video means hundreds of frames, not eighteen thousand.

2Classify

A 4 MB MobileNet screens every frame; only borderline frames escalate to a quantized ViT running in a Web Worker. Big-model accuracy, small-model cost.

3Aggregate

Scores flow through a smoothed sliding window with hysteresis, producing flagged segments with timestamps — not just a yes/no.

4Respond

On a flag: instant blur, pause, and a calm replacement card with a parent gate. Five response modes, all switchable live.

The models doing the work

Two open image classifiers, downloaded once and run by your own browser — never on a server. The small one screens everything; the big one is only consulted when the small one isn't sure.

Tier 1 · MobileNetV2

screens every frame

A ~3.5M-parameter convolutional network (NSFWJS build), trained to score frames across five classes: porn, hentai, sexy, neutral, drawing. About 4 MB, shipped in the app's own build rather than fetched from a model hub, and cached for offline use after the first scan.

Runtime: TensorFlow.js · WebGL with WASM fallback

Tier 2 · Vision Transformer

verifies borderline frames

An ~86M-parameter ViT-base NSFW detector (AdamCodd, open weights) — roughly 25× larger, consulted only on frames the screener can't call confidently, up to 40 per video. Fetched once on capable devices, then cached; low-end devices never download it at all.

Runtime: Transformers.js / ONNX · WebGPU with WASM fallback · runs in a Web Worker

The privacy story is the architecture

There is no backend in this product — not a small one, none. No database, no API routes, no telemetry. Model weights are cached by your browser so the second visit works fully offline. The honest consequence: some cross-origin URLs can't be analyzed, and we tell you so instead of quietly routing your video through a proxy.

All inference on-device
Schema-validated verdict JSON
Scales from low-end to high-end devices

See it work on your own video

Pre-scan for a full segment map, or turn on live guard and watch it react in real time.

Open SafeFrame