Аннотация

Сравнения self-hosted фото обычно сводятся к списку функций: есть ли мобильное приложение, ищет ли по лицам, сколько ест памяти. Между тем у Immich, PhotoPrism и Ente разная архитектура хранения, и именно она определяет, что произойдёт, когда вы потеряете базу, где будет считаться ML и чем обернётся обновление через год. Этот обзор разбирает три модели: база как источник истины, индекс над папкой оригиналов и хранилище непрозрачных зашифрованных блобов с иерархией ключей. Данные и версии — на 1 ноября 2026 года: Immich v3.3.5 (21 октября 2026), PhotoPrism 261029-963b58c50 (29 октября 2026), Ente Photos v1.3.67 (30 октября 2026)123.

Допущение, которое здесь принимается: одна машина с Docker Compose, библиотека от десятков тысяч до нескольких сотен тысяч ассетов, семья из нескольких человек, без кластера и без внешнего S3 у Immich и PhotoPrism. Для больших инсталляций выводы про хранение остаются, а числа по памяти и диску нужно пересчитывать.

Короткий вывод. Immich — приложение с базой в роли источника истины: без Postgres библиотека превращается в набор файлов с UUID-именами. PhotoPrism — индекс над папкой оригиналов: индекс можно потерять и пересобрать, заплатив временем. Ente — сервер, который не видит ваши фотографии: база хранит зашифрованные ключи и метаданные, и без неё даже целые блобы не расшифровать456.

Введение

Актуальность. Immich за пару лет превратился в самого заметного кандидата на замену Google Photos, PhotoPrism остался лагерем тех, кто хранит архив папками, а Ente занял нишу «облако, которому не нужно доверять». Публичные сравнения при этом почти всегда меряют одно и то же: наличие лиц, скорость интерфейса, минимальную память. Вопросы, которые реально решают судьбу библиотеки, звучат иначе: что я потеряю, если умрёт диск с базой; сколько будет стоить пересобрать индекс; где хранятся эмбеддинги лиц и кто их видит; что сломается при переходе на следующую мажорную версию478.

Цель — показать, что три проекта решают одну задачу тремя разными способами, и вывести из этого практические следствия для бэкапа, ML и эксплуатации. Заодно проверить, насколько распространённые советы из сравнений соответствуют текущей документации: часть из них устарела настолько, что мейнтейнеры Immich публично поправляют советчиков9.

Границы. Рассматриваются только три серверных продукта в self-hosted развёртывании; Nextcloud Photos, LibrePhotos, PhotoStructure и облачные тарифы остаются за рамками. Собственных замеров скорости индексации здесь нет: ни один из проектов не публикует воспроизводимый бенчмарк, а community-числа несопоставимы по железу и размеру библиотеки — это ограничение зафиксировано отдельно9.

Три модели хранения

Immich: база — источник истины

Ключевая фраза в документации Immich звучит буднично, но определяет всё остальное: «It does not scan the library folder, so database backups are essential»4. Приложение не выводит библиотеку из файлов на диске — оно хранит её в Postgres и ссылается на файлы. Отсюда следует цепочка решений, которые иначе выглядят произвольными.

Файлы по умолчанию лежат с именами-UUID: при выключенном Storage Template Immich сохраняет имена в виде случайной строки, чтобы избежать коллизий, а оригинальные имена приходится возвращать отдельной job-миграцией10. Включённый шаблон раскладывает ассеты по путям вида Year/Year-Month-Day/Filename.Extension и умеет перекладывать уже загруженное — но это именно операция над файлами, а не источник метаданных11. Внешние библиотеки (External Libraries) позволяют подключить существующую папку, однако метаданные, добавленные в Immich — альбомы, описания, — живут только в базе: при перемещении файла внутри библиотеки они теряются при следующем сканировании, и это признано известной проблемой12.

Требования к железу вытекают из той же модели. Минимум — 6 ГБ RAM и 2 ядра, рекомендуется 8 ГБ и 4 ядра; файлы Postgres обычно занимают 1–3 ГБ, и им нужен локальный SSD, «never a network share of any kind»13. Отдельно оговорено: если в Docker включены лимиты ресурсов, Postgres нужно не меньше 2 ГБ13. Сгенерированный контент — превью и транскодированное видео — добавляет к библиотеке в среднем 10–20 % объёма, причём на каждый ассет создаётся три вида превью: blurred thumbhash, WebP-preview и JPEG-thumbnail1310.

