Provider: iCloud Photos #13
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
iCloud Photos provider for accessing Apple Photos library.
The Hard Truth
Apple provides no official API for iCloud Photos. There are three approaches, each with significant tradeoffs:
Option A:
pyicloud(unofficial reverse-engineered API)Pros: Full access to the photo library including albums, metadata, and full-res downloads.
Cons:
pyicloudlibrary maintenance is spottyImplementation:
pyicloud.PyiCloudService(apple_id, password)for authservice.photos.albumsto list albumsOption B: iCloud Shared Albums (public RSS)
If the user creates a public iCloud Shared Album, Apple generates an RSS feed and hosted thumbnails.
Pros: No auth needed, no unofficial API, stable.
Cons: Only works with Shared Albums (not the main library). User must manually add photos to the shared album. Limited metadata.
Implementation:
https://p{xx}-sharedstreams.icloud.com/{token}/sharedstreams/webstreamAPIOption C: iOS Shortcut bridge (recommended in #6)
Not really a "provider" — the user manually pushes photos from their phone via the Share Sheet shortcut. Photos land in the local provider. No pull-based sync.
Pros: Most reliable, no API breakage, works with any photo.
Cons: Manual, not a real provider integration.
Recommendation
Implement Option A (
pyicloud) as the provider, with clear warnings in the UI:Implement Option B (Shared Albums) as a separate lightweight provider if there's demand.
Continue recommending Option C (iOS Shortcut + local provider) as the most reliable path.
Dependencies
pyicloudadded torequirements.txt2FA Flow
The web UI needs a special flow for iCloud:
pyicloud.PyiCloudService(){"status": "2fa_required", "devices": [...]}/api/providers/{id}/2faservice.validate_2fa_code(code)Depends on #9 (core architecture).