{"id":14012458,"url":"https://github.com/mandarons/icloud-docker","last_synced_at":"2025-05-14T15:10:49.874Z","repository":{"id":38895819,"uuid":"339552385","full_name":"mandarons/icloud-docker","owner":"mandarons","description":"Dockerized iCloud Client - make a local copy of your iCloud documents and photos, and keep it automatically up-to-date.","archived":false,"fork":false,"pushed_at":"2025-04-28T18:41:51.000Z","size":38648,"stargazers_count":1412,"open_issues_count":32,"forks_count":57,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-05-07T14:55:35.734Z","etag":null,"topics":["docker","icloud","icloud-document-storage","icloud-drive","icloud-photos","icloud-sync","sync"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mandarons.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"mandarons","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://www.buymeacoffee.com/mandarons"]}},"created_at":"2021-02-16T22:49:24.000Z","updated_at":"2025-05-04T07:53:11.000Z","dependencies_parsed_at":"2023-09-24T02:10:28.208Z","dependency_job_id":"2baf90d6-9a85-49b5-ac6e-89c8eb156736","html_url":"https://github.com/mandarons/icloud-docker","commit_stats":{"total_commits":306,"total_committers":16,"mean_commits":19.125,"dds":"0.14379084967320266","last_synced_commit":"8e7702dc7ce06875c2badb1a2ea9727c6ea06c6c"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mandarons%2Ficloud-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mandarons%2Ficloud-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mandarons%2Ficloud-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mandarons%2Ficloud-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mandarons","download_url":"https://codeload.github.com/mandarons/icloud-docker/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254170055,"owners_count":22026219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","icloud","icloud-document-storage","icloud-drive","icloud-photos","icloud-sync","sync"],"created_at":"2024-08-10T23:00:47.433Z","updated_at":"2025-05-14T15:10:49.818Z","avatar_url":"https://github.com/mandarons.png","language":"Python","funding_links":["https://github.com/sponsors/mandarons","https://www.buymeacoffee.com/mandarons"],"categories":["Python"],"sub_categories":[],"readme":"# iCloud-docker\n\n[![CI - Main](https://github.com/mandarons/icloud-docker/actions/workflows/ci-main-test-coverage-deploy.yml/badge.svg?branch=main)](https://github.com/mandarons/icloud-docker/actions/workflows/ci-main-test-coverage-deploy.yml)\n[![Tests](https://mandarons.github.io/icloud-docker/badges/tests.svg)](https://mandarons.github.io/icloud-docker/test-results/)\n[![Coverage](https://mandarons.github.io/icloud-docker/badges/coverage.svg)](https://mandarons.github.io/icloud-docker/test-coverage/index.html)\n[![Latest](https://img.shields.io/github/v/release/mandarons/icloud-docker?color=blue\u0026display_name=tag\u0026label=latest\u0026logo=docker\u0026logoColor=white)](https://hub.docker.com/r/mandarons/icloud-drive)\n[![Docker](https://badgen.net/docker/pulls/mandarons/icloud-drive)](https://hub.docker.com/r/mandarons/icloud-drive)\n[![Discord][discord-badge]][discord]\n[![GitHub Sponsors][github-sponsors-badge]][github-sponsors]\n\u003ca href=\"https://www.buymeacoffee.com/mandarons\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 30px !important;width: 150px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" \u003e\u003c/a\u003e\n\n🤟 **Please star this repository if you end up using this project. If it has improved your life in any way, consider donating to my mission using 'Sponsor' or 'Buy Me a Coffee' button. It will help me to continue supporting this product.** :pray:\n\niCloud-docker (previously known as iCloud-drive-docker) is a simple iCloud client in Docker environment. It uses [iCloudPy](https://github.com/mandarons/icloudpy) python library to interact with iCloud server.\n\nPrimary use case of iCloud-docker is to periodically sync wanted or all of your iCloud drive, photos using your iCloud username and password.\n\n**_Please note that this application only downloads the files from server. It does not upload the local files to the server (yet)._**\n\n## Installation\n\n### Installation using Docker Hub\n\n```\ndocker run --name icloud -v ${PWD}/icloud:/icloud -v ${PWD}/config:/config -e ENV_CONFIG_FILE_PATH=/config/config.yaml mandarons/icloud-drive\n```\n\n### Installation using docker-compose\n\n```yaml\nservices:\n  icloud:\n    image: mandarons/icloud-drive\n    environment:\n      - PUID=\u003cinsert the output of `id -u $user`\u003e\n      - PGID=\u003cinsert the output of `id -g $user`\u003e\n    env_file:\n      - .env.icloud # Must contain ENV_CONFIG_FILE_PATH=/config/config.yaml and optionally, ENV_ICLOUD_PASSWORD=\u003cpassword\u003e\n    container_name: icloud\n    restart: unless-stopped\n    volumes:\n      - /etc/timezone:/etc/timezone:ro\n      - /etc/localtime:/etc/localtime:ro\n      - ${PWD}/icloud:/icloud\n      - ${PWD}/config:/config # Must contain config.yaml\n```\n\n### Authentication (required after container creation or authentication expiration)\n\n```\n# Login manually if ENV_ICLOUD_PASSWORD is not specified and/or 2FA is required\ndocker exec -it --user=abc icloud /bin/sh -c \"icloud --username=\u003cicloud-username\u003e --session-directory=/config/session_data\"\n```\n\nFor China server users, Please add `--region=china` as follows:\n\n```\n# Login manually if ENV_ICLOUD_PASSWORD is not specified and/or 2FA is required\ndocker exec -it --user=abc icloud /bin/sh -c \"icloud --username=\u003cicloud-username\u003e --region=china --session-directory=/config/session_data\"\n```\n\nFollow the steps to authenticate.\n\n## Sample Configuration File\n\n```yaml\napp:\n  logger:\n    # level - debug, info (default), warning or error\n    level: \"info\"\n    # log filename icloud.log (default)\n    filename: \"/config/icloud.log\"\n  credentials:\n    # iCloud drive username\n    username: \"please@replace.me\"\n    # Retry login interval - default is 10 minutes, specifying -1 will retry login only once and exit\n    retry_login_interval: 600\n  # Drive destination\n  root: \"/icloud\"\n  discord:\n  # webhook_url: \u003cyour server webhook URL here\u003e\n  # username: icloud-docker #or any other name you prefer\n  telegram:\n  # bot_token: \u003cyour Telegram bot token\u003e\n  # chat_id: \u003cyour Telegram user or chat ID\u003e\n  pushover:\n  # user_key: \u003cyour Pushover user key\u003e\n  # api_token: \u003cyour Pushover api token\u003e\n  smtp:\n    ## If you want to receive email notifications about expired/missing 2FA credentials then uncomment\n    # email: \"user@test.com\"\n    ## optional, to email address. Default is sender email.\n    # to: \"receiver@test.com\"\n    # password:\n    # host: \"smtp.test.com\"\n    # port: 587\n    # If your email provider doesn't handle TLS\n    # no_tls: true\n  region: global # For China server users, set this to - china (default: global)\ndrive:\n  destination: \"drive\"\n  # Remove local files that are not present on server (i.e. files delete on server)\n  remove_obsolete: false\n  sync_interval: 300\n  filters: # Optional - use it only if you want to download specific folders.\n    # File filters to be included in syncing iCloud drive content\n    folders:\n      - \"folder1\"\n      - \"folder2\"\n      - \"folder3\"\n    file_extensions:\n      # File extensions to be included\n      - \"pdf\"\n      - \"png\"\n      - \"jpg\"\n      - \"jpeg\"\n  ignore:\n    # When specifying folder paths, append it with /*\n    - \"node_modules/*\"\n    - \"*.md\"\nphotos:\n  destination: \"photos\"\n  # Remove local photos that are not present on server (i.e. photos delete on server)\n  remove_obsolete: false\n  sync_interval: 500\n  all_albums: false # Optional, default false. If true preserve album structure. If same photo is in multiple albums creates duplicates on filesystem\n  folder_format: \"%Y/%m\" # optional, if set put photos in subfolders according to format. Format cheatsheet - https://strftime.org\n  filters:\n    # List of libraries to download. If omitted (default), photos from all libraries (own and shared) are downloaded. If included, photos only\n    # from the listed libraries are downloaded.\n    # libraries:\n    #   - PrimarySync # Name of the own library\n\n    # if all_albums is false - albums list is used as filter-in, if all_albums is true - albums list is used as filter-out\n    # if albums list is empty and all_albums is false download all photos to \"all\" folder. if empty and all_albums is true download all folders\n    albums:\n      - \"album 1\"\n      - \"album2\"\n    file_sizes: # valid values are original, medium and/or thumb\n      - \"original\"\n      # - \"medium\"\n      # - \"thumb\"\n    extensions: # Optional, media extensions to be included in syncing iCloud Photos content\n      # - jpg\n      # - heic\n      # - png\n```\n\n**_Note: On every sync, this client iterates all the files. Depending on number of files in your iCloud (drive + photos), syncing can take longer._**\n\n## Usage Policy\n\nAs mentioned in [USAGE.md](https://github.com/mandarons/icloud-docker/blob/main/USAGE.md)\n\n## Star History\n\n\u003ca href=\"https://star-history.com/#mandarons/icloud-docker\u0026Timeline\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=mandarons/icloud-docker\u0026type=Timeline\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=mandarons/icloud-docker\u0026type=Timeline\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=mandarons/icloud-docker\u0026type=Timeline\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n[github-sponsors]: https://github.com/sponsors/mandarons\n[github-sponsors-badge]: https://img.shields.io/github/sponsors/mandarons\n[discord]: https://discord.gg/fyMGBvNW\n[discord-badge]: https://img.shields.io/discord/871555550444408883\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmandarons%2Ficloud-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmandarons%2Ficloud-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmandarons%2Ficloud-docker/lists"}