Skip to main content

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.

Metadata

Release files for bye-cloud 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bye-cloud 1.0.2
File Size Uploaded
bye_cloud-1.0.2.tar.gz 36.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bye-cloud 1.0.2
File Interpreter ABI Platform
bye_cloud-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 48.5 kB

Release files / bye_cloud-1.0.2.tar.gz

Download URL bye_cloud-1.0.2.tar.gz
Size 36.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2d70cdf81dbc0dbde97c7f78d606462955dc8c87bec3c0d8cead2ddcbf6c181b
BLAKE2b-256 checksum
How to use checksums
27d76a7932e7bf33a9bdabc4bcf46cbeda77ea5d3a650d53af86f74f13f45fd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 27, 2026.

Transparency log

Release files / bye_cloud-1.0.2-py3-none-any.whl

Download URL bye_cloud-1.0.2-py3-none-any.whl
Size 12.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fe87cf44f2ade6c96f03d16d9a5065bcb38ea1df77b3548ec4d8cb73e41a8119
BLAKE2b-256 checksum
How to use checksums
dfae636b0cdcbcb33c3ed3321f429747abd2ce9c61a8df3947fb0874d4537656
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 27, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page