Версия 3.0 сделала эту модель ещё жёстче: поддержка pgvecto.rs удалена, и DB_VECTOR_EXTENSION=pgvecto.rs теперь просто выбрасывает ошибку1415. Векторный индекс — часть схемы базы, а не приложение к ней; поэтому Immich и поставляет собственный образ Postgres с скомпилированным расширением, а не подключается к вашему общему кластеру16.

PhotoPrism: оригиналы — архив, индекс — производное

PhotoPrism устроен зеркально. Оригиналы лежат в папке originals, и проект обещает: «PhotoPrism will generally not move, rename, or otherwise modify the files in this folder unless a user requests it»5. Всё остальное — база index.db, превью, YAML-sidecar-файлы с метаданными, JSON от ExifTool — живёт в отдельной папке storage5. Индекс можно потерять: при восстановлении из одних оригиналов достаточно полного пересканирования, чтобы заново создать sidecar-файлы и превью17.

Цена этой модели — база как узкое место. По умолчанию используется SQLite с DSN index.db?_busy_timeout=5000; документация прямо говорит, что SQLite годится для «small libraries with a few thousand files», а при росте индекса и числа одновременных обращений начинает блокировать запись, вплоть до ошибок и таймаутов при индексации7. Отдельно указан лимит: на SQLite PhotoPrism ограничивает индексацию четырьмя воркерами независимо от размера хоста, «to avoid database is locked contention»18. Для больших библиотек рекомендуется MariaDB 10.5.12+, где имеет смысл поднять InnoDB buffer pool до 1–2 ГБ и следить, чтобы свободных страниц было не меньше 5 %1918.

Свежая деталь, которая меняет расклад: сборка от 29 октября 2026 добавила экспериментальную поддержку PostgreSQL 16+220. Экспериментальную буквально: «The database schema may still change without migrations, so you should not use it for a library you depend on»20. То есть у PhotoPrism теперь три варианта базы, и выбирать между ними придётся по нагрузке, а не по вкусу.

Ente: непрозрачные блобы и иерархия ключей

Ente — не «фотосервис с шифрованием», а хранилище зашифрованных объектов. Клиент генерирует masterKey, из пароля выводится keyEncryptionKey (Argon2id через libsodium), master key шифруется им и в таком виде уходит на сервер; каждая коллекция получает collectionKey, каждый файл — свой fileKey, и по проводу идут только зашифрованные данные8. Файлы шифруются потоково (crypto_secretstream_*, XChaCha20-Poly1305), ключи — crypto_secretbox_easy (XSalsa20-Poly1305)8.

Практическое следствие сформулировано в документации по бэкапам прямым текстом: «While the actual encrypted photos are indeed stored in the object storage, this encrypted data will not be usable without the database since the database contains information like a file specific encryption key»6. Для расшифровки нужны три вещи: сами зашифрованные данные из object storage, зашифрованные ключи файлов и коллекций из базы и master key, который выводится из вашего пароля6. Разработчики честно советуют новичкам начать с plaintext-бэкапа фотографий через CLI или десктопное приложение, а к бэкапу инстанса переходить, когда части системы уже понятны6.

Сервер при этом сознательно «глупый»: Museum — один статически собранный бинарник на Go, который можно запустить и без Docker, собрав из исходников; ему нужны Postgres и S3-совместимое хранилище2122. В поставке по умолчанию это MinIO, а репликация на три бакета выключена и включается флагом replication.enabled2322. Минимальные требования скромные на фоне Immich: 1 ГБ RAM и 1 ядро24. Но и поддержка self-hosting в README обозначена без иллюзий: «we will currently not be able to prioritize support queries related to self hosting»22.

Что это значит для бэкапа

Разные модели хранения дают три разных контракта на восстановление, и путать их дорого.

