Skip to content

rhoopr/kei

Repository files navigation

kei logo

kei: fast, parallel backups
for cloud-hosted photos and videos.

Rust MSRV 1.91+ License: MIT Version Build
Homebrew Downloads Docker Pulls

kei copies cloud-hosted photos and videos into folders you control. Today that includes iCloud Photos. The goal is a fast, parallel local backup you can run once, keep as a mirror, or leave unattended in Docker.

It handles the parts that make photo backups annoying: big libraries, shared libraries, albums, Live Photos, RAW files, edited versions, retries, interrupted downloads, and existing archives you don't want to download twice.

Warning

kei is pre-release software. Minor versions may contain breaking changes.

Read CHANGELOG.md before updating.

Install

brew install rhoopr/kei/kei
docker pull ghcr.io/rhoopr/kei:latest

Pre-built binaries for macOS, Linux, and Windows are on the Releases page. For Docker Compose, source builds, FreeBSD, and NAS setup, see Install.

Start

Important

v0.20 moved durable sync settings into TOML.

Keep CLI flags for one run, env vars for secrets and service glue, and saved settings in config.toml.

If an old command fails with a removed flag such as --download-dir, move that value into the config file:

[download]
directory = "/photos"

Use the v0.20 migration guide and example.config.toml for the full map.

kei config setup
kei sync

The setup wizard creates ~/.config/kei/config.toml, asks where photos should land, and can save your password in the OS keyring. You'll still approve 2FA on a trusted Apple device the first time.

A tiny config looks like this:

[auth]
username = "you@example.com"

[download]
directory = "~/Photos/iCloud"

After the first run:

kei status
kei sync --recent 30d
kei list albums

What kei gives you

  • Fast, parallel downloads for large cloud photo libraries.
  • A local copy of your media, with no Apple Photos library required.
  • Folder layouts for dates, albums, smart folders, shared libraries, and unfiled photos.
  • Original photos and videos, plus Live Photos, RAW siblings, and edited versions when you ask for them.
  • Resumable downloads and checksum checks before files are marked complete.
  • One-shot sync, watch mode, Docker, systemd, launchd, and Windows service support.
  • Maintenance commands for status checks, verification, reconcile, reset, and existing-file import.

Today kei syncs iCloud Photos. Immich, Google Takeout, Nextcloud, and Ente support are on the roadmap.

Important

kei needs iCloud Photos web access. If Advanced Data Protection is on, turn it off and enable "Access iCloud Data on the Web" in your Apple ID settings. See Authentication.

Product direction

kei is built around reliable local backup: safe file writes, explainable state, service-friendly operation, and no destructive behavior unless you explicitly ask for it.

Read the product charter and roadmap for current priorities.

Common setups

Keep a daily mirror

[auth]
username = "you@example.com"

[download]
directory = "/photos"

[watch]
interval = 86400

Run it with kei service run, Docker Compose, or kei install.

Sync only part of the library

[filters]
albums = ["Family", "Trips"]
unfiled = false
media = ["photos", "videos", "live-photos"]

You can also sync recent media for one run:

kei sync --recent 100
kei sync --recent 30d

Adopt files you already have

kei import-existing
kei sync

Coming from icloudpd? Read Migrating from icloudpd.

Docs

Open an issue for bugs or sharp edges: Issues

License

MIT - see LICENSE

Acknowledgments

kei's iCloud support builds on reverse-engineering from icloud-photos-downloader. kei was originally published as icloudpd-rs before broadening beyond iCloud Photos.

About

Fast, parallel backups for cloud-hosted photos and videos - one-time exports, local mirrors, and unattended Docker runs.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors

Languages