icloudpd

icloudpd

Docker app from Womabre's Repository

Overview

An Alpine Linux Docker container for ndbroadbent's iCloud Photos Downloader. I use it for syncing the photo streams of all the iDevices in my house back to my server because it's the only way of backing up multiple devices to a single location. It uses the system keyring to securely store credentials, has HEIC to JPG conversion capability, and can send Telegram, Prowl, Pushover, WebHook, DingTalk, Discord, openhab, IYUU and WeCom notifications. It is recommended to use the keyring to securely store credentials. Please connect to the container and run `sync-icloud.sh --Initialise` command manually to start the process of saving your password to the keyring and Apple sends a confirmation code via text or 2FA code to your device which needs to be entered into the console. You can also run this command from the Unraid console to start the authentication process. `docker exec -it icloudpd sync-icloud.sh --Initialise` Create a `.mounted` file inside `iCloud` folder in the photos directory for the container to start syncing photos. This file MUST be created manually and sync will not start without it.

Runtime arguments

Network
bridge
Shell
sh
Privileged
false

Template configuration

Apple IDVariable

Apple ID used to access iCloud.

Target
apple_id
Default
your@appleid.com
Time ZoneVariable

Sets container timezone. Example: Europe/Amsterdam

Target
TZ
Default
UTC
Config PathPathrw

Stores configuration, cookies, and keyring.

Target
/config
Default
/mnt/user/appdata/icloudpd
Download PathPathrw,slave

Where downloaded photos and videos will be stored. A .mounted file must exist inside this folder before syncing will start.

Target
/home/user/iCloud
Default
/mnt/user/iCloud
Download IntervalVariable

Seconds between downloads. Valid values: 21600 (6h), 43200 (12h), 86400 (24h), 129600 (36h), 172800 (48h), 604800 (7d). Defaults to 86400 if an invalid value is set.

Target
download_interval
Default
86400
Download DelayVariable

Delay first download in minutes (0-60). Use to stagger multiple containers.

Target
download_delay
Default
0
Folder StructureVariable

Folder structure for downloaded files. Use 'none' for a flat structure. Default: {:%Y/%m/%d}

Target
folder_structure
Default
{:%Y/%m/%d}
Albums With DatesVariable

Organize albums into subfolders by date (uses folder_structure). Default: false

Target
albums_with_dates
Default
false
Libraries With DatesVariable

Organize libraries into subfolders by date (uses folder_structure). Default: false

Target
libraries_with_dates
Default
false
Authentication TypeVariable

Type of authentication on your iCloud account. Use 'MFA' or 'Web' (if no MFA). Default: MFA

Target
authentication_type
Default
MFA
Notification DaysVariable

Notify n days before MFA cookie expires. A single notification is sent per day. Default: 7

Target
notification_days
Default
7
Single PassVariable

Set to true to exit after a single sync instead of looping. If used, set container restart policy to 'no'.

Target
single_pass
Default
false
Skip CheckVariable

Skip the check for new files. Recommended for libraries with more than a few thousand photos. Default: false

Target
skip_check
Default
false
Photo SizeVariable

Size to download: original, medium, thumb, adjusted, alternative. Can be comma-separated for multiple sizes. Default: original

Target
photo_size
Default
original
Skip Live PhotosVariable

Skip downloading Live Photos. Default: false

Target
skip_live_photos
Default
false
Live Photo SizeVariable

Live photo size: original, medium, or thumb. Ignored if skip_live_photos is true. Default: original

Target
live_photo_size
Default
original
Skip VideosVariable

Skip downloading videos. Default: false

Target
skip_videos
Default
false
Recent OnlyVariable

Only download this number of recently added photos. Leave empty to download all.

Target
recent_only
Until FoundVariable

Download recent photos until n previously downloaded consecutive photos are found. Leave empty to download all.

Target
until_found
Photo AlbumVariable

Download only from specific album(s). Comma-separated. Use 'all albums' to download all albums.

Target
photo_album
Skip AlbumVariable

Skip specific albums when using photo_album. Example: All Photos,Videos,Screenshots

Target
skip_album
Photo LibraryVariable

