№ 03 — Redact
App Store

Faces off.

Native macOS and iOS app that redacts faces and licence plates in photos and video — automatically, entirely on-device, without the cloud and without an account.

Redact on macOS: detected faces in a group photo, pixelated, with a slider for the before/after comparison
On-Device YOLOv11m · ANE Photo & Video 0 Bytes Sent
Swift SwiftUI Core ML YOLOv11m-face Vision Core Image AVFoundation StoreKit 2 Apple Neural Engine macOS iOS iPadOS Privacy-First

The Challenge

Publishing demo photos without violating the personality rights of the people in them — that sounds simple, but it isn't. Existing tools are either CLI utilities like deface or uniface with no graphical interface, or App Store apps that secretly run as WebView wrappers around a cloud API.

Neither is fit for workshop or conference material that needs to be anonymised fast, locally, and without any data leaving the device.

Redact is a real native app — with first-class detection powered by a fine-tuned YOLOv11m model running fully on-device. No cloud, no account, no setup. Drag, drop, done.

The model runs through Core ML on the Apple Neural Engine. Because the YOLO export is strongest on frontal views, its hits are merged by IoU with Apple's Vision framework, which covers profiles and partial occlusion. Large images additionally run through the model as overlapping tiles, so small faces don't shrink below the detection threshold. A second detector finds licence plates.

The real leap came with video: detection per frame or adaptively with object tracking in between, boxes consolidated into identity-based tracks with gap bridging and interpolation — editable in a timeline before AVFoundation re-renders the file. What began as a photo tool became a multi-platform app for both media types: macOS for batch work at the desk, iOS and iPadOS for anonymising on the go.

Project Details

Role Solo developer, design & ML integration
Timeline Ongoing development, several release cycles
Platform macOS 26+ · iOS 18+ · iPadOS 18+
Media Photos (JPG, PNG, HEIC, TIFF) & video (H.264, HEVC)
Detection YOLOv11m-face + Vision · faces & licence plates
Runtime Core ML · Apple Neural Engine
Privacy 100% on-device, zero cloud
Model Free to use, Redact Pro via StoreKit 2
Status Available on the App Store

The app

The same engine on three platforms — at the desk for entire folders, on the go for the one photo that's about to hit the group chat.

Redact's video tab on macOS with the track timeline; the children's faces are covered by flower stickers
Video · macOS Every person becomes its own track on the timeline — individually toggled, corrected and given its own effect.
Redact on macOS showing a street scene with the face and the licence plate redacted
Plates & EXIF · macOS A second detector finds licence plates; on export, GPS coordinates and camera metadata can go with them.
Redact on iPhone: the effect and sticker pack picker below the image
Effects · iOS Mosaic, blur, black bar or overlay — with a single emoji or one of eleven emoji and sticker packs.
Redact on iPad: a video with its track timeline and the effect picker open
Video · iPadOS Live preview instead of a render queue: effects sit on top of the player, and only the export writes a file.
Redact on macOS with a densely packed concert crowd; the toolbar counter reads 1,015 of 1,015 faces detected
Scale 1,015 faces in a single image. Large photos additionally run through the model as overlapping tiles, so the back rows don't shrink below the detection threshold.

What Redact does

🧠

YOLOv11m-face + Vision

Fine-tune of the YOLO11m model trained specifically for face detection — ~20M parameters, bounding boxes with confidence, embedded NMS. Its hits are greedy-IoU merged with Apple's Vision framework, which covers profiles and occlusion.

🎬

Video anonymisation

A two-phase pipeline: detection across all frames first — either per frame or adaptively with object tracking between keyframes — then rendering via AVAssetReader/Writer. The audio track passes through untouched.

🧵

Identity-based tracks

Individual boxes are linked into per-person tracks by IoU matching — including gap bridging, re-identification, and linear interpolation between the stored keyframes.

🎚️

Timeline editor

Tracks can be toggled, corrected, and given their own effect in a timeline. A live preview shows the result; the file is only re-rendered on export.

🚗

Licence plates

A separate detector finds number plates in photos and video — essential for street scenes, car parks, and anything published with a vehicle in frame.

🎨

Four effects, eleven packs

Mosaic, Gaussian blur, black bar, or an overlay — the latter with a single emoji or one of eleven emoji and sticker packs. Strength, padding, and rectangular or elliptical masks are all adjustable.

⚡️

Apple Neural Engine

Inference via Core ML on the ANE — fast enough to batch-process entire photo folders. No internet, no GPU spin-up, no fan.

🔒

100% on-device

No cloud, no telemetry, no account. Photos and video never leave the device — all processing happens locally.

Manual corrections

Toggle detected faces on/off with a click, add missed faces by dragging. Confidence threshold is adjustable — full control over the output.

📁

Batch & drag & drop

Drop single images or entire folders — on macOS even straight from a Finder right-click. Results land in an anonymized/ subfolder, originals stay untouched.

🧹

Strip EXIF data

Optionally remove GPS coordinates, camera model, and timestamps on export — useful when anonymised images should actually be anonymous.

🌐

Native details

German and English via Apple String Catalog (xcstrings), switchable inside the app. Light and dark theme, onboarding, project library, privacy manifest — all native, all Apple.

Development process

01

Model evaluation

Identified YOLOv11m-face as the best balance of accuracy and speed, converted to Core ML via coremltools and packaged as MLProgram.

02

macOS prototype

SwiftUI app with NavigationSplitView, drag & drop, a Core Image pipeline, and TaskGroup-based batch processing. First version: locally pixelating a folder.

03

iOS port

Shared code in a RedactCore package, platform-specific UI for iOS/iPadOS, memory crashes on large photos fixed via ImageIO downsampling.

04

App Store release

Localisation (DE/EN) via xcstrings, privacy manifest, app icons, splash font — and finally the App Store launch.

05

Video pipeline

Frame extraction, detection modes, and track building in RedactCore; rendering via AVAssetReader/Writer with audio passthrough — the same services power both apps.

06

Tracking & memory

Where the real work went: keeping tracks stable, bridging gaps — and keeping memory in check so iOS doesn't kill the app on 4K footage.

07

Live preview & editor

Effects are composited over the player in real time instead of being written to a file. Rendering happens on export only — plus a timeline and per-track effects.

08

Redact Pro

Monetisation via StoreKit 2 with a subscription and a one-off lifetime option. The entitlement is runtime state, and the render paths check it themselves — not the UI.

Numbers

0
Bytes leaving the device
~38 MB
Embedded ML model
2
Media types (photos & video)
3
Platforms (macOS, iOS, iPadOS)

Privacy by design.

Redact is free on the App Store — face and licence-plate detection, mosaic and blur, unlimited photo export. Redact Pro unlocks the remaining effects and full video export. If you're looking for a similar on-device solution for your project, or have feedback, I'd love to hear from you.