У Immich база незаменима, поэтому порядок бэкапа зафиксирован: сначала база, потом файлы, а лучше — остановить immich-server на время копирования, чтобы наборы не разъехались. Обратный порядок опасен: восстановленная база может ссылаться на файлы, которых в бэкапе нет4. Автоматические дампы создаются ежедневно в 2:00 и хранятся в количестве 14 по умолчанию; они лежат в UPLOAD_LOCATION/backups, но не содержат ни фото, ни видео — только метаданные4. Восстановление через CLI требует «completely fresh install»: если сервер уже запускался, посыпятся конфликты Postgres, и папку с данными придётся удалить4. Это не мелочь, а процедура, которую нужно один раз прогнать на тестовом стенде до аварии.

У PhotoPrism бэкап — это оригиналы плюс дамп индекса; всё остальное восстанавливается пересборкой17. Дампы с версии 240523 создаются ежедневно, по умолчанию хранятся 3 копии, а команда photoprism backup -i умеет писать в stdout, чтобы файл не оставался внутри контейнера25. Восстановление возвращает не только фото, но и пользователей, пароли, сессии и настройки — то есть после восстановления логиниться нужно учёткой из бэкапа17. Если базы нет вовсе, остаются YAML-файлы: часть метаданных и альбомы из них восстанавливаются, но имена людей и кластеры лиц придётся собирать заново17.

У Ente бэкап — это конфигурация (museum.yaml, credentials.yaml), том базы, том object storage и пароль. Документация отдельно предупреждает о типичной ошибке: люди аккуратно реплицируют бакеты и забывают про базу, после чего зашифрованные фото остаются, а ключей к ним нет6. Совет «проверьте полное восстановление, а не только наличие файлов» здесь не вежливость, а единственный способ узнать, что бэкап рабочий6.

Общая закономерность: чем «умнее» сервер, тем больше в бэкапе доля базы и тем меньше шансов восстановиться вручную. Immich требует базы и дисциплины порядка копирования; PhotoPrism прощает потерю индекса ценой часов пересчёта; Ente не прощает потери базы вообще, зато сама база не содержит читаемых метаданных4176.

ML: где считаются эмбеддинги

Immich: серверный конвейер

Immich считает ML на сервере, в отдельном контейнере immich-machine-learning: там CLIP-эмбеддинги для семантического поиска и распознавание лиц26. Поиск идёт через Postgres и расширение VectorChord, а не через отдельный поисковый движок25. Модель CLIP выбирается по языку: для англоязычных запросов предлагается курируемый список от крупных к мелким, для остальных — многоязычные семейства. Тонкость, важная для русского: модели nllb ожидают запрос на языке из настроек пользователя, а xlm и siglip2 понимают текст независимо от выбранного языка25. В примерах документации фигурирует, например, ViT-B-16-SigLIP__webli25.

Механика поиска опирается на контрастное обучение CLIP: модель учится сопоставлять изображение с описанием, предсказывая, какая подпись подходит к картинке, и после обучения текст становится способом адресовать визуальные понятия без отдельного классификатора27. Лица — отдельная ветка: Immich использует модели InsightFace (antelopev2, buffalo_l, buffalo_m, buffalo_s), причём в README зафиксировано разрешение от автора моделей и прямое ограничение: разрешение не распространяется на перераспространение или коммерческое использование моделей третьими лицами28. Такие распознаватели обучают метрическим лоссом вроде ArcFace: он вводит угловой отступ между классами и повышает разделимость эмбеддингов29. Для self-hosted это значит, что вы не можете просто выложить веса в свой реестр.

Аппаратное ускорение есть, но помечено экспериментальным: CUDA (compute capability 5.2+, драйвер не ниже 545), ROCm, OpenVINO, ARM NN и RKNN; ROCm-образ требует минимум 35 ГиБ свободного места, а на Intel iGPU ожидается повышенный расход RAM26. С версии 3 контейнер ML на amd64 требует микроархитектуру x86-64-v2, последняя версия с поддержкой v1 — 2.7.51314. Для владельца старого NAS это не абстракция, а причина, по которой обновление не запустится.

PhotoPrism: фиксированный словарь и отдельный детектор

PhotoPrism тоже считает на сервере, но по другой схеме: встроенный классификатор на ONNX раздаёт метки из фиксированного словаря ImageNet-1k — тысяча классов, одинаковых для всех моделей30. Модель по умолчанию — EfficientFormerV2-S2: 82.2 % Top-1 на ImageNet, 12.7 млн параметров; замеры авторов документации дают 71 мс p50 и 74 мс p95 на картинку на Intel Core i5-7500T, а на корпусе из 402 фотографий Wikimedia модель поставила хотя бы одну метку 81.8 % изображений30. Open-vocabulary и подписи — только через внешний vision-сервис (в том числе Ollama), а не встроенным классификатором30.