Download only from specific shared library/libraries. Comma-separated. Use 'all libraries' to download all.

Target
photo_library
Skip LibraryVariable

Skip specific libraries when using photo_library. Example: PrimarySync

Target
skip_library
Align RAWVariable

For assets with RAW and JPEG, treat RAW in specified size: original, alternative, or as-is. Default: as-is

Target
align_raw
Default
as-is
File Match PolicyVariable

Policy to identify and de-duplicate files. Options: name-size-dedup-with-suffix, name-id7. Default: name-size-dedup-with-suffix

Target
file_match_policy
Default
name-size-dedup-with-suffix
Convert HEIC to JPEGVariable

Convert downloaded HEIC files to JPEG, retaining the original. Default: false

Target
convert_heic_to_jpeg
Default
false
JPEG QualityVariable

JPEG conversion quality (0-100). Default: 90

Target
jpeg_quality
Default
90
JPEG PathVariable

Custom path for converted JPEGs. Defaults to download path if not set.

Target
jpeg_path
Auto DeleteVariable

Scan 'Recently Deleted' folder and delete those files locally. Default: false

Target
auto_delete
Default
false
Delete After DownloadVariable

Move file to Recently Deleted after download. Cannot be combined with auto_delete. Default: false

Target
delete_after_download
Default
false
Delete Accompanying FilesVariable

Delete generated JPG and MOV files that accompany HEICs (live photo MOVs, converted JPEGs). Default: false

Target
delete_accompanying
Default
false
Delete Empty DirectoriesVariable

Delete empty directories after sync. Only runs if folder_structure is not 'none'. Default: false

Target
delete_empty_directories
Default
false
Set Exif DateTimeVariable

Write DateTimeOriginal EXIF tag from file creation date. Warning: alters local file and causes re-download with dedup suffix. Default: false

Target
set_exif_datetime
Default
false
Keep UnicodeVariable

Keep unicode characters in file names. Set to false to strip non-ASCII chars. Default: false

Target
keep_unicode
Default
false
Live Photo MOV Filename PolicyVariable

Filename policy for Live Photo MOV files: suffix (adds _HEVC) or original (same name as photo). Default: suffix

Target
live_photo_mov_filename_policy
Default
suffix
Sideways Copy VideosVariable

Copy or move downloaded videos to a separate directory (video_path). Default: false

Target
sideways_copy_videos
Default
false
Sideways Copy Videos ModeVariable

How to handle sideways video copy: 'copy' (leave original) or 'move' (requires delete_after_download=true). Default: copy

Target
sideways_copy_videos_mode
Default
copy
Video PathVariable

Destination directory for sideways video copy/move. Required when sideways_copy_videos is true.

Target
video_path
Nextcloud UploadVariable

Enable upload to Nextcloud after download. Default: false

Target
nextcloud_upload
Default
false
Nextcloud URLVariable

Nextcloud server URL. Example: https://my.server.local/nextcloud/

Target
nextcloud_url
Nextcloud UsernameVariable

Username of the Nextcloud account to upload to.

Target
nextcloud_username
Nextcloud PasswordVariable

Password for the Nextcloud account.

Target
nextcloud_password
Nextcloud Target DirVariable

Root folder in Nextcloud to place files in. Cannot be the root of the server.

Target
nextcloud_target_dir
Nextcloud DeleteVariable

Delete file from Nextcloud when removed locally. Requires auto_delete=true. Default: false

Target
nextcloud_delete
Default
false
Notification TypeVariable

Notification provider to use. Options: Prowl, Pushover, Telegram, Webhook, openhab, Dingtalk, Discord, IYUU, WeCom, Gotify, Bark, msmtp, signal. Leave empty to disable.

Target
notification_type
Notification TitleVariable

Title used in notifications. Default: boredazfcuk/iCloudPD

Target
notification_title
Default
boredazfcuk/iCloudPD
Download NotificationsVariable

Send notifications with a summary after file downloads. Default: true

Target
download_notifications
Default
true
Delete NotificationsVariable

Send notifications with a summary after file deletions. Default: true

