Getting Started
Photo Export is a native macOS app that exports your Apple Photos library to local or external storage, organized by year and month.
Prerequisites
Section titled “Prerequisites”- macOS 15.0 or later
- iCloud Photos enabled — Photo Export reads your local Photos library via Apple’s PhotoKit framework. It sees exactly what the built-in Photos app sees. For your iCloud photos to appear, iCloud Photos must be turned on: go to System Settings → Apple Account → iCloud → Photos and make sure it’s enabled.
Download
Section titled “Download”Photo Export is available through two channels:
- Mac App Store — Coming soon. Automatic updates, trusted distribution. Your purchase supports development of an open-source project.
- GitHub Releases (free) — Download the latest
.dmgfrom the GitHub Releases page. Open the DMG and drag Photo Export to your Applications folder.
Both versions are identical in functionality, signed and notarized by Apple.
First launch
Section titled “First launch”1. Grant Photos access
Section titled “1. Grant Photos access”On first launch, macOS will prompt for Photos library access. Click Grant Access to allow the app to read your photo and video library.
If you choose Select Photos, the app will work with only the photos you pick. If you accidentally deny access, you can change permissions later in System Settings → Privacy & Security → Photos, or click the “Open System Preferences” button shown in the app.
2. Choose an export destination
Section titled “2. Choose an export destination”An onboarding screen will guide you through selecting the folder where photos and videos will be exported. This can be:
- A folder on your Mac (e.g. Desktop, Documents, or a dedicated backup folder)
- An external USB or Thunderbolt drive
- A network volume (if mounted)
The folder needs to be writable. The app remembers your choice across launches using a security-scoped bookmark.
3. Start exporting
Section titled “3. Start exporting”Once the destination is set, you’ll see the main window with a year/month sidebar on the left and a thumbnail grid in the center. From here you can:
- Click a month to browse its photos
- Click Export All in the toolbar to queue the entire library
- Use File → Import Existing Backup… (Cmd+Shift+I) if you already have a previous export and want to avoid re-copying those files
Export progress is shown in the toolbar. You can pause, resume, or cancel at any time.
Troubleshooting
Section titled “Troubleshooting”- “Export folder is not reachable” — Check that the external drive is plugged in and mounted.
- “Export folder is read-only” — Right-click the folder, choose Get Info, and make sure you have write permission.
- Photos permission denied — Open System Settings → Privacy & Security → Photos and enable access for Photo Export.
Updates and distribution channels
Section titled “Updates and distribution channels”Photo Export is distributed through two channels. Both versions are identical in functionality.
- Mac App Store users receive updates automatically through the App Store.
- GitHub Releases users should check the Releases page for new versions.
Both builds can be installed on the same Mac simultaneously — they use separate bundle identifiers and separate data (export history, bookmarks, preferences).
Switching between channels
Section titled “Switching between channels”If you want to move from one channel to the other:
- Install the new channel’s build
- Select the same export folder you used before
- Go to File > Import Existing Backup… (Cmd+Shift+I) — this scans the destination folder, matches exported files to your Photos library, and rebuilds the export history so future exports skip already-exported assets
Without step 3, the new build treats the destination as fresh and may create duplicate files.
Build from source
Section titled “Build from source”If you prefer to build from source or want to contribute:
git clone https://github.com/valtteriluomapareto/vibe-icloud-photo-export.gitcd vibe-icloud-photo-exportopen photo-export.xcodeprojPress Run (Cmd+R) with the photo-export scheme selected. Requires Xcode 16.2+.
See the Contributing guide for more details on development setup, running tests, and linting.