Лица обрабатываются тремя стадиями: детекция на 720-пиксельном превью, эмбеддинг, кластеризация алгоритмом DBSCAN3132. Детектор по умолчанию — YuNet, компактная ONNX-модель без привязки к GPU; в статье авторов у неё 75 856 параметров, 81.1 % mAP на WIDER FACE hard и 1.6 мс на кадр 320×320 на i7-12700K3332. Эмбеддинг — SFace для новых библиотек и FaceNet для созданных раньше: векторы разных моделей несравнимы, поэтому смена модели требует photoprism faces migrate, которая пересчитывает все лица и сохраняет назначенных людей, а пороги кластеризации калибруются под модель и не переносятся между ними32. Для сотен тысяч лиц кластеризация идёт часами, и в логах это выглядит как «matched 90,500 markers every 15 minutes or so»18.

Разница с Immich принципиальная: Immich ищет по описанию на естественном языке, PhotoPrism — по меткам из ограниченного словаря плюс фильтрам (место, камера, человек, папка). Для «найди кота на диване» этого мало; для «покажи всё, что помечено beach, за 2019 год» — достаточно, и работает предсказуемо на CPU.

Ente: ML на устройстве

Ente выбрал третий путь: машинное обучение целиком на клиенте. Документация формулирует это без оговорок — «All machine learning happens entirely on your device — your photos and ML data are never sent to Ente’s servers»34. Это касается и лиц, и magic search: приложение скачивает оригиналы, строит индексы локально, шифрует их и синхронизирует между устройствами34.

Следствия неочевидны и их стоит проговорить. Во-первых, веб-версия остаётся без ML вообще: photos.ente.com умеет только поиск по дате, имени файла, описанию и альбому34. Во-вторых, первичная индексация — это скачивание всей библиотеки на устройство; разработчики советуют начинать с десктопа и включать ML до импорта большой библиотеки, чтобы не качать файлы дважды34. В-третьих, на телефонах с 4–6 ГБ RAM индексация больших библиотек влияет на производительность, и локальную индексацию на мобильном можно отключить, оставив её десктопу34. Наконец, управление кластерами лиц доступно только на мобильном: десктоп умеет смотреть и назначать имена, но не менять группировки35.

Сравнение по осям получается такое. Серверный ML (Immich, PhotoPrism) даёт общий индекс для всей семьи и не требует мощного клиента, но платит GPU/CPU на сервере и доверием к серверу: он видит расшифрованные фото. Клиентский ML (Ente) снимает вопрос доверия и не требует серверного GPU, но переносит стоимость на каждое устройство и лишает веб-поиска. Промежуточный вариант — PhotoPrism с его фиксированным словарём: дёшево по железу, предсказуемо, но без открытого словаря263034.

Телефон и синхронизация

Immich здесь сильнее всех по механике: фоновая загрузка включается в приложении, альбомы синхронизируются в одну сторону (с телефона на сервер), а функция Free Up Space удаляет с устройства то, что уже подтверждено на сервере — пакетами по 2000 ассетов на Android и 10 000 на iOS36. Документация честно перечисляет грабли: при использовании iCloud удаление через Free Up Space удалит фото и из iCloud, потому что синхронизация двусторонняя; а бэкап папки WhatsApp приведёт к тому, что после очистки в чатах останутся битые превью36. Для семейного сценария важнее другое: приложение и сервер должны совпадать по мажорной и минорной версии, иначе логин ломается10.

PhotoPrism в документации описывает загрузку с телефона через браузер, WebDAV в папку импорта или автоматический импорт с задержкой безопасности, а сам импорт недоступен в read-only режиме, потому что требует записи в originals375. Это не хуже и не лучше — это другая модель: вы не «бэкапите камеру», а складываете файлы в архив.

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

Цена эксплуатации и обновлений