Target
delete_notifications
Default
true
Startup NotificationVariable

Send a notification when the container starts. Default: true

Target
startup_notification
Default
true
Silent File NotificationsVariable

Send low-priority (silent) notifications for file downloads and deletions. Default: false

Target
silent_file_notifications
Default
false
msmtp HostVariable

[msmtp] SMTP server hostname.

Target
msmtp_host
msmtp PortVariable

[msmtp] SMTP server port. Normally 465 or 587. Default: 587

Target
msmtp_port
Default
587
msmtp UsernameVariable

[msmtp] SMTP login username.

Target
msmtp_user
msmtp PasswordVariable

[msmtp] SMTP login password.

Target
msmtp_pass
msmtp From AddressVariable

[msmtp] Sender email address.

Target
msmtp_from
msmtp TLSVariable

[msmtp] Enable TLS encryption: on or off. Default: on

Target
msmtp_tls
Default
on
msmtp AuthVariable

[msmtp] Enable SMTP authentication: on or off. Default: on

Target
msmtp_auth
Default
on
msmtp Extra ArgsVariable

[msmtp] Optional extra arguments for msmtp. Example: --tls-starttls=off

Target
msmtp_args
Gotify Server URLVariable

[Gotify] Server hostname. Example: server.domain.tld (no port, no protocol). Use gotify_https to toggle HTTPS.

Target
gotify_server_url
Gotify App TokenVariable

[Gotify] Application token for Gotify.

Target
gotify_app_token
Gotify HTTPSVariable

[Gotify] Use HTTPS for Gotify server URL. Default: false (HTTP)

Target
gotify_https
Default
false
Gotify PriorityVariable

[Gotify] Message priority (0-10). Default: 0

Target
gotify_priority
Default
0
Signal HostVariable

[Signal] Hostname of the bbernhard/signal-cli-rest-api container.

Target
signal_host
Signal PortVariable

[Signal] Port the signal-cli-rest-api container listens on.

Target
signal_port
Signal NumberVariable

[Signal] Phone number of the Signal device to send from.

Target
signal_number
Signal RecipientVariable

[Signal] Recipient phone number for Signal messages.

Target
signal_recipient
Bark URLVariable

[Bark] Full Bark push URL. For the official server use: api.day.app

Target
bark_url
Pushover TokenVariable

[Pushover] Application API token.

Target
pushover_token
Pushover User KeyVariable

[Pushover] Pushover user key.

Target
pushover_user
Pushover PriorityVariable

[Pushover] Priority: -1, 0, 1, or 2. Default: 0

Target
pushover_priority
Default
0
Pushover RetryVariable

[Pushover] Retry interval in seconds (priority 2 only). Default: 60

Target
pushover_retry
Default
60
Pushover ExpireVariable

[Pushover] Notification expiration in seconds (priority 2 only). Default: 3600

Target
pushover_expire
Default
3600
Pushover SoundVariable

[Pushover] Custom notification sound. See https://pushover.net/api#sounds for values.

Target
pushover_sound
Healthchecks URLVariable

[Healthchecks] Full ping URL for Healthchecks.io.

Target
healthchecks_url
Webhook ServerVariable

[Webhook/openhab] Hostname of the webhook server.

Target
webhook_server
Webhook PortVariable

[Webhook/openhab] Port for the webhook server. Default: 8123

Target
webhook_port
Default
8123
Webhook PathVariable

[Webhook/openhab] Path on the webhook server. Must start and end with /. Default: /api/webhook/

Target
webhook_path
Default
/api/webhook/
Webhook IDVariable

[Webhook/openhab] Webhook ID. For openhab use 'state'.

Target
webhook_id
Webhook HTTPSVariable

[Webhook/openhab] Use HTTPS. Default: false (HTTP)

Target
webhook_https
Default
false
Webhook BodyVariable

[Webhook] Body key for the webhook request. HA=data, Discord=content, IFTTT=value1. Default: data

Target
webhook_body
Default
data
Webhook InsecureVariable

[Webhook] Allow insecure HTTPS certificates (e.g. self-signed). Default: false

Target
webhook_insecure
Default
false
Telegram TokenVariable

