Camera Toolkit is the native macOS app I use to move photos and video off my cameras, split a card into the events I actually shot, and get each event into a predictable editing and archive layout.
I built it because a camera card is not always one event. A single card can cover several shoots, and one event can span multiple cards or folders. I wanted to select those files quickly, save the event once, preview Sony RAW files without depending on Finder, and hand the resulting folders to Photomator or another editor without reorganizing everything by hand.
The safety rule is simple: the camera source stays read-only. Previewing never copies bytes, copy operations never overwrite conflicts, and archive operations verify checksums before reporting success.
- Plug in a camera card and browse it immediately.
- Create or reopen an event, then select its photos across as many folders or cards as needed.
- Preview the camera's embedded JPEGs, including supported Sony lossless-compressed
.ARWfiles. - Copy only that event into a temporary workspace and verify every copied file.
- Open the RAW files in Photomator and keep exports beside the event in a consistent layout.
- Archive the verified originals into my long-term photo library without overwriting conflicts.
- Browses camera sources, buffer drives, photo-library folders, and ordinary local folders in one Finder-style window.
- Builds thumbnails and large previews from the JPEG embedded in supported Sony
.ARWfiles, including lossless-compressed RAW variants that Finder may not preview. - Opens the selected image with Space, moves through selections with the arrow keys, and opens a RAW in Photomator from the preview window.
- Saves events and assigns photos from multiple folders or camera cards to the same event.
- Shows a fast metadata-only import preview before any copy starts.
- Opens a separate persistent Transfer Queue window with per-file bytes copied, speed, verification state, and clear disconnect failures.
- Copies selected files to a buffer, verifies their checksums, then organizes verified originals into the photo library without overwriting conflicts.
- Stores event/file relationships in SQLite through GRDB and includes a bounded, read-only SQL inspector.
- Checks whether known files already exist in Immich and stores per-event album/upload preferences. Photo upload is not enabled yet.
- macOS 14 or newer
- Swift 6 and Xcode 16 or newer for source builds
- Photomator is optional, but required for the preview window's Open in Photomator action
- An Immich server and API key are optional
From a clone of this repository:
swift test --jobs 1
swift run CameraToolkitPackage a locally ad-hoc-signed app bundle:
scripts/package-app.sh
open dist/CameraToolkit.appTo install that bundle into /Applications, run scripts/package-app.sh --install. Set CAMERA_TOOLKIT_INSTALL_DIR to install into a different directory.
Open Camera Toolkit → Settings and choose:
- One or more camera-source folders.
- A temporary buffer folder.
- A long-term photo-library root.
- Optionally, an Immich server URL and API key.
No removable-drive, network-share, username, or home-directory path is compiled into the app. API keys are stored in macOS Keychain; paths and event preferences stay in the app's local configuration.
- Create or select an event.
- Turn on selection mode and choose photos in any number of source folders.
- Assign the collected photos to the event.
- Use Preview Event for a quick path-and-size comparison.
- Use Copy Event + Verify to copy the bytes into the buffer and checksum them.
- Use Archive + Verify to organize verified originals in the library and write a manifest.
The default layout is intentionally readable:
Buffer/<year>/<event>/
├── <camera>/Card Copy/
├── Photomator/
└── Exports/
├── Masters/
├── Web/
└── Social/
Photo Library/Originals/<year>/<event>/<camera>/
├── RAW/
├── Photos/
├── Video/
└── Other/
| Shortcut | Action |
|---|---|
| Space | Preview the selected file |
| Arrow keys | Move through files or the preview selection |
| Command-B | Toggle the locations sidebar |
| Command-Plus / Command-Minus | Increase or decrease thumbnail size |
| Command-C | Copy selected file references |
| Command-A | Select all files |
| Command-R | Refresh |
| Option-Command-E | Open Event Library |
| Shift-Command-I | Open the SQLite inspector |
| Shift-Command-K | Open the full shortcut reference |
- Camera-source operations are read-only.
- Metadata previews do not claim checksum verification.
- Copy and archive paths refuse to overwrite a different existing file.
- Archive success requires checksum verification and writes a manifest.
- Cleanup moves verified files into a recoverable
_Trash/<batch>area; permanent deletion is separate and confirmation-gated. - Tests operate only in temporary directories.
See Safety, Configuration, and Architecture for implementation details.
Camera Toolkit is early-stage macOS software. The local browsing, preview, event, verified-copy, archive, catalog, and Immich-presence paths are implemented. App signing/notarization and Immich uploads are not implemented.
Contributions are welcome; start with CONTRIBUTING.md. Camera Toolkit is available under the MIT License.