菜单

网页界面

相关源文件

Immich Web 界面是使用 Svelte/SvelteKit 构建的客户端应用程序,它为 Immich 安装提供了浏览、查看和管理照片与视频的用户界面。本文档将为需要理解或修改 Immich Web 界面的开发人员和贡献者解释其结构、组件和功能。

有关移动应用程序的信息,请参阅移动应用程序。有关服务器组件的详细信息,请参阅服务器组件

架构概述

Immich Web 界面是使用 Svelte/SvelteKit 和 TypeScript 构建的单页应用程序。它通过 Immich 服务器 API 进行通信,以获取和处理数据。

来源

核心组件

资产网格

资产网格是用于在时间轴视图中显示资产(照片和视频)的主要界面。它实现了虚拟滚动,以在大规模收藏中提供高性能。

资产网格实现了一些关键功能

  • 基于日期分组的虚拟滚动
  • 用于批量操作的资产选择
  • 时间轴快速导航
  • 响应式布局,支持缩略图大小调整

来源

资产查看器

资产查看器提供了一个全屏界面,用于查看和交互单个资产。它支持照片、视频以及全景图等特殊格式。

资产查看器的主要功能

  • 支持缩放的照片查看
  • 视频播放
  • 用于 360° 照片的全景视图
  • EXIF 和元数据显示
  • 资产操作(下载、分享、收藏等)
  • 资产间导航
  • 支持实况照片(运动照片)

来源

详细信息面板

详细信息面板显示当前查看资产的元数据和信息。可从资产查看器访问。

详细信息面板显示

  • 基本文件信息(名称、大小、分辨率)
  • EXIF 数据(相机型号、设置)
  • 包含地图集成的位置数据
  • 资产中标记的人物
  • 包含该资产的相册
  • 用户标签
  • 资产所有者的编辑选项

来源

缩略图

缩略图在整个界面中用于显示资产预览。

缩略图组件

  • 根据资产类型显示合适的预览
  • 显示状态指示器(收藏、归档、堆叠)
  • 处理批量操作的选择 UI
  • 使用 thumbhash 占位符进行快速加载
  • 支持悬停/触摸交互

来源

状态管理

Web 界面使用 Svelte store 进行状态管理。关键 store 包括

资产 Store

  • AssetStore:管理带虚拟化的资产集合
  • AssetViewingStore:处理当前查看的资产
  • AssetInteraction:管理批量操作的选择和焦点

来源

偏好设置和用户 Store

  • PreferencesStore:用户界面偏好设置(主题、布局等)
  • UserStore:用户配置文件和认证信息

来源

功能模块

相册管理

相册管理界面允许用户创建、查看和组织相册。

关键相册功能

  • 相册创建和编辑
  • 相册封面选择
  • 共享相册
  • 从相册中添加/删除资产
  • 相册下载
  • 共享相册的活动和评论

来源

人物管理

人物界面显示识别出的人脸及管理工具。

关键人物功能

  • 人脸识别结果浏览
  • 合并识别错误的人脸
  • 设置生日以显示年龄
  • 隐藏/显示识别出的人物
  • 手动人脸标记

来源

用户设置

用户设置界面允许对应用程序进行自定义。

关键设置功能

  • 用户配置文件管理
  • 主题选择(亮色/暗色)
  • API 密钥管理
  • 密码更改
  • OAuth 配置
  • 通知偏好设置
  • 下载偏好设置

来源

共享

共享界面支持与其他用户共享资产和相册。

关键共享功能

  • 与他人共享相册
  • 通过链接进行公开共享
  • 配置共享内容的权限
  • 共享链接管理

来源

导航系统提供对应用程序不同区域的访问。

UI 实现以下功能

  • 适用于移动设备和桌面的响应式设计
  • 亮色和暗色主题支持
  • 国际化(多语言支持)
  • 上下文操作栏
  • 用于常见操作的模态对话框

来源

常用 UI 组件

Web 界面使用多个可复用组件以实现一致的 UI 元素

主要组成部分包括:

  • 按钮变体(标准、图标)
  • 用于操作的上下文菜单
  • 模态框和对话框
  • 表单输入和控件
  • 加载指示器
  • 通知系统

来源

路由结构

应用程序使用 SvelteKit 路由,采用嵌套结构

路由描述
/photos所有资产的主时间轴视图
/albums相册管理视图
/albums/[albumId]单个相册视图
/people人物管理视图
/people/[personId]单个人物视图
/sharing共享管理视图
/user-settings用户设置视图
/auth/*认证路由
/admin/*管理路由(如果用户是管理员)

每个路由可以有额外的参数来表示特定状态,例如

  • ?at=assetId - 滚动到特定资产
  • ?assetId=id - 打开特定资产的资产查看器

来源

与服务器集成

Web 界面通过 Immich SDK 和 WebSockets 与服务器通信

SDK 为所有 API 操作提供了类型化的函数,而 WebSockets 则实现了以下实时更新

  • 资产上传状态
  • 资产修改
  • 人物缩略图更新
  • 系统通知

该界面使用各种实用函数来执行常见操作,例如

  • 资产下载
  • 日期和时间格式化
  • 文件大小格式化
  • 导航辅助

来源

主题和国际化

Web 界面支持亮色和暗色主题,偏好设置存储在浏览器中

国际化通过 svelte-i18n 实现,支持多种语言。语言文件根据用户偏好动态加载。

来源

总结

Immich Web 界面提供了一个用于管理和查看照片与视频的全面前端。其基于 Svelte 的组件化架构提供了响应式和交互式的用户体验。该界面处理复杂的功能,例如大型资产库的虚拟滚动、高级资产查看功能、人脸识别交互和共享功能。Svelte store 的状态管理实现了响应式更新,而与服务器 API 和 WebSockets 的集成则提供了实时数据同步。