Общая фотобиблиотека в Immich с распознаванием лиц у каждого пользователя

В процессе создания для себя автоматизированного семейного архива столкнулся с некоторыми ограничениями Immich, нашел обход штатными средствами, буду использовать в проекте. Возможно кому-то будет интересно и полезно для собственного использования (много писать не люблю поэтому доверил формулировку ИИшке, но суть понятна) :


Общая фотобиблиотека в Immich с распознаванием лиц у каждого пользователя

Зачем

Partner Sharing и общие альбомы не запускают распознавание лиц на чужих фото.
People / Faces привязаны к владельцу ассета.

Нужно: несколько пользователей видят одни и те же файлы, у каждого работает своё распознавание лиц, файлы на диске нельзя удалить через Immich.

Решение

  1. Одна общая папка на диске (например /mnt/HDD2TB/FOTO_External/SEMYAFOTOARHIV).

  2. В docker-compose Immich смонтировать её read-only:

    - /mnt/HDD2TB/FOTO_External:/external/foto:ro
    
  3. Админ создаёт отдельную External Library для каждого пользователя.

  4. У всех библиотек один и тот же import path (например /external/foto/SEMYAFOTOARHIV).

  5. Имена библиотек могут совпадать — это не проблема.

Как новые файлы появляются у всех

Файл на диске ≠ сразу видно в Immich. У каждого пользователя свой library_id; ассеты создаются только после обработки его библиотеки.

Способ Когда срабатывает Для всех library на один путь
Watch filesystem (эксперим.) Почти сразу после появления файла Да — watcher на каждую library
Периодическое сканирование (cron) По расписанию (ночь / каждые N часов) Да — «все библиотеки»
Ручной Scan Когда нажал админ Только выбранные / Scan all
API POST /libraries/{id}/scan По вызову (например family-archive-sync) Только указанный library_id

Watch (проверено на Immich v3.1.0)

Administration → Управление внешними библиотеками:

  • включить [ЭКСПЕРИМЕНТАЛЬНО] Слежение за библиотекой
  • сохранить (перезапуск Immich обычно не нужен)
  • периодическое сканирование лучше оставить как страховку

Условия:

  • путь лучше локальный диск на хосте Immich (на чистом NFS/SMB Watch часто не работает — так в доке);
  • при большом архиве поднять fs.inotify.max_user_watches (иначе ENOSPC);
  • функция экспериментальная — после крупных апдейтов Immich стоит перепроверить.

На v3.1.0 при локальном /mnt/HDD2TB/... подтверждено: новый файл в общей папке подхватывается без ручного Scan, в том числе у нескольких пользователей с library на один path.

Результат

Что Как
Фото видят все Да, через свои External Library
Распознавание лиц У каждого своё, на «своих» ассетах
Удаление файлов с диска Невозможно (:ro)
Удалил в Immich При следующем Scan / Watch фото вернётся
Новые файлы у всех Watch и/или периодический scan

Ограничения

  • Thumbnails, faces и ML считаются отдельно для каждого пользователя → больше места и нагрузка (порядок: единицы–десятки ГБ на пользователя на ~100 ГБ архива, не удвоение оригиналов).
  • Имена людей не синхронизируются между аккаунтами.
  • Создавать External Library может только администратор.
  • Watch — experimental; на сетевых дисках ненадёжен.

Итог

Штатная схема Immich: общая папка + External Library на пользователя + mount :ro + Watch (или частый cron).
Даёт общее хранилище, защиту файлов от удаления и полноценное распознавание лиц без Partner Sharing. На Immich v3.1.0 Watch для локального диска подтверждён на практике.

1 лайк