
majorfi/immich-stackImmich Stack 是一个基于 Go 的命令行工具和库,用于在 Immich 照片管理系统中自动将相似照片分组("堆叠")。它通过 Immich API 提供可配置、稳健且可扩展的逻辑,实现照片的分组、排序和堆叠管理。该项目深受 immich-auto-stack 启发。
适用于使用 Immich 管理大量照片的用户,特别是需要自动整理相似照片(如同一事件拍摄的多张照片、编辑版本与原始版本、不同格式的同一场景照片等)的场景。支持单次运行和定时任务两种模式,满足即时整理和定期维护需求。
bash# 创建 .env 文件 cat > .env << EOL API_KEY=你的_immich_api密钥 API_URL=[***] RUN_MODE=cron CRON_INTERVAL=60 EOL # 使用 Docker Hub 运行 docker run -d --name immich-stack --env-file .env -v ./logs:/app/logs majorfi/immich-stack:latest # 或使用 GitHub 容器注册表 docker run -d --name immich-stack --env-file .env -v ./logs:/app/logs ghcr.io/majorfi/immich-stack:latest
| 变量名 | 描述 | 默认值 |
|---|---|---|
API_KEY | 你的 Immich API 密钥 | (必填) |
API_URL | Immich API 地址 | [***] |
RUN_MODE | 运行模式(once 或 cron) | once |
CRON_INTERVAL | cron 模式的间隔时间(秒) | 86400(24小时) |
DRY_RUN | 不应用实际更改 | false |
RESET_STACKS | 删除所有现有堆叠 | false |
REPLACE_STACKS | 为新分组替换现有堆叠 | false |
PARENT_FILENAME_PROMOTE | 优先作为父文件的文件名子串 | edit |
PARENT_EXT_PROMOTE | 优先作为父文件的扩展名 | .jpg,.dng |
WITH_ARCHIVED | 包含已归档资源 | false |
WITH_DELETED | 包含已删除资源 | false |
yamlversion: "3.8" services: immich-stack: container_name: immich_stack # 使用 Docker Hub 镜像(Portainer 推荐) image: majorfi/immich-stack:latest # 或使用 GitHub 容器注册表 # image: ghcr.io/majorfi/immich-stack:latest environment: - API_KEY=${API_KEY} - API_URL=${API_URL:-[***]} - DRY_RUN=${DRY_RUN:-false} - RESET_STACKS=${RESET_STACKS:-false} - REPLACE_STACKS=${REPLACE_STACKS:-false} - PARENT_FILENAME_PROMOTE=${PARENT_FILENAME_PROMOTE:-edit} - PARENT_EXT_PROMOTE=${PARENT_EXT_PROMOTE:-.jpg,.dng} - WITH_ARCHIVED=${WITH_ARCHIVED:-false} - WITH_DELETED=${WITH_DELETED:-false} - RUN_MODE=${RUN_MODE:-once} - CRON_INTERVAL=${CRON_INTERVAL:-86400} volumes: - ./logs:/app/logs restart: on-failure
要与现有 Immich 安装集成:
docker-compose.yml 中:yamlimmich-stack: container_name: immich_stack image: ghcr.io/majorfi/immich-stack:latest environment: - API_KEY=${API_KEY} - API_URL=${API_URL:-[***]} - DRY_RUN=${DRY_RUN:-false} - RESET_STACKS=${RESET_STACKS:-false} - REPLACE_STACKS=${REPLACE_STACKS:-false} - PARENT_FILENAME_PROMOTE=${PARENT_FILENAME_PROMOTE:-edit} - PARENT_EXT_PROMOTE=${PARENT_EXT_PROMOTE:-.jpg,.dng} - WITH_ARCHIVED=${WITH_ARCHIVED:-false} - WITH_DELETED=${WITH_DELETED:-false} - RUN_MODE=${RUN_MODE:-once} - CRON_INTERVAL=${CRON_INTERVAL:-86400} volumes: - ./logs:/app/logs restart: on-failure depends_on: immich-server: condition: service_healthy
.env 文件中添加环境变量:sh# Immich Stack 设置 API_KEY=你的_immich_api密钥 API_URL=[***] # 使用内部 Docker 网络 RUN_MODE=once # 选项:once(单次), cron(定时) CRON_INTERVAL=86400 # 秒数,仅在 RUN_MODE=cron 时使用
shdocker compose down docker compose up -d
--criteria 标志或 CRITERIA 环境变量覆盖默认分组规则PARENT_FILENAME_PROMOTE(逗号分隔的子串)提升包含特定子串的文件为父文件PARENT_EXT_PROMOTE(逗号分隔的扩展名)进一步优先选择特定扩展名的文件.jpeg > .jpg > .png > 其他格式对于文件:L***.JPG、L***.edit.jpg、L***.DNG,当设置 PARENT_FILENAME_PROMOTE=edit 和 PARENT_EXT_PROMOTE=.jpg,.dng 时,排序结果为:
L***.edit.jpg L***.JPG L***.DNG
bash# 本地构建 docker build -t immich-stack . # 本地运行 docker run -d \ --name immich-stack \ --env-file .env \ -v ./logs:/app/logs \ immich-stack



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务