macOS menu bar app

CardSync

for Google Photos

Slot in the card. Walk away. Your new photos and videos are in Google Photos by the time you've made a cup of tea.

Download — coming soon Build it yourself
macOS 14+ Never uploads twice Nothing on the card is touched

Import finished

Card “EOS_DIGITAL” · 4 min 12 s

Uploaded27
Already uploaded4,000
Skipped (unreadable)3

The summary always separates what changed from what didn't, so a re-inserted card reads “nothing to do” rather than looking like a 4,000-file event.

What it does

Four promises, kept.

01

Automatic

Insert a card you've used before and the upload starts on its own. No window to open, no button to find.

02

Asks once per card

The first time it meets a card it asks what to send — all of it, or only shots from a date onwards — so a card full of history never gets uploaded behind your back.

03

De-duplicating

Every file is matched on its contents and on its capture metadata. Re-inserting a card, copying a card or renaming files never causes a second upload.

04

Non-destructive

Nothing on the card is ever modified or deleted. CardSync opens files to read them and that is the entire extent of its ambition.

The clever bit

How it knows
it's seen a
photo before

Each file runs down this ladder and stops at the first match. The cheap checks come first, so a card you've imported before costs almost nothing to re-scan.

Filenames are deliberately never used as identity — cameras reset their counters, so DSC_0001.JPG refers to a great many different photos over a card's life.

  1. Quick key

    Volume UUID + path + size + modification time. Catches the same file on a card you've already imported.

    Cost: no file read at all

  2. Content hash

    SHA-256 of the file itself. Catches the same file under any name, on any card.

    Cost: reads the file

  3. Shot key

    Capture time to the sub-second, camera make, model and serial, dimensions and media class. Catches the same shot re-encoded, renamed or exported.

    Cost: metadata only

  4. Within this card

    Catches the same photo appearing twice on one card.

    Cost: free

Bursts stay safe

The shot key is only trusted when the camera wrote a sub-second timestamp. Without one, a burst can put several genuinely different frames in the same second — so those files fall back to content hashing alone, and the count is reported in the summary rather than quietly guessed at.

RAW + JPEG both upload

Media class is part of the shot key, so a .CR3 and its .JPG sibling produce different keys despite sharing a timestamp. Both go up, as you'd want.

The honest bit

One thing CardSync
genuinely cannot do

It can't ask Google what you already have

Since Google's March 2025 API changes, a third-party app can only append to your library. No scope lets an app read what is already in your Google Photos account.

So CardSync answers “do you already have this?” from its own local record of everything it has sent. A photo that reached Google Photos by some other route — phone backup, the web uploader, a previous tool — is invisible to it, and a card containing that photo would be uploaded again.

That is exactly what the new-card prompt is for. The first time a card is inserted, you pick a starting point and everything older is left alone. After that first import the card is known, and every later insert uploads only what's new.

The first time you insert a card, you get three choices

Everything on the card

All of it, no questions.

Only since a date

That day onwards, inclusive.

A date range

Both endpoint days, inclusive.

The file count updates as you move the dates, so you can see exactly what's about to happen before anything leaves the card. Choose “not now” and the card stays unknown — it'll ask again next time.

The rest of it

Small print, large type

  • Requires

    macOS 14 or later, and a Google account.

  • Lives in

    The menu bar. No Dock icon, no app window unless you open Settings.

  • Triggers on

    Volumes containing a DCIM folder, so plugging in an ordinary USB drive does nothing. A manual upload can scan any volume.

  • Big files

    Anything over 32 MB uses Google's resumable upload protocol, so a dropped connection doesn't discard a large video.

  • Where photos land

    Your main library, sorted by capture date. No albums are created. Uploads count against your Google account storage.

  • Signing in

    A browser window opens and the app catches the redirect on a temporary local listener. Nothing is exposed to the network. Your refresh token goes to the macOS keychain.

  • Privacy

    Crash reports and anonymous counters only — never filenames, paths, card names, EXIF, camera serials or your Google account. Read the privacy policy →