On-device AI for macOS

Rediscover when your photos were taken

Your scanned prints deserve accurate dates. CircaPhoto uses face recognition and age estimation — running entirely on your Mac — to work out when each photo was taken and write the correct date back to your Apple Photos library.

Anchor date set
Date applied by CircaPhoto
Face needs tagging

Every scanned photo has today's date. That's wrong.

When you scan a print from 1972, your scanner records the scan date — not when the photo was actually taken. Apple Photos inherits that wrong date, so decades of family history ends up buried or unsortable. CircaPhoto fixes this by reasoning from what the photos themselves contain: the faces of people you know and how old they look.

Scan date 14 Aug 2026 ← what Photos thinks
Actual date Jul 1972 ← what CircaPhoto estimates

How it works

Three steps. Each album represents one person — that's the key to accurate dating.

1

Create an album per person in Photos

In Apple Photos, create a dedicated album for the person whose photos you want to date — for example "Grandma", "Dad 1960s–70s", or "Keith". Add all their scanned prints to that album. Photos can appear in multiple albums simultaneously, so there's no need to move or duplicate anything.

Why one album per person? The date estimation algorithm fits a timeline to a single person's apparent age across photos. Mixing multiple people would produce a meaningless result.
2

Identify faces and set anchor dates

Select the album in CircaPhoto. Click Detect Faces — the app scans every photo using Apple's Vision framework, then asks you to name the primary person and confirm which detected faces are theirs.

Next, right-click 2–3 photos whose dates you already know and set an anchor date. Anchors spread across different ages of the person give the best results.

3

Review suggestions and apply to Photos

Click Show Suggested Dates. CircaPhoto presents date estimates grouped by confidence — high confidence suggestions (interpolated between anchors) are pre-accepted. Review, adjust any dates you disagree with, and click Apply. The correct dates are written directly to your Apple Photos library.

The science

From apparent age to actual date

CircaPhoto uses Apple's Vision framework to detect faces and compute a geometric "feature print" for each one. A custom Core ML model then estimates the apparent age visible in the photo — not the person's true age, but how old they look.

From your anchor dates, the app fits a linear model: estimated date = slope × apparent age + intercept. The intercept is the implied birth date; the slope corrects for any bias in the age model so your anchor photos land exactly on their known dates.

With 2 or more anchors spanning different ages, this calibration is highly accurate. Photos estimated by interpolation (age falls between your two youngest and oldest anchors) are marked high confidence. Estimates outside that range are marked medium or low confidence so you know to look twice.

High confidence
Apparent age falls between anchors — interpolated from known data points
Medium confidence
Apparent age is within ~2 years outside the anchor range
Low confidence
Significant extrapolation — review and adjust before applying

Everything you need, nothing you don't

Anchor-based calibration

Right-click any photo whose date you know and set it as an anchor. Two or three anchors spanning different ages calibrates the entire album's timeline.

Writes directly to Apple Photos

Accepted dates are written to your Photos library as the photo's creation date — visible in Photos, iCloud, and any app that reads photo metadata.

Dated by CircaPhoto album

Every photo CircaPhoto dates is added to a dedicated "Dated by CircaPhoto" album in Photos — a durable, always-visible record of what the app has touched.

Multi-person, multi-album

Work different albums independently. A photo that appears in two albums carries the date context from whichever album dated it first — safely protected from overrides.

Birth date floor clamping

Enter an optional birth date for each person. CircaPhoto will never suggest a date earlier than their birth, or one that contradicts their apparent age.

Granular reset at every level

Reset a single photo's date, all dates in an album, or do a full system reset that restores every original date and removes all CircaPhoto data.

Know the status of every photo at a glance

Photo grid badges tell you exactly what has happened to each photo and what — if anything — still needs your attention.

1972
Anchor date You've confirmed the known date for this photo. It calibrates suggestions for everyone in the shot.
1965
Anchor inherited Anchor set while working a different album. The date is valid and shared across albums.
Date applied by CircaPhoto The estimated date has been accepted and written to Photos. Protected from being overridden.
Date inherited CircaPhoto dated this photo in another album. Shown here for context; date is protected.
Manually dated You set this date directly — used for photos with no detectable face or unusable age estimate.
Tag face
Face needs tagging A face was detected but the primary person hasn't been confirmed here yet. Tap to open the tagging sheet.
No face
No face detected Vision found no face. Tap to set a date manually.
No age
Age unreadable A face was found but the age model couldn't produce an estimate. Tap to set manually.

Your photos never leave your Mac

Every piece of AI in CircaPhoto runs on-device using Apple's Vision framework and a local Core ML model. No photos, no face data, and no dates are ever uploaded to any server. There is no account, no subscription, and no cloud — just your Mac and your Photos library.

Face detection runs entirely on-device via Apple Vision
Age estimation uses a local Core ML model — no API calls
All data stored in a local SwiftData database in the app's sandbox
No account, no analytics, no network requests

Give your family photos the dates they deserve

CircaPhoto is in early development. Request access to be among the first to try it.

Request Early Access