Search by

jmoati / icloudpd

Jmoati

Pure PHP port of icloud_photos_downloader (icloudpd): download photos and videos from iCloud without Python

Package info

github.com/Jmoati/icloudpd

pkg:composer/jmoati/icloudpd

Statistics

Installs: 7

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.32.3 2026-10-22 20:54 UTC

This package is auto-updated.

Last update: 2026-10-22 21:16:00 UTC


README

Pure PHP port of icloud_photos_downloader 1.32.3: download photos and videos from iCloud without Python.

Same command line, same options, same output and same cookie/session files as the Python tool, so an existing --cookie-directory can be reused. Porting rules and the status of each module are in PORTING.md.

bin/icloudpd --directory ./Photos --username jacques@example.com --folder-structure "{:%Y/%m/%d}" --size original --until-found 100

Requires PHP 8.5 with curl, gmp, mbstring, openssl and zlib; EXIF dates are read and written with jmoati/image-exiftool.

Status (2026-10-22)

Every module of upstream 1.32.3 is ported except the Flask WebUI (--mfa-provider webui, --password-provider webui give a clear error). Upstream PR #1392 is applied on top (--adp-web-access, for accounts with Advanced Data Protection; not merged upstream as of 2026-10-22). The 223 upstream test functions (and the 7 of the PR) are ported to PHPUnit under their names and replay the upstream HTTP cassettes (tests/vcr_cassettes/, converted once by tools/convert-cassettes.py); the suite also checks the port against Python itself (string formatting, json.dumps, strftime, argparse help, SRP proofs, cookie files, XMP sidecars, plists, SMTP transcripts): vendor/bin/phpunit runs 1 794 tests, 6 skipped like upstream.

Tests: vendor/bin/phpunit (the upstream test suite ported to PHPUnit, replaying the upstream HTTP cassettes).