Immich — самый быстрый по фичам и самый дорогой по вниманию. Переход на v3 принёс длинный список ломающих изменений: удалённые переменные окружения, изменённый формат ошибок (Zod вместо class-validator, X-Correlation-ID вместо поля в теле), переименованные и удалённые эндпоинты14. Формально «для большинства пользователей обновление работает как всегда», но третьи инструменты и скрипты ломаются15. Плюс связка «расширение — мажор Postgres — схема Immich»: пропущенная промежуточная версия базы приводит к отказу сервера стартовать, и лечится это не удалением каталога, а чтением release notes1615. Практики добавляют к этому гигиену автовакуума на таблицах эмбеддингов и оценку «несколько единиц гигабайт базы на 100 тыс. ассетов» — цифра совпадает с порядком из документации3913.

PhotoPrism движется медленнее и версионируется датами сборки, но и у него есть свои переходы: SQLite → MariaDB (переносить только через photoprism database transfer, иначе схема останется неоптимальной), теперь ещё и экспериментальный PostgreSQL, у которого схема может меняться без миграций2018. Отдельного внимания заслуживает безопасность по умолчанию: в сборке 261029 MCP включён для подходящих пользователей, и отключается либо в настройках аккаунта, либо глобально через PHOTOPRISM_DISABLE_MCP2.

Ente — самый спокойный по серверным обновлениям и самый бедный по поддержке: один бинарник, пара зависимостей, но self-hosting официально не приоритет, а документация местами «not readily documented»22. Многопользовательская модель у него фактически «один человек — один аккаунт»: общие альбомы есть, но общая библиотека и общий индекс — нет38.

Противоречия и пробелы

Первое противоречие — источники советов. В обсуждении про железо для 750 тыс. ассетов один из ответов (сгенерированный LLM) предлагает планировать RAM под индекс Typesense; мейнтейнер Immich отвечает: «we haven’t used typesense for a while»9. Тот же ответ советует 32–64 ГБ RAM, тогда как документация говорит про 8 ГБ для обычной инсталляции — оба числа могут быть верны для своих сценариев, но читатель не увидит разницы, если не сверит источник139.

Второе — числа, которых нет. Ни Immich, ни PhotoPrism, ни Ente не публикуют воспроизводимого бенчмарка индексации целой библиотеки: сколько ассетов в час на каком железе. В обсуждении Immich пользователи сообщают о примерно неделе на ~250 тыс. внешних ассетов с GPU RTX 4080 и о похожем сроке с Intel iGPU через OpenVINO — это полезные ориентиры, но не измерение9. У PhotoPrism есть только документированные тайминги классификации одного изображения и предупреждение, что распознавание лиц на сотнях тысяч лиц идёт часами3018.

Третье — цена шифрования. Публичных замеров накладных расходов E2EE у Ente нет: сколько добавляют заголовки secretstream и во что обходится отсутствие серверной дедупликации, не измерено. Что дедупликации между семейными аккаунтами нет, документация говорит прямо38; что сервер не может дедуплицировать блобы в принципе — вывод из архитектуры, а не заявление проекта86.

Четвёртое — качество кластеризации лиц. Единственные числа, которые публикуют проекты, — метрики моделей на академических датасетах (ImageNet, WIDER FACE), а не доля правильно сгруппированных людей в личной библиотеке3033. Любые сравнения «у Immich лица точнее» в статьях остаются частным опытом.

Как выбирать

Если нужен Google Photos на своём железе и семья с телефонами. Immich: фоновая загрузка, общий индекс, семантический поиск, и цена — дисциплина бэкапа (база + порядок копирования + тренировка восстановления) и готовность читать release notes перед каждым мажором43614.

Если есть архив папками на 10 лет и не хочется зависеть от приложения. PhotoPrism: оригиналы не трогаются, индекс пересобирается, MariaDB спасает от блокировок SQLite, а экспериментальный PostgreSQL лучше не ставить под библиотеку, которую нельзя потерять5172018. Для семьи проект сам советует отдельные инстансы вместо одной общей библиотеки — с общими настройками, правами на файлы и дублями иначе придётся разбираться вручную40.

Если модель угрозы включает «сервер прочитает мои фото». Ente: сквозное шифрование, ML на клиенте, сервер не видит ни фото, ни индексов. Цена — потеря веб-поиска, скачивание библиотеки на устройство для индексации и бэкап, в котором пароль такой же обязательный элемент, как база8634.