[Telegram] Bot token from BotFather.

Target
telegram_token
Telegram Chat IDVariable

[Telegram] Chat ID for the bot. Prefix with - for group chats.

Target
telegram_chat_id
Telegram PollingVariable

[Telegram] Enable polling to allow remote sync/auth via chat messages. Default: false

Target
telegram_polling
Default
false
Telegram Silent NotificationsVariable

[Telegram] Send file download notifications silently. Default: false

Target
telegram_silent_file_notifications
Default
false
Telegram ServerVariable

[Telegram] Proxy server FQDN if Telegram is blocked in your country.

Target
telegram_server
Telegram HTTPVariable

[Telegram] Use HTTP instead of HTTPS if Telegram is restricted to HTTP only. Default: false

Target
telegram_http
Default
false
Prowl API KeyVariable

[Prowl] API key from the Prowl website.

Target
prowl_api_key
DingTalk TokenVariable

[DingTalk] Access token from DingTalk app Security Settings.

Target
dingtalk_token
Discord IDVariable

[Discord] First part of the Discord webhook URL (numbers only).

Target
discord_id
Discord TokenVariable

[Discord] Second part of the Discord webhook URL.

Target
discord_token
IYUU TokenVariable

[IYUU] Access token for IYUU notifications.

Target
iyuu_token
Initialise KeyringVariable

Run password/keyring setup and create MFA cookie on next start.

Target
initialise
Default
false
Convert All HEICsVariable

Convert HEICs that do not have a corresponding JPEG.

Target
convert_all_heics
Default
false
Force Convert All HEICsVariable

Convert all HEICs regardless of existing JPEG presence. 2-minute delay before running.

Target
force_convert_all_heics
Default
false
Force Convert All HEICs in /mntVariable

Convert all HEICs in /mnt path. 2-minute delay before running.

Target
force_convert_all_mnt_heics
Default
false
Remove All JPGsVariable

Remove all JPEGs that have a matching HEIC source file.

Target
remove_all_jpgs
Default
false
Correct JPEG Time StampsVariable

Correct JPEG timestamps to match their accompanying HEIC files.

Target
correct_jpeg_time_stamps
Default
false
Remove KeyringVariable

Delete stored password and keyring data. Use when changing Apple ID password.

Target
remove_keyring
Default
false
Enable DebuggingVariable

Enable verbose debug output.

Target
enable_debugging
Default
false
Disable DebuggingVariable

Disable debug logging.

Target
disable_debugging
Default
false
Upload Library to NextcloudVariable

Force upload entire local library to Nextcloud.

Target
upload_library_to_nextcloud
Default
false
Sideways Copy All VideosVariable

Copy or move all videos in download path to video_path.

Target
sideways_copy_all_videos
Default
false
List AlbumsVariable

List all albums available in the iCloud account.

Target
list_albums
Default
false
List LibrariesVariable

List all shared libraries available in the iCloud account.

Target
list_libraries
Default
false
UserVariable

Container user name (e.g. 'nobody'). Also used as the Telegram remote-sync trigger word.

Target
user
Default
user
User ID (PUID)Variable

User ID to match permissions on host.

Target
user_id
Default
1000
GroupVariable

Group name for file permissions.

Target
group
Default
group
Group ID (PGID)Variable

Group ID to match host group.

Target
group_id
Default
1000
Force GIDVariable

Allow creation of a group with a pre-existing group ID. Use with caution.

Target
force_gid
Directory PermissionsVariable

Permissions to set on directories in the download destination. Default: 750

Target
directory_permissions
Default
750
File PermissionsVariable

Permissions to set on downloaded files. Default: 640

Target
file_permissions
Default
640

Download Statistics

3,364,960
Total Downloads
111,932
This Month
78,829
Avg / Month

Total Downloads Over Time

Loading chart...

Details

Repository
boredazfcuk/icloudpd
Last Updated2026-05-04
First Seen2020-05-14

Run Icloudpd on Unraid.

Icloudpd is listed in Community Apps for Unraid OS. Explore Unraid to build a flexible home server, NAS, or homelab.