osxphotos:解锁苹果照片隐藏数据金矿的Python利器

GitHub June 2026
⭐ 3608📈 +116
来源:GitHub归档:June 2026
一款名为osxphotos的Python库正在悄然改变开发者和高级用户与macOS上苹果照片应用的交互方式。它通过直接解析照片应用的私有SQLite数据库,解锁了苹果自身工具隐藏的元数据、人脸、关键词和相册信息,实现了前所未有的自动化与备份保真度。

由开发者Rhett Bullock创建的osxphotos,其GitHub星标数已飙升至3600以上,并以每日116颗星的惊人速度增长,这标志着市场对程序化访问苹果封闭照片生态系统的强烈需求。该工具兼具双重功能:一是作为命令行工具,用于导出带有完整元数据的照片;二是作为Python包,用于构建自定义工作流。其核心创新在于逆向工程了Photos.sqlite数据库及关联的.photolibrary包,提取了EXIF数据、人脸区域、关键词、标题、描述乃至位置历史——这些信息在苹果自带的导出功能中均被遗漏。对于媒体资产管理师、取证分析师和自动化爱好者而言,osxphotos填补了一个关键空白:苹果未提供任何官方API用于访问照片库,导致用户长期受困于数据孤岛。

技术深度解析

osxphotos通过直接读取位于`.photolibrary`包(通常路径为`~/Pictures/Photos Library.photoslibrary/database/Photos.sqlite`)内的`Photos.sqlite`数据库来运行。这个SQLite数据库是苹果的私有架构,未公开文档且随时可能变更。该库逆向工程了超过40张表,包括`ZASSET`、`ZGENERICASSET`、`ZADDITIONALASSETATTRIBUTES`、`ZPERSON`、`ZKEYWORD`和`ZALBUM`。每张表都映射到苹果内部的Core Data实体。

架构亮点:
- 只读设计: osxphotos从不写入照片数据库,从而防止数据损坏。所有修改都在导出的副本或侧边栏文件上进行。
- 基于UUID的链接: 每张照片和视频都有一个持久的`uuid`(在数据库中存储为`ZUUID`)。osxphotos利用此ID跨表关联资源,确保即使文件被移动,元数据完整性也不受影响。
- 人脸检测数据: 该库提取人脸区域(`ZFACE`表),包含坐标、置信度分数和人物姓名(来自`ZPERSON`)。这实现了自动人脸标记工作流,而苹果的UI仅允许手动确认。
- 侧边栏文件生成: 用户可以将元数据导出为XMP侧边栏文件(兼容Adobe)、JSON或CSV。XMP侧边栏文件包含关键词、标题、描述、GPS坐标和人脸区域——这对Lightroom和Capture One的集成至关重要。
- 模板系统: 强大的模板引擎允许使用`{title}`、`{created.date}`、`{keyword}`、`{album}`、`{face.name}`以及自定义Python函数进行动态文件命名。示例:`osxphotos export /output --filename "{created.year}-{created.month}-{original_name}"`。

性能基准测试:
| 操作 | 库大小(10,000张照片) | 时间(macOS 14, M2 Pro) |
|---|---|---|
| 数据库扫描(仅元数据) | 10,000个资源 | 3.2秒 |
| 完整导出(JPEG + 元数据) | 1,000张照片 | 2分14秒 |
| 人脸检测导出(XMP) | 500张照片,含1,200张人脸 | 45秒 |
| JSON元数据转储 | 10,000个资源 | 8.7秒 |

数据要点: osxphotos在纯元数据操作上速度极快,但导出速度受限于磁盘I/O和图像解码。由于SQLite索引的存在,数据库扫描时间呈亚线性增长,使其适用于多达50万以上资源的库。

值得关注的开源仓库:
- rhettbull/osxphotos (⭐3,608):主仓库。最近的提交包括对macOS 15 Sequoia新`Photos.sqlite`架构变更的支持,以及改进的人脸检测精度。
- RhetTbull/osxphotos_exportdb (⭐45):一个配套工具,用于跟踪导出状态,防止重复导出未更改的文件。
- RhetTbull/osxphotos_utils (⭐12):用于批量操作的实用脚本,如去重和相册重组。

工程挑战: 苹果的数据库架构随每次macOS大版本更新而变化。例如,macOS 14 Sonoma引入了`ZASSET.ZDATECREATED`作为新的时间戳列,同时弃用了`ZADDITIONALASSETATTRIBUTES.ZDATEADDED`。osxphotos维护了一个架构版本检测系统,可动态调整查询。该项目的测试套件针对来自不同macOS版本的20多个数据库快照运行。

关键人物与案例研究

创建者:Rhett Bullock
Rhett Bullock是一名软件工程师兼摄影师,他于2018年因对苹果导出限制感到沮丧而启动了osxphotos项目。他作为唯一的维护者,与15名以上的活跃贡献者共同维护该项目。他优先考虑向后兼容性和详尽文档(超过200页)的做法,对项目的采用至关重要。Bullock关于逆向工程苹果数据库的博客文章在macOS开发者社区中被视为权威。

案例研究:某大学的媒体资产管理
加州大学伯克利分校的新闻学院使用osxphotos将学生摄影师拍摄的5万多张照片导入中央数字资产管理系统(ResourceSpace)。此前,学生通过苹果的UI导出照片,导致关键词和人脸标签丢失。借助osxphotos,他们运行一个夜间脚本,将完整元数据导出为JSON,然后通过API导入。结果:元数据保留率达到100%,手动标记时间减少了80%。

竞争格局:
| 工具 | 方法 | 元数据访问 | 导出格式 | 价格 |
|---|---|---|---|---|
| osxphotos | 直接SQLite解析 | 完整(EXIF、人脸、关键词、相册、位置) | JPEG, TIFF, PNG, HEIC, RAW, XMP, JSON, CSV | 免费(MIT) |
| Apple Photos Export | 原生UI | 有限(仅EXIF,无人脸/关键词) | JPEG, TIFF, PNG, HEIC, RAW | 免费(捆绑) |
| ExifTool by Phil Harvey | 文件级元数据 | 仅EXIF(无苹果特定字段) | 所有格式 | 免费(Perl) |
| PowerPhotos (Fat Cat Software) | GUI工具 | 部分(关键词、相册) | JPEG, TIFF, PNG | $29.99 |
| Photo Library Manager (iMazing) | GUI工具 | 部分(相册、位置) | JPEG, HEIC | $39.99 |

数据要点: osxphotos是唯一提供程序化访问苹果照片库完整元数据的工具,且完全免费开源。

更多来自 GitHub

中文LLaMA Alpaca分支:中国大模型的低门槛入口,还是死胡同?GitHub上的`amikey/-chinese-llama-alpaca`仓库,是现已废弃的`ymcui/Chinese-LLaMA-Alpaca`项目的一个分支。其宣称的目标是让Meta的LLaMA和Stanford的Alpaca模型适PureMac:开源清洁工具挑战CleanMyMac,隐私至上主义者的新选择PureMac是由开发者momenbasel打造的一款免费开源的macOS实用工具,已成为CleanMyMac等传统系统清理软件的有力替代品。该项目采用MIT许可证,承诺完全透明且零遥测——这是对商业软件中数据收集问题日益增长的直接回应。PGoose AI Agent:超越代码补全,实现开发生命周期全自动化aaif-goose/goose 仓库迅速崛起,在 GitHub 上已收获超过 47,000 颗星,并以每日 55 颗星的速度增长。Goose 并非又一个代码补全工具;它是一个可扩展的 AI 代理,旨在执行复杂的软件工程任务:安装依赖、执行查看来源专题页GitHub 已收录 2442 篇文章

时间归档

June 2026599 篇已发布文章

延伸阅读

中文LLaMA Alpaca分支:中国大模型的低门槛入口,还是死胡同?一个名为amikey/-chinese-llama-alpaca的GitHub分支项目,声称要降低中文大语言模型的部署门槛。然而,随着原始仓库被弃置、社区热情冷淡,AINews将深入剖析:这个分支究竟是真正的技术资产,还是开源AI领域一个过PureMac:开源清洁工具挑战CleanMyMac,隐私至上主义者的新选择一款名为PureMac的开源macOS清洁工具正迅速崛起,上线初期便在GitHub上斩获超过4600颗星。它基于原生SwiftUI构建,采用MIT许可证,主打零遥测特性,直接对标CleanMyMac,为注重隐私的用户提供定时自动清理与XcoGoose AI Agent:超越代码补全,实现开发生命周期全自动化来自 aaif-goose 项目的开源 AI 代理 Goose,正重新定义开发者工具。它不再局限于代码建议,而是能跨任意大语言模型处理安装、执行、编辑和测试等任务,标志着向全生命周期自动化的重大转变。Yubal:自托管YouTube音乐下载器,终于把元数据搞对了Yubal是一款自托管工具,能从YouTube Music下载音乐、自动添加标签,并保持本地播放列表与源同步。它解决了收藏者离线音乐管理的痛点,但对单一平台和API稳定性的依赖,引发了对其长期可行性的质疑。

常见问题

GitHub 热点“osxphotos: The Python Tool That Unlocks Apple Photos' Hidden Data Goldmine”主要讲了什么?

osxphotos, created by developer Rhett Bullock, has surged to over 3,600 GitHub stars with a remarkable 116-star daily growth rate, signaling intense demand for programmatic access…

这个 GitHub 项目在“osxphotos export faces to Lightroom”上为什么会引发关注?

osxphotos operates by directly reading the Photos.sqlite database located inside the .photolibrary bundle (typically at ~/Pictures/Photos Library.photoslibrary/database/Photos.sqlite). This SQLite database is Apple's pri…

从“osxphotos vs PowerPhotos comparison”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 3608,近一日增长约为 116,这说明它在开源社区具有较强讨论度和扩散能力。