icloudpd:从认证到全量下载,完成 iCloud 照片备份的完整做法
【免费下载链接】icloud_photos_downloaderA command-line tool to download photos from iCloud项目地址: https://gitcode.com/GitHub_Trending/ic/icloud_photos_downloader
某天打开照片 App,老照片怎么都加载不出来,转圈转了半个晚上,重启也没用。我才意识到:本地缓存只是个壳,真正的照片早就放在 Apple 的服务器上了。一旦存储额度出了问题,或者账户出现异常,这些回忆可能就跟着没了。解决这类 iCloud 照片备份问题的工具是 icloudpd,一个开源的照片下载工具,能把 iCloud 照片库里的照片和视频批量下载到本地硬盘,Windows、macOS、Linux 都能跑。
icloudpd 是什么:一个基于 iCloud API 的照片下载工具
icloudpd 是一个 MIT 协议的项目,当前版本在 1.32.x,由志愿者社区维护,几乎每周更新一次。它的工作方式不复杂:不依赖任何设备上的照片 App,而是用 Apple ID 模拟 icloud.com 的登录方式,通过 iCloud API 拉取照片库列表和每个资产的下载链接,全部下载动作都在你本地完成,不需要一台 Mac 在线。
它的核心能力可以概括为两句:支持 Copy、Sync、Move 三种模式,默认的 Copy 只下载新照片,另外两种还能把本地或云端已经删掉的内容同步删掉;支持 RAW、HEIC、Live Photo,还能用固定间隔常驻检查增量。
安装 icloudpd 并完成首次认证
最短的路径是用 pip 安装,前提是环境里有 Python 3.10 以上。Docker 和 npm 也有现成的方式,NAS 用户通常更偏好 Docker,但第一次体验,pip 最省事:
pip install icloudpd装完后先只跑认证,不碰任何照片:
icloudpd --username your@email.com --auth-only它会在控制台提示输入密码,开了双重验证的账户还要输入受信设备的验证码。成功后会话令牌会存在~/.pyicloud目录下,之后运行就不用再输密码,一般两个月左右才需要重新认证。
更关键的一步,是先在手机上检查两个开关:在「设置 - Apple 账户 - iCloud」里打开「在网页上访问 iCloud 数据」,并关闭「高级数据保护」。第二项是硬性要求,因为 icloudpd 走的是网页访问通道,开了高级数据保护这条通道会被完全封掉,服务器只会返回 ACCESS_DENIED。
两个最常见的 iCloud 照片备份场景
认证通了,接下来是正事。第一种是最普遍的需求:把所有老照片稳妥地放进硬盘,以后每次只补新增的。第一次全量下载,一条命令就够:
icloudpd --username your@email.com --directory ~/Photos照片默认按年/月/日分文件夹存放,重名文件会自动去重。更省事的是,icloudpd 记得自己下载过哪些文件,下次再跑同一条命令就变成增量备份。库特别大的话可以加--until-found 5,扫到连续 5 张已下载过的照片就停止,不用每次都遍历整个库。
一位摄影师朋友的需求不一样:不想要中等大小的 JPEG 占地方,又担心 RAW 和拍摄时间下载后不被 Lightroom 认。他的配置是这样:
icloudpd --username your@email.com \ --directory ~/Photos/raw \ --size original --align-raw original \ --set-exif-datetime --skip-videos--size original只拉原始质量版本;--align-raw original针对 RAW+JPEG 双格式资产,明确把 RAW 当作原始版本;--set-exif-datetime会把文件创建时间写进 EXIF 的 DateTimeOriginal 字段,拍摄时间入库后不会丢;--skip-videos跳过视频——他习惯单独备份视频,分开下载省掉大量空间。
认证失败等几个常见坑
我在 issue 区见过、自己也踩过的高频问题有三个。
最常见的是 ACCESS_DENIED。第一次运行就报这个错,十有八九是手机上那两个开关没配对。确认配置没问题还失败的话,清掉旧会话重新认证一次基本能解决:
rm -rf ~/.pyicloud icloudpd --username your@email.com --auth-only第二种是隔了几个月,突然又开始要验证码。这不是故障,Apple 的双重验证令牌大约两个月就会过期,重新走一遍认证即可。如果你是用定时任务跑备份,可以配上--smtp-username和--smtp-password,令牌快过期时会发邮件提醒你,避免备份无声中断。
第三种是下载看起来慢。多半是视频文件太大拖累整体进度,先加--skip-videos只下载照片;想分批处理的话,--recent 500每次只取最近 500 张,对大库更稳。
常驻同步与进一步阅读
手动备份跑顺之后,可以把它变成常驻服务:加上--watch-with-interval 3600就会每小时检查一次新照片,配合 cron 或 Docker 可以部署在 NAS 上长期运行,仓库里examples/cron_script.sh.example有一份现成的定时脚本示例。想深入了解实现的话,核心下载逻辑在src/icloudpd/download.py,完整参数说明的入口在docs/目录,从docs/reference.md开始看即可。
icloudpd 解决的其实只有一件事:让你手里有一份完整、可自由处置的 iCloud 照片副本。现在就可以做的一步:先跑一次--auth-only确认账户能通过认证,看到成功输出之后,整个照片库离落到硬盘上就差一条命令了。
【免费下载链接】icloud_photos_downloaderA command-line tool to download photos from iCloud项目地址: https://gitcode.com/GitHub_Trending/ic/icloud_photos_downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考