Skip to main content

Convert iCloud Photos backup to a useful folder structure

Project description

bye-cloud

Convert the iCloud photos archive from Apple so you can move to immich.

How to get your photos from Apple

Go to https://privacy.apple.com/accounts and request a copy of all of your data. It will take a while -- a few days, and when you get it, it won't be in a very useful format. It's almost like Apple doesn't want you to control your own photos. (You can also get your iCloud Drive files and stuff while you're there.)

Now that you have your iCloud Photos

Once you have downloaded your iCloud backups, they will be in zip files with a very specific naming convention, like iCloud Photos Part 1 of 3.zip. This backup tool assumes that's the case, and if that changes, this tool won't work until it is updated. But it is open source so you can change it yourself or at least report an issue!

It's important that you copy all those zip files into a new location where we will be operating on them. I haven't extensively tested this program out, so make sure you don't run it against your only copy.

And you must copy all of your zip files. If you only copy one of three zip files, bye-cloud will notice and complain. The reason is that apple distributes photos randomly throughout these archives, and if you try to unpack only one part, the Album spreadsheets will reference photos that bye-cloud won't be able to find.

Install

Homebrew (macOS/Linux)

brew install jakekara/tap/bye-cloud

This installs bye-cloud and ffmpeg together.

pipx

pipx install bye-cloud

uv

uv tool install bye-cloud

Note: For video date repair, ffmpeg must be installed separately when using pipx or uv. bye-cloud will warn you on startup if ffmpeg is missing.

Usage

With all of your .zip files in a folder, let's say ./icloud-parts, run the command:

bye-cloud -i ./icloud-parts -o ./export

That's it! Just wait until it finishes and your photos will be organized into folders. These should work with image libraries like immich and others.

CLI Options

bye-cloud -i ./icloud-parts -o ./export [OPTIONS]

Options:
  -v, --verbose      Enable detailed logging
  -q, --quiet        Only show warnings and errors
  --dry-run          Preview operations without modifying files
  --keep-temp        Keep temporary files (for debugging)
  --check-missing    Warn about photos missing from metadata
  --force            Overwrite output directory if it exists

A detailed log file is created in {output}/logs/ for each run.

Contributing

See CONTRIBUTING.md for development setup, running tests, and project architecture.

Note: This project includes AI-written code. I've started using Claude Code extensively since version 1.0.0 to maintain this repo as part of an effort to learn more about AI coding.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bye_cloud-1.0.1.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bye_cloud-1.0.1-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file bye_cloud-1.0.1.tar.gz.

File metadata

  • Download URL: bye_cloud-1.0.1.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bye_cloud-1.0.1.tar.gz
Algorithm Hash digest
SHA256 49581d9b69c83ba57f95dbc3af8fb99d304fea03b895aa6b3bdc12d23b1ac2cb
MD5 aa8ceee9d0bdfa1c9164efddf6197c9b
BLAKE2b-256 67e7cde216fdf2766004f5c4a60fe1eef3398e91d9147630a51e6d1eda1e2adb

See more details on using hashes here.

Provenance

The following attestation bundles were made for bye_cloud-1.0.1.tar.gz:

Publisher: publish.yml on jakekara/bye-cloud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bye_cloud-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: bye_cloud-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bye_cloud-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ba62c4b9325c1f69b8c16e83a3358f5e52372f66aa0cadee73790f0ec581f845
MD5 eaa6bb711964706e8a721f63099acee3
BLAKE2b-256 b159e41146e182f45124f62e7bbc6d3bbd05b90a982d6db888d17977bc1d736c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bye_cloud-1.0.1-py3-none-any.whl:

Publisher: publish.yml on jakekara/bye-cloud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page