这份文档对 Immich 进行了技术介绍,Immich 是一款高性能的自托管照片和视频管理解决方案。它涵盖了系统架构、关键组件以及它们如何协同工作以提供自动备份、相册创建、媒体处理、面部识别和智能搜索等功能。
有关详细的安装说明,请参阅部署指南,有关开发设置,请参阅开发指南。
Immich 采用微服务架构,其组件经过容器化处理,可使用 Docker Compose 进行协同部署。
来源:server/package.json1-155 web/package.json1-99 mobile/pubspec.yaml1-148 cli/package.json1-74 machine-learning/pyproject.toml1-107
Immich 由五个主要组件组成,每个组件都有特定的职责。
Immich 服务器采用 NestJS (v11) 构建,作为核心后端。它处理以下任务:
Web UI 采用 Svelte 和 SvelteKit 构建,提供响应式浏览器界面,用于管理照片和视频。
主要功能
移动应用程序采用 Flutter 构建,可用于 iOS 和 Android 平台。
主要功能
一个基于 Python 和 FastAPI 构建的服务,提供:
它支持多种硬件加速选项:
来源:machine-learning/pyproject.toml8-54
一个基于 Node.js 的 CLI 工具,使用户能够:
该图展示了数据如何在 Immich 系统中流动,从资产摄取到面向用户的功能。
来源:server/package.json37-72 machine-learning/pyproject.toml8-54
Immich 服务器使用 NestJS 控制器和服务模式来提供 RESTful API。下面是服务器 API 和任务处理系统的结构。
来源:server/package.json37-72 open-api/immich-openapi-specs.json1-293
| 组件 | 技术 | 版本 |
|---|---|---|
| 服务器 | NestJS, Node.js | v11.0.4 |
| 网页界面 | Svelte, SvelteKit | v5.25.3 |
| 移动应用程序 | Flutter | v3.29.3 |
| 机器学习服务 | Python, FastAPI | v0.95.2+ |
| 数据库 | PostgreSQL, pgvecto.rs | v8.11.3 |
| 缓存与任务队列 | Redis, BullMQ | v5.3.2, v4.8.0 |
| 命令行界面 | TypeScript | v5.3.3 |
| 媒体处理 | Sharp(图像处理), FFmpeg(视频处理) | v0.33.0 |
| 元数据提取 | ExifTool | v28.3.1 |
来源:server/package.json37-72 web/package.json27-53 mobile/pubspec.yaml12-81 machine-learning/pyproject.toml8-54 cli/package.json64-69
| 功能 | 描述 | 相关组件 |
|---|---|---|
| 资产上传 | 照片和视频的上传与存储 | 服务器,Web 界面,移动应用 |
| 去重 | 防止重复资产 | 服务器 |
| 元数据提取 | 读取 EXIF、GPS 和其他元数据 | 服务器 |
| 缩略图生成 | 创建优化缩略图 | 服务器 |
| 视频转码 | 转换视频以供网页播放 | 服务器 |
| 面部识别 | 人脸识别与分组 | 机器学习,服务器 |
| 目标检测 | 图像中的物体识别 | 机器学习,服务器 |
| 智能搜索 | 照片的自然语言搜索 | 机器学习,服务器 |
| 相册 | 照片整理 | 服务器,Web 界面,移动应用 |
| 共享 | 与其他用户分享相册 | 服务器,Web 界面,移动应用 |
| 用户管理 | 用户账户和权限 | 服务器,Web 界面 |
| 地图视图 | 基于地理位置的照片查看 | 服务器,Web 界面,移动应用 |
| 后台备份 | 照片自动备份 | 移动端 |
| CLI 访问 | 命令行管理 | CLI |
Immich 设计为使用 Docker Compose 进行部署,同时支持开发和生产环境。
有关详细的部署说明,请参阅 Wiki 页面部署指南。
来源:mobile/android/fastlane/Fastfile1-46 mobile/ios/fastlane/Fastfile1-36 README.md55-56