Гибрид. Рабочая схема, которую применяют практики: Immich как ежедневный драйвер, PhotoPrism или Ente как холодный архив с независимым бэкапом. Это не рекомендация вендоров и не бесплатно: два индекса, две политики обновлений, двойное место на диске. Но именно так снимается главный риск — «одно приложение с одной базой решает, увижу ли я свои фото через пять лет».

Заключение

Три проекта выглядят конкурентами, но отвечают на разные вопросы. Immich отвечает «как сделать удобно», и его архитектура — база плюс ссылки на файлы — следует из этого ответа. PhotoPrism отвечает «как сохранить архив», и поэтому оригиналы неприкосновенны, а индекс расходуем. Ente отвечает «как не доверять серверу», и поэтому сервер хранит блобы и ключи, а не фотографии.

Практический вывод прост: выбирать нужно не по списку функций, а по тому, какую потерю вы готовы пережить. Потеря базы Immich — это потеря альбомов, лиц и истории, которую не восстанавливает пересчёт файлов. Потеря индекса PhotoPrism — это часы пересчёта и потерянная ручная работа по людям. Потеря базы Ente — это потеря доступа к данным, которые физически целы. Ни один из трёх вариантов не отменяет правила, которое старше всех них: бэкап проверяется восстановлением, а не наличием файлов4176.

Quality Metrics

MetricValue
Sources found40
Sources read40
Sources cited40
Paragraph citation coverage89%
Words3663
Research rounds3
Academic / official share95% (38 из 40)
Data cutoff2026-11-01
VersionsImmich v3.3.5, PhotoPrism 261029-963b58c50, Ente Photos v1.3.67
Open questionsнет публичного бенчмарка индексации; накладные расходы E2EE не измерены

  1. Immich. “v3.3.5.” GitHub Releases, 21 October 2026. https://github.com/immich-app/immich/releases/tag/v3.3.5 ↩︎

  2. PhotoPrism. “October 29, 2026.” GitHub Releases, 29 October 2026. https://github.com/photoprism/photoprism/releases/tag/261029-963b58c50 ↩︎ ↩︎ ↩︎

  3. Ente. “photos-v1.3.67.” GitHub Releases, 30 October 2026. https://github.com/ente/ente/releases/tag/photos-v1.3.67 ↩︎

  4. Immich Docs. “Backup and Restore.” docs.immich.app, 2026. https://docs.immich.app/administration/backup-and-restore/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  5. PhotoPrism Docs. “Directory Overview.” docs.photoprism.app, 2026. https://docs.photoprism.app/user-guide/backups/folders/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  6. Ente Help. “Backing up your Ente instance.” ente.com, 2026. https://ente.com/help/self-hosting/administration/backup ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  7. PhotoPrism Docs. “Troubleshooting SQLite Problems.” docs.photoprism.app, 2026. https://docs.photoprism.app/getting-started/troubleshooting/sqlite/ ↩︎ ↩︎

  8. Ente. “Architecture.” ente.com, 2026. https://ente.com/architecture/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  9. Immich. “What hardware is required for a huge set of photos/videos?” GitHub Discussion #23684, 2025. https://github.com/immich-app/immich/discussions/23684 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  10. Immich Docs. “FAQ.” docs.immich.app, 2026. https://docs.immich.app/FAQ/ ↩︎ ↩︎ ↩︎

  11. Immich Docs. “Storage Template.” docs.immich.app, 2026. https://docs.immich.app/administration/storage-template/ ↩︎

  12. Immich Docs. “External Libraries.” docs.immich.app, 2026. https://docs.immich.app/features/libraries/ ↩︎

  13. Immich Docs. “Requirements.” docs.immich.app, 2026. https://docs.immich.app/install/requirements/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  14. Immich Blog. “Migrating to v3.” immich.app, 1 July 2026. https://immich.app/blog/v3-migration ↩︎ ↩︎ ↩︎ ↩︎

  15. Immich. “v3.0.0.” GitHub Releases, 2 July 2026. https://github.com/immich-app/immich/releases/tag/v3.0.0 ↩︎ ↩︎ ↩︎

  16. Immich Docs. “Pre-existing Postgres.” docs.immich.app, 2026. https://docs.immich.app/administration/postgres-standalone/ ↩︎ ↩︎

  17. PhotoPrism Docs. “Restoring Backups.” docs.photoprism.app, 2026. https://docs.photoprism.app/user-guide/backups/restore/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  18. PhotoPrism Docs. “Performance Tips.” docs.photoprism.app, 2026. https://docs.photoprism.app/getting-started/troubleshooting/performance/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  19. PhotoPrism Docs. “Setup.” docs.photoprism.app, 2026. https://docs.photoprism.app/getting-started/ ↩︎

  20. PhotoPrism Docs. “Using PostgreSQL (Experimental).” docs.photoprism.app, 2026. https://docs.photoprism.app/getting-started/advanced/migrations/postgres/ ↩︎ ↩︎ ↩︎ ↩︎

  21. Ente Help. “Manual setup (without Docker).” ente.com, 2026. https://ente.com/help/self-hosting/installation/manual ↩︎

  22. Ente. “server/README.md.” GitHub, 2026. https://github.com/ente/ente/blob/main/server/README.md ↩︎ ↩︎ ↩︎ ↩︎

  23. Ente Help. “Configuration.” ente.com, 2026. https://ente.com/help/self-hosting/installation/config ↩︎

  24. Ente Help. “Quickstart.” ente.com, 2026. https://ente.com/help/self-hosting/ ↩︎

  25. Immich Docs. “Searching.” docs.immich.app, 2026. https://docs.immich.app/features/searching/ ↩︎ ↩︎ ↩︎ ↩︎

  26. Immich Docs. “Hardware-Accelerated Machine Learning.” docs.immich.app, 2026. https://docs.immich.app/features/ml-hardware-acceleration/ ↩︎ ↩︎ ↩︎

  27. A. Radford et al. “Learning Transferable Visual Models From Natural Language Supervision.” arXiv:2103.00020, 2021. https://arxiv.org/abs/2103.00020 ↩︎

  28. Immich. “machine-learning/README.md.” GitHub, 2026. https://github.com/immich-app/immich/blob/main/machine-learning/README.md ↩︎

  29. J. Deng et al. “ArcFace: Additive Angular Margin Loss for Deep Face Recognition.” arXiv:1801.07698, 2018. https://arxiv.org/abs/1801.07698 ↩︎

  30. PhotoPrism Docs. “Label Models.” docs.photoprism.app, 2026. https://docs.photoprism.app/developer-guide/vision/label-models/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  31. PhotoPrism Docs. “Face Recognition (Developer Guide).” docs.photoprism.app, 6 October 2026. https://docs.photoprism.app/developer-guide/vision/face-recognition/ ↩︎

  32. PhotoPrism Docs. “Face Recognition.” docs.photoprism.app, 2026. https://docs.photoprism.app/user-guide/ai/face-recognition/ ↩︎ ↩︎ ↩︎

  33. W. Wu, H. Peng, S. Yu. “YuNet: A Tiny Millisecond-level Face Detector.” Machine Intelligence Research 20(5), 2023. https://www.mi-research.net/article/doi/10.1007/s11633-023-1423-y ↩︎ ↩︎

  34. Ente Help. “Machine learning.” ente.com, 2026. https://ente.com/help/photos/features/search-and-discovery/machine-learning ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  35. Ente Help. “Face recognition.” ente.com, 2026. https://ente.com/help/photos/features/search-and-discovery/face-recognition ↩︎ ↩︎

  36. Immich Docs. “Mobile App.” docs.immich.app, 2026. https://docs.immich.app/features/mobile-app/ ↩︎ ↩︎ ↩︎

  37. PhotoPrism Docs. “Importing Files to Originals.” docs.photoprism.app, 2026. https://docs.photoprism.app/user-guide/library/import/ ↩︎

  38. Ente Help. “Sharing and Collaboration FAQ.” ente.com, 2026. https://ente.com/help/photos/faq/sharing-and-collaboration ↩︎ ↩︎ ↩︎

  39. Big Iron. “Immich Postgres Care: VectorChord, Vacuums, and Version Jumps.” bigiron.cc, 11 September 2026. https://www.bigiron.cc/guides/immich-postgres-care-vectorchord-vacuums-and-version-jumps ↩︎

  40. PhotoPrism Docs. “Multiple Libraries.” docs.photoprism.app, 2026. https://docs.photoprism.app/user-guide/users/libraries/ ↩︎