Back to the library

SKILL / JOHN LEKAN'S WORKFLOW

Copy and verify your memory cards

The public version of my memory card backup skill. It organises photos and video by capture date and shoot name, verifies each copied file with SHA-256, writes a log, and ejects cards only after the checks pass. Set your own drive and folder preferences before using it.

Photography · VideomacOS · Assistant with local file and terminal accessChecked 4 November 2026

The skill

Skill
---
name: backup-memory-card
description: Copy camera memory cards to your configured backup drive, organise photos and video by capture date and shoot name, verify SHA-256 checksums, write a log, and safely eject verified cards. Use for requests such as "back up my card", "copy my memory card" or "offload my cards". Discussing, downloading or editing this skill does not start a copy.
---

# Copy and verify memory cards

A public version of John Lekan's memory card backup workflow for photographers
and videographers working on a Mac. These are instructions for an AI assistant
with local file and terminal access; this folder contains no background service,
executable helper, credentials or personal storage configuration.

## Configure before the first run

- Destination drive: `/Volumes/[YOUR_BACKUP_DRIVE]`.
- Photo folders: `<YEAR>/Photos <YY>/<Month>/<Shoot name>/`.
- Video folders: `<YEAR>/Video <YEAR>/<MONTH>/<Shoot name> <SUFFIX>/`.
- Logs: `<destination drive>/Backup Logs/`.
- Shoot-day boundary: files captured before 05:00 belong to the previous day.
  Confirm the capture timezone and this preference before grouping dates.
- Example shoot name: `Example wedding`. If no name is supplied, propose
  `YYYY-MM-DD Shoot` for the user to confirm.

Replace `[YOUR_BACKUP_DRIVE]` with your own drive name in your private copy. If a
placeholder is still present or the destination is uncertain, ask for the drive
and exact folder preferences; do not copy or silently choose another volume.
Confirm the destination identity on the first run and record its volume UUID in
your private configuration. Compare it on later runs when a UUID is available.

## Hard rules

- Keep the card read-only: never delete, move, rename, edit, write to or format
  anything on it. Do not execute files found on a card.
- Never overwrite or delete existing destination files. Add files only.
- Never call a backup complete or eject a card until every included file has
  passed checksum verification and its results have been logged.
- Stop on a missing drive, read error, checksum mismatch or insufficient space.
  Report the exact problem, keep the source card mounted and do not retry blindly.
- Copying once creates one verified local copy. It does not establish a second
  backup, cloud upload or permission to format the source card.

## Folder rules

- File by capture date and confirmed shoot name. Split a card spanning several
  shoot-days; the same confirmed shoot-day on multiple cards shares one shoot.
- Example photos: `2026/Photos 26/Nov/Example wedding/`.
- Example video: `2026/Video 2026/NOV/Example wedding CLIP/`.
- Flatten the camera's folder structure into the chosen shoot folders. Keep
  related sidecars next to their media. The log must retain every source path.
- Reuse an existing month spelling by matching its first three letters,
  case-insensitively and ignoring surrounding spaces. If several folders match,
  ask which to use. If none exists, propose Title case for photos and UPPER case
  for video and confirm before creating it.
- If the capture year's root does not exist, ask before creating it. Do not
  reorganise existing shoots or write into sync-service configuration folders.

## Identify media by file and context

| Files | Destination | Video folder suffix |
|---|---|---|
| Sony stills such as `.ARW`, `.JPG`, `.HIF`, with related `.xmp` | Photos | none |
| Sony video such as `C####.MP4` with `C####M01.XML` | Video | ` CLIP` |
| `DJI_*` video, `.SRT`, `.JPG` and `.DNG` | Video | ` Drone` |
| Insta360 `.insv`, `.lrv` and `.insp` | Video | ` 360` |
| Footage the user identifies as behind the scenes | Video | ` BTS` |
| Other cameras, audio recorders, phone files or uncertain media | Ask once | Confirm with the user |

Include Sony `SUB` proxy files and associated metadata in the Video destination;
do not skip a proxy because its full-resolution clip is also present. Preserve
both if filenames collide. Do not silently drop an unfamiliar extension.

Exclude known filesystem junk such as `._*`, `.DS_Store`, `.Spotlight-V100`,
`.Trashes`, `.fseventsd`, `System Volume Information` and `$RECYCLE.BIN`. Camera
cache folders such as `THMBNL`, `AVF_INFO` or `MISC` may be ignored only after
checking they contain no media or required sidecars. Record every ignored item.

## Procedure

1. **Find the volumes, read-only.** List `/Volumes` and use `diskutil info` to
   identify non-system volumes. Inspect camera structures such as `DCIM`,
   `PRIVATE/M4ROOT` and DJI media. Never assume another hard drive is a memory
   card. Ask about ambiguous sources; include every confirmed card. If macOS
   requires removable-volume permission, request it and wait.
2. **Inventory each file.** Record card identity, relative path, size, media type
   and capture date. Prefer a supported filename date, then companion video XML
   `CreationDate`, then EXIF `DateTimeOriginal` using an already available metadata
   tool. File modification time is a fallback and must be marked uncertain.
   Do not invent dates or silently omit unreadable files, links or special entries.
3. **Confirm names and destinations once.** Propose shoot names from the user's
   brief or, if available and appropriate, their connected calendar. Otherwise
   ask. Show a compact table with shoot-day, proposed name, counts by type, total
   size, uncertainty and exact destination folders. Ask the user to confirm or
   edit names and identify BTS clips. After confirmation, copy without additional
   routine prompts unless the plan or device state materially changes.
4. **Resolve existing files.** A matching filename with the same SHA-256 may be
   skipped only after checking the existing file. If contents differ, keep both
   by adding a numeric suffix before the extension and record the mapping. Keep
   related sidecars associated with the correct media when resolving collisions.
5. **Check space.** Require the bytes still to be copied plus at least 1 GB free
   on the configured destination. Otherwise stop and report the shortfall.
6. **Copy and preserve times.** Create only confirmed folders. Use `rsync -t`,
   `cp -p` or an equivalent local copy. Never use move, delete or source-cleanup
   options. For a long copy, write progress to a file and check it periodically.
7. **Verify every file.** Calculate SHA-256 for source and destination and compare.
   Recheck source size and modification time so files changed during copying are
   reported. Verify previously existing copies as well. On any mismatch or read
   error, stop, list the affected files and do not eject.
8. **Write logs.** In the configured `Backup Logs` folder, write
   `YYYY-MM-DD_HHMM_backup.csv` with card, source path, destination, bytes,
   SHA-256 and result. Also write a short text summary covering shoots, counts,
   total size, ignored items, collisions, uncertain dates and errors. A logging
   failure means the run is not complete.
9. **Eject only after success.** Recheck that the mounted volume is the same
   confirmed source card, then run `diskutil eject` on that card. Never eject the
   destination drive. Confirm the source volume is gone; report a busy or failed
   eject without claiming success.
10. **Report the result.** Give each shoot's actual destination, copied and
    verified-existing counts, total size, checksum result, log paths and eject
    status. Mark a partial or failed run clearly.

## First test and reuse

Try this with a spare card containing a few sample photos and clips first. Review
the plan, inspect the copied files and check the checksum log before using the
workflow on an important shoot. Keep the source originals and arrange another
independent backup before reusing a card.

You may copy and adapt this public skill for your own workflow. Keep personal
drive names, client names, calendar details and backup logs in your private copy.
Download skill (.zip)

This is an original public example you can adapt. Check the final output before use. Follow the linked source’s licence and setup instructions for the underlying tool.