← 文章 / 开源项目
immich 1小时前 · 2026-09-05 10:19:36 · 3 阅读

Immich 八月回顾

2026年8月回顾,包括即将推出的功能、版本发布、开发者更新等内容。

回顾文章
加拿大阿尔伯塔省的路易丝湖
照片拍摄于加拿大阿尔伯塔省的路易丝湖,摄影师:Antoine

大家好!

八月是团队繁忙的一个月。最引人注目的是我们的实习生完成了暑期项目,已返校继续学业。与此同时,我们其他人继续在共享功能、搜索、回忆整理和Bug修复方面持续投入。继续阅读以下详细内容。

实习生们再见!👋

这个夏天我们迎来了三位实习生。他们表现出色,不仅交付了很棒的新功能,还修复了大量Bug并进行了代码清理。不幸的是,他们现在必须返校了。祝三位学业顺利,也希望你们继续在网上活跃。感谢你们带来的美好回忆!

搜索功能

过去一两个月,团队花时间重新设计了Immich网页版的搜索功能。经过多次迭代,我们确定了最终方案:

Immich网页版新版搜索弹窗
Immich网页版新版搜索弹窗

主要目标是让界面更易于使用且直观,同时不牺牲原有的强大功能。这是一个难题,但我们希望这是朝着正确方向迈出的一步。它将在本周晚些时候随 v3.2.0 版本发布。欢迎反馈您对新版设计想法。

另外,"搜索v2"已合并到主分支(#30179)。这是对当前搜索端点的扩展,支持以新的方式组合多个筛选条件。特别是提供了更灵活的包含/排除值集合、范围搜索等功能。以下是新API预览及部分可实现搜索的示例:

// 同时存在于相册 A 和 B,但不存在于 C 中的资源
{ "filter": { "albumIds": { "all": ["A", "B"], "none": ["C"] } } }

// 评分大于等于 3 的资源
{ "filter": { "rating": { "gte": 3 } } }

// 评分为 2 或 4 的资源
{ "filter": { "rating": { "in": [2, 4] } } }

// 文件大小在 4–8 GiB 之间的资源
{ "filter": { "fileSizeInBytes": { "gte": 4294967296, "lte": 8589934592 } } }

// 来自相册 1 但不包含人物 2 的资源
{ "filter": { "albumIds": { "any": ["1"] }, "personIds": { "none": ["2"] } } }

// 同时包含人物 1 和人物 2 的资源
{ "filter": { "personIds": { "all": ["1", "2"] } } }

更多搜索相关的改进将在接下来的几个月陆续推出。此外,第三方应用(如数码相框)可以立即开始使用这些新筛选条件。

共享功能更新

v3.2.0 中,我们计划发布集群组(cluster groups),初始目标是让用户能够在共享资源中看到自己的人物和人脸。集群组是一组用户,这些组将成为未来人物和人脸共享的基础。值得注意的是,我们在实现人物和人脸共享方面曾多次失败(#27236#27437#30013 以及 #30606),这确实是一个复杂的问题。但我们认为,这一设计是迈向长期期待的共享改进的第一步。随着更多模块的完成,谁知道呢,也许我们会专门写一篇文章来记录整个过程的历程。

集群组用户设置
集群组用户设置

技术细节

v3.2.0 之前,机器学习算法在尝试将人脸聚类为组(即“人物”)时,只能考虑单个用户的资源。有了集群组之后,该算法现在可以综合考虑组内所有用户的人脸和人物信息。更多的数据通常会带来更好的结果,减少人工干预的需求,而其中跨用户的数据整合是整个实现中最关键的部分。

目前,要享受集群分组的好处,唯一的办法是对该分组重新运行人脸聚类,这会清除分组内所有用户的人物信息,包括姓名、生日、收藏和隐藏状态等。未来我们计划探索其他方案,以非破坏性的方式合并各用户的聚类结果。

另外,在 v3.2.0 中,集群分组仅支持跨用户的人物和人脸追踪。在后续版本中,我们希望实现跨用户的人物共享管理。目前你还无法看到其他用户设置的姓名和生日,未来我们计划将姓名和生日变成分组内任何用户都能查看和更新的公共属性。

新的发布流程

在此之前,发布新版本意味着在实际发布前后的短时间内都要冻结代码。事实证明,这有个明显弊端:在这段时间内团队的生产力和吞吐量会明显下降。在研究了多种解决方案后,我们最终选择了发布分支加回移植的方式。

发布分支

v3.2.0 之前,版本始终从 main 分支创建。现在,版本会从特定分支(如 release/v3.2)切出,这样就能在为发布准备 bug 修复的同时,继续向 main 合并代码。

回移植

所有提交仍然像以前一样提交到 main。如果 main 上的某个提交需要进入发布分支,可以将其回移植(即 cherry-pick)到发布分支。这一过程通过一组 backport:release/x GitHub 标签自动完成。例如,给一个 PR 添加 backport:release/v3.2 标签,合并后就会自动把该 bug 修复 cherry-pick 到 release/v3.2 分支。

GitHub PR 上的回移植标签
GitHub PR 上的回移植标签

简而言之,发布流程改用发布分支后,开发工作可以在发布前、发布中和发布后持续进行。虽然这些改动偏技术性,但最终用户将受益于更快的开发节奏,也能更快收到 bug 修复。

路线图更新

本月路线图的最大更新是围绕「人物」和「面部共享」的集群组功能,但预计未来几个月还会看到更多与共享相关的改进。

版本发布

本月发布了 v3.2.0 的两个预发布版本,正式版预计本周晚些时候上线。

  • v3.2.0-rc.1 - v3.2.0 预发布版 - 新增搜索界面、集群组和回忆视图
  • v3.2.0-rc.2 - v3.2.0 预发布版 - 修复 bug

开发者更新——来自迷宫深处

团队成员对当前工作中好与坏、以及挫败感的直言不讳的想法。

@alextran1502

这个月我休了比较长一段时间的假。拥有休息时间太棒了,它帮我激发了一些新想法:比如如何充分利用每个 Immich 实例中积累的照片和视频,如何让它们变得更生动、更容易被发现,以及如何通过每张照片找回被遗忘的回忆。这些听起来像是大数据或机器学习项目。我开始与其他团队成员讨论,看看如何实现这样的机制。

@jrasm91

这个月我花了相当多的时间将大约 250 个端到端(e2e)测试迁移为中等粒度测试。E2e 测试需要运行完整的 Immich 生产环境栈,执行速度较慢,开发和验证难度较高,维护起来也更令人头疼。因此,将它们转为中等粒度测试是一个很大的提升。此外,我还参与了集群组的工作,这是迈向更好共享体验的第一步。

Long list of e2e refactor pull requests
一长串 e2e 重构的 pull request

@danieldietzler

这个月,我经历了上面提到的所有人脸聚类 PR 的痛苦过程,努力寻找合适的架构。最终合并了一个让团队都觉得可以继续推进的方案,感觉很棒。我还参与了新搜索界面和新搜索 API 的开发。

FUTO 正在将内部通讯从 Zulip 迁移到 Mattermost,我们团队也将把相关的 Team 频道迁过去,以统一内部沟通渠道。在 Discord 上运行了四年之后,我们日常工作高度依赖 Discord 机器人,因此我也着手将 Mattermost 集成到机器人中,以便顺利完成迁移。

最后,和往常一样,社区贡献了许多优秀的 PR 需要审核,此外还有各种 bug 修复和日常维护工作,确保项目平稳运行。

@mertalev

这个月我主要致力于 ML 优化,以降低内存占用和处理时间。Immich 运行的硬件平台跨度很大,从树莓派到配备不同品牌 GPU 的迷你数据中心都有。其中的挑战在于,要让模型在所有这些硬件上都能发挥最佳性能。例如,针对 AMD GPU 优化的 MIGraphX 方案,在 CPU 上运行可能会慢得多。

另一个复杂因素是,许多改动需要重新发布更新后的模型。如果 ML 服务器依赖于这些新版模型,就会触发重新下载;对于采用 air-gap 部署 ML 容器的用户来说,这会造成问题。为此,代码专门设计为在这种情况下回退到旧的缓存模型,从而兼容新旧两种模型的运行。

经过大量测试和优化后,处理速度最高提升了数倍,内存占用也显著降低,具体表现取决于所用模型和后端。这些改进不会出现在 3.2 版本中,但预计会很快跟进。随着后续不断添加新的模型任务,相信也能帮到那些没有购入 NVIDIA 股票的朋友们。

下个月

好了,这个月的内容就到这里。下个月,我们希望能把新工作流程、发布分支和 backport 流程中的问题都理顺。同时,计划继续迭代优化工作流程、搜索、回忆和共享功能。

一如既往,如果你觉得这个项目对你有帮助,欢迎通过 https://buy.immich.app/. 支持我们。

Cheers,
The Immich Team

原始来源: immich

评论 (0)