Один из пунктов в моём Todo на 2023-й год звучит (звучал) как "Перенести фотки от Гугла куда-то ещё". Такое важное и почётное место эта задача заняла сразу по целой куче причин. Однако, прежде чем озвучить их, давайте поймём, с чем предстоит работать.
UPD: Да, я в курсе, что любое облако будет дешевле колхоза, описанного ниже. Спасибо за ваше мнение :)
С чем работаем
Я люблю фоткать, много и часто, не как фотограф, а как обыватель, на айфон. "Много и часто" — это значит, что когда я делаю селфач с друзьями, это сразу 5-8 кадров, потому что обязательно кто-нибудь моргнёт, получится ленивый глаз, или ещё что-нибудь. Результат понятный: 200+ гигабайт фоток с 2009 года на одном только Google Photos, который пережимает исходные файлы, и ещё около 150 гигабайт на Яндекс Диске с 2018, понятно, что какой-то процент изображений просто дублируется между двумя сервисами.
Почему и зачем
- Я уже давно хочу постепенно уйти от жёсткой привязки к крупным провайдерам. Гугл любит убивать давно работающие сервисы, плюс время от времени всплывают истории о (вроде как) беспричинных банах многолетних юзеров, которые в один момент теряют доступ к почте, фоткам и всем прочим сервисам Гугла. Шансы попасть под раздачу невелики, но рисковать не хочется. Яндекс же — изначально российская компания, и если несколько лет назад это была одна из немногих компаний в РФ, которым я мог бы доверять, то сегодня это уже не так. А значит файлики нужно забирать. И держать где-то у себя.
- Мне нравится возиться с домашним сервером. Впервые я этим заморочился сполгода назад, и идея заморочиться с домашним хранилищем для фоток идеально вписывается в сценарий использования хоумлаба. Плюс маленькая прокачка всяких докеров и околосерверных скиллов.
- Облака — это дорого. Ну то есть как: 100гб хранилища в Google One (это Drive, почта, Photos и что-то там ещё всё вместе) стоят всего 20 евро в год, 200гб — 30 евро, а дальше уже только 2тб за 100 евро. Учитывая, что я вплотную подхожу к верхнему порогу 20-еврового тарифа, цена будет только расти. Не забываем и про (призрачные) риски выхватить случайный бан: на этот случай нам нужно ещё одно облако. В моём случае это Яндекс Диск, который тоже стоит отдельных денег и который по-прежнему остаётся компанией из РФ со всеми сопутствующими бонусами и рисками.
- Бесплатная иллюзия контроля. Размещая фотки у себя, я избавляюсь от рисков, связанных с облачными хостерами и принимаю на себя пачку других, о которых (и об их нивелировании) поговорим ниже. Однако, ощущение чуточку большего контроля над окружающим миром бесценно само по себе.
Хранилище фоток в идеальном мире
Что нам требуется? Опять по пунктам:
- Селф-хостед софт
- Веб морда с хорошим интерфейсом для просмотра фоток на десктопе
- Мобильное приложение (в первую очередь, для аплоада фоток)
- Многопользовательсковость (я не один, у меня жена)
- Возможность бэкапить файлы куда-то наружу (мы же не думаем, что держать все фотки в одном месте хоть сколь-нибудь безопасно?)
- Опционально: умение работать с live-фотками с айфона
- Опционально: Реверс геокодинг, чтобы видеть где какая фотка была сделана на карте
- Опционально: Лайкание фоток
- Опционально: Архивирование фоток (скрытие из основной ленты без удаления)
- Опционально: Альбомчики (для меня вообще не обязательный пункт)
- Опционально: Рюши вроде сторей в духе "Год назад вы фоткали вот ето"
Итак, если не облака, то что? Когда я впервые задался вопросом содержания домашнего сервера, из опенсорсных решений выделялся, разве что, PhotoPrism. Я поставил его, поигрался, позагружал туда фотки, удобно. Но — совершенно нет многопользовательсковости. Подразумевается, что пользователь всего один, семьи у него нет, а потому и разделение фоток по неймспейсам личных пространств не нужно. По крайней мере, в бесплатном community edition. В целом справедливо, но если я хочу перестать платить за облака, то эээ... Я и за селфхостед софт платить не хочу? Считайте меня жадным, это бесплатно. В общем, юзер менеджмент есть только в версии за 6 евро в месяц. Плюс, у них был какой-то скандал с их комьюнити не так давно, где кто-то как-то некрасиво поступил, но в это я уже не вникал. Фотопризм не вариант.
Дальше мне в r/selfhosted попался Immich. И как-то, кажется, это сразу было попадание в десяточку. Он удовлетворяет всем описанным в пунктах выше требованиях, а ещё умеет распознавать лица и машин лернинг (кажется, пока не очень умело), визуально очень похож на Google Photos (жирнейший плюс для меня), требует не миллион ресурсов на сервере и умеет в поиск по фоткам (очень криво-косо пока что, но и ладно). А, и запускается в Портейнере/Докере/Докер Компоузом/через чёрта лысого, что так же понижает порог входа. В общем, то, что нужно.
А, и ещё нужно, чтобы всё это бэкапилось куда-то наружу. Если вдруг пожар унесёт наш домашний сервер на серверные небеса, наши фотки будут в безопасности. Или там, если просто диск крякнет.
План
С основным инструментом определились, как работает и выглядит всё остальное?
Примерно так:
- На сервере крутится докер
- В докере запускается Immich
- Крон-таска на сервере раз в N часов (дней, недель?) бэкапит БД Immich и сами фотки в облако
- ???
- Вы прекрасны!
- А, и ещё неплохо бы дополнительно бэкапить всё на внешний жёсткий диск. Вдруг серверный диск крякнет.
Воплощение
На практике оказалось, что Immich сам по себе позиционируется как бэкап-тулза, да ещё и в стадии активной разработки (разработчики просят не использовать софтину как единственное средство хранения фоток, но кто их слушает, верно?). Это значит, что, на текущий момент, в Иммихе нет штатного инструмента, который позволял бы по расписанию делать бэкапы базы и файлов куда-нибудь в условный S3. Поэтому бэкапчики придётся костылить самостоятельно.
Что, собственно, не проблема. Друг-системщик подсказал мне утилиту для управления файликами rclone, а я сам нашёл хранилище Backblaze B2 с S3-совместимым апи и более низкими ценами на хранение файлов.
Из чего теперь состоит наш человек-швейцарский нож?
Внутрянка:
- Связка Docker + Portainer, потому что никто не любит постоянно пердолиться с терминалом
- Immich для непосредственного хранения и просмотра файлов
- https://github.com/garzj/google-photos-migrate для приведения фоток в божеский вид после Google Photos (метаданные, теги и так далее)
- Rclone для синхронизации локальной файлопомойки с бакетом в B2 и внешний HDD/SSD
- Ansible для того, чтобы хранить весь колхоз в виде перезапускаемых ямлов
- И всё это крутится на домашнем сервере под управлением Ubuntu, который построил Джек
Внешка:
- Backblaze B2
- Внешний HDD/SSD для периодического локального бэкапа данных
Вроде всё? Ну да.
В общем, вчера я выкачал все фотки с Яндекс Диска, сгрузил четыре пятидесятигигабайтных архива из Google Photos, поэкспериментировал с Rclone, убедившись, что он делает всё, что мне необходимо, и процесс пошёл. Для ясности, все описанные ниже шаги зафиксированы в Ансибле, потому что если сделать всё руками и что-то сломается, я скорее забью и навсегда разочаруюсь в идее, чем найду время и силы чинить.
На локальный сервер установил свежий пустой Immich, создал пользователя, апи-ключ для импорта фоток толпой.
После скачивания файлов с Яндекс Диска шаманить с их метаданными не пришлось, потому что они там хранились в исходном виде без пережатия. Загрузил их на сервер и сразу же натравил на них тулзу для импорта фоток в Immich. Иммихь, после поглощения скормленных ему фоток, принялся их переваривать, скрипя фоновыми джобами, которые отвечают за генерацию thumbnails, извлечение метаданных, тегирование объектов на фотках, фейс рекогнишен, и ещё там какие-то. Это происходит без моего участия.
Тем временем с Гугл Фотос выкачались 200гб фоток. Загрузил их на сервер, распаковал из архивов в одну директорию и натравил на них https://github.com/garzj/google-photos-migrate, потому что, как я говорил выше, Гугл пережёвывает фотки на свой лад, а метаданные складывает в одноимённые джейсоны. Эта тулза как раз засовывает их обратно. После того, как засунет, можно будет скормить импорт-тулзе, как и яндексовый архив.
Иммихь крутится, метадата мутится, а значит самое время наладить бэкапы наружу. Запустил ансибл-скрипт, который поставил на сервер Rclone и научил его с помощью крон тасков два раза в сутки брать нужные файлы и сихронизировать их в целевой бакет на B2. Rclone sync не аплоадит существующие файлы, а лишь поддерживает файловую структуру и содержимое на бакете в том виде, в каком они существуют на исходном сервере, а значит этот процесс будет долгим только в первый раз, а дальше всё будет синкаться за секунды. А, и ещё ансибл прописывает крон таск для бэкапа базы данных самого Иммиха, которая будет загружаться в тот же бакет на B2. Таким образом, в случае чего, достаточно будет ресторнуть бэкап БД на новом инстансе Иммиха и ему не придётся жевать метатеги для всех файлов в фоновых задачах по новой.
Ну вот вроде и всё! Кажется, отличный план. Надёжный, как швейцарские часы.
Что ещё предстоит
Чего не хватает? Ну, я пока ещё не купил внешний диск для локального бэкапа. Это ещё предстоит сделать. Как только этот вопрос будет закрыт, в целом, я буду (кажется) удовлетворён схемой бэкапов. Но я в этом деле не эксперт, так что тут как раз настаёт время для конструктивных комментариев: как сделать систему более надёжной без лишнего пердолинга? Я в курсе про схему бэкапов 3-2-1, но заморачиваться с записью данных на плёнку, кажется, пока не готов. Не знаю, буду ли готов вообще, это уже паранойя.
В теории вместо внешнего харда можно было бы заморочиться с настройкой RAID1 или RAID10. На практике я пока этим заниматься не хочу, плюс если физически сервер будет уничтожен (скажем, сгорит квартира), внешний диск может и пострадает, но совершенно не обязательно. Его можно вообще на антресоль засунуть, или куда там понадёжнее можно придумать.
После того, как все данные будут импортированы, метаданные расставлены и в долине больше не останется бандитов, настанет время для того, чтобы медленно и постепенно удалять ненужные дубли и просто плохие фотки. Это совершенно не обязательный шаг (выхватил его из соответствующего видоса: How To Remember Your Life), но я дам ему шанс и планирую иногда тратить на это время.
Ещё через некоторое время было бы неплохо полностью вычистить фотки из облаков, где я хранил их раньше. Потому что облака стоят денег.
А если я хочу так же?
Все свои ансибл-скрипты я складываю в репозиторий https://github.com/Freika/homelab. Там не только про Иммихь, но если вы пришли именно за ним, то вас интересует файл immich.yml
. Скопируйте inventory.txt.example
в файл inventory.txt
, замените все переменные на свои собственные, выполните команду make immich
(можно посмотреть в Makefile
) и дальше всё будет сделано за вас, simple as that.
А что по бабкам-то?
Разово:
- Сервер (старая рабочая станция с Ибея) — 62 евро
- HDD + SSD для сервера — ~100 евро
- Донат автору Иммиха — 5 евро
- Внешний HDD на 2TB — ~70 евро
Постоянно:
- Хранилка для бэкапов Backblaze — ~5 баксов в месяц
- Поддержание жизни в домашнем сервере — около 6 евро в месяц (на электричество)
Автору Immich сделал разовое пожертвование, возможно, сделаю его регулярным. Да, я знаю, что я говорил выше, что не хочу платить за селфхостед софт, разница в том, сам я хочу красить забор, или меня заставляют.
А по времени как?
Я вожусь с этим всем уже третий день. Большую часть времени всё делается без моего участия: скачиваются архивы экспорта из Google Photos, работает google-photos-migrate, импортируются фотки в сам Иммихь, загружаются бэкапы на B2. Я тем временем вот писал и редактировал этот пост. Если за всё это возьмётесь вы сами, наверное, можно будет управиться за полдня активного времени: поставить Иммихь, загрузить фотки, разобраться с приложенькой на телефон, наладить бэкапы, да и то есть ансибл-плейбук по ссылке немного выше.
Делитесь своим опытом, если колхозили что-то подобное, возможно, я вдохновлюсь и что-то изменю в своём подходе.
Итак, прошёл месяц с тех пор, как я заселфхостил свои фотки. За это время накопилось некоторое количество выводов и наблюдений.
Как быть с надежностью дома? Скачок напряжения и F всей технике, грабеж?
Мне понравилось такое решение https://photoview.github.io
А для гуманитариев есть альтернативы?
Со старыми фотками из облаков более-менее понятно, а как процессятся новые?
Тоже долго думал как это реализовать пару лет назад, но упор был не на фотки, а просто на файлы. Купил HP микросервер на 4 диска, поставил туда TrueNas, рядом поставил неттоп, там NextCloud в контейнере. На хранилке рейд, обе железки воткнуты в ИБП.
у NextCloud много фишечек, многопользовательность, можно документы локально совместно редактировать и всё такое.
В основном я туда автоматически гружу фотки с телефона вместо яндекс облака.
За место куда бекапить спасибо, цены хорошие.
Не забываем настроить логгинг о факте успешного бекапа (например в newrelic) и оповещение если не было успешного бекапа в течении недели ;)
А по деньгам получается даже проигрываете по сравнению с облаком, да?
Я когда-то баловался файлохранилищем дома. Тоже хотелось бекапа в облаке на случай ограбления/пожара.
В итоге, пошел по пути наименьшего сопротивления:
Если OneDrive решит меня заблочить, то есть копия на ноуте. Если ноут навернется, то есть копия в облаке.
Пришёл к тому же решению, но из-за объёмного бэклога "что я хочу сделать в свободное время" остановился на Synology. У них есть весь нужный софт – и серверное приложение и мобильные для синхронизации с телефонов.
Осталось сделать бэкап в облако.
Потихонечку докидываю туда другую функциональность. Например, управление умными девайсами через HomeAssistant.
Знакомая Вена на фотках
Будучи номадом в отсутствует возможность купить сервер и поставить его где-нибудь дома (потому что дома нет фюить ха).
Я уже описывал свой сетап вот тут, но с тех пор он претерпел изменения.
Сейчас сетап такой:
Отказался от Backblaze потому что с какого-то момента заливка данных туда становится дорогой: чтобы загрузить файлы, которых в бакете нет, нужно сначала получить список этих самых файлов, что стоит денег :)
Флоу получился следующий: после очередной фотосессии фотографиям проставляется геотег, затем они заливаются на сервак. На серваке скрипт раз в час синхронизирует файлы до стораж бокса. Параллельно, пока файлики есть локально на компьютере происходит их отбор и минимальная обработка. Отобранные фотографии тоже выгружаются на сервер и заливаются в Apple Photos чтобы показывать друзьям на встречах)
По деньгам выходит 37 EUR сервер + 21 EUR/10TB Storage box в месяц. Номадство дело дорогое) Особенно больно видеть как каждая фотография в лушчем качестве с сжатым raw весит под 70МБ.
Сейчас активно смотрю на замены Photoprism, вдруг есть что-то более удобное.
😱 Комментарий удален его автором...
Когда читаю очередную статью на эту тему - всегда отмечаю что даже продвинутые айтишники забывают (или не знают?) о silent data corruption https://en.wikipedia.org/wiki/Data_corruption
Для себя эту проблему решил использованием SnapRaid https://www.snapraid.it/
О, а я недавно собрал самосборный NAS на оупен-сорсной версии synology.
Все работает быстро, интерфейс приятный, если приложения для андроид и айфона.
В локальной сети просмотр фото с NAS работает также быстро, как на самой машине.
Есть некоторые неудобства с расписанием включение-отключения, а так все прямо оооочень приятно.
итак чтобы не платить 100 евро в год можно платить 11 евро в месяц (132 евро в год).
понял принял.
ловко вы перехитрили всех!
p.s. не ну я понимаю контроль надежность итд но надеюсь вы тоже понимаете иронию!
Я пошёл ещё более колхозным путем. Оставил автозагрузку в Google photos, настроил синхронизацию папки с фотками с телефона на комп и на самосборный Nas через https://syncthing.net/
шикарно, спасибо!
Всё верно, они ломают совместимость только в путь. Где-то полгода назад у меня начали отваливаться сервисы, полез смотреть - а там половину докер композа надо переписывать.
Но я действительно пользуюсь им в основном как бекапом, а не как замене гуглфото.
Надёжно? получилось что-то похожее из мема ниже :)
Через полгода красноглазые авторы очередной утилиты всё сломают и надо будет начинать по новой
Комменты не читай - сразу пиши
Я тоже вот уже лет 8 присматриваюсь к мысли вытащить все с Гугла обратно, у меня там как раз "чистовой" архив по альбомам. Хорошая мотивация заняться и заодно поковыряться с софтом и железками.
Спасибо за пост, короче
А вот непонятно, как происходит импорт из Google Photo, руками скачаные архивы takeout или как то ещё?
А никто не придумал как бекапить айклауд нормально? То есть пусть фотки в айфоне фоткаются и синкаются в айклауд (косты ок 2тб), а вот бекап как. делать норм? Идеально с сайнолоджи.
Решение с покупкой мак мини и зеркалить туда всю библиотеку и уже папку синкать куда надо я знаю. Не хочется макмини покупать :(
😱 Комментарий удален его автором...
Очень актуально, сам занимаюсь ровно тем же, выбором между пачкой свободных альтернатив гугл-фото, а тут этот пост.
Как понимаю, щупался только photoprism и immich?
а кто как тегирует фотки? что бы вот найти фотку машины которую ты снимал на зеркалку.
У меня просто стоит старенький Synology (10+ лет), на котором стоит родной плагин для бекапа гугл-фоток.
По итогу:
Залетел в клуб после твоего поста. По PhotoPrism сделаю небольшое уточнение, которое не очевидно при поверхностном изучении сайта. Помимо платных тарифов Essentials и Plus у них есть грейды повыше: Silver, Gold, Platinum. Эти грейды через определенное время дают lifetime доступ к лицензии Plus. Тот же Gold за 26 евро в месяц через год даст Lifetime Plus.
Конечно, не всем по душе будет и такое, но как опция по-моему вполне.
Мне PhotoPrism симпатичней по следующим причинам:
Думаю позже напишу свой опыт.
Спасибо за статью. Рассматривал Фотопризм+B2 для своего сетапа, но после этой статьи попробую Имич :).
Подлинкую полезное. Табличка сравнения софта для организации фоток: https://github.com/meichthys/foss_photo_libraries
https://meichthys.github.io/foss_photo_libraries/ сравнение selfhosted решений для хранения фоток в виде таблицы
Ох, бро! Спасибо за пост. Я только что сам прошел на 90% тот же путь, что и ты, и подписываюсь под каждым твоим выбором. Если бы не было твоего поста, то постарался бы написать почти то же.
Ансибл я еще никогда не настраивал — вот за это спасибо!
Очень круто, ты мне сэкономил время с шаманством над JSON-файлами от Google — я уже хотел сам писать скрипт для их импорта!
Стек у тебя топ (b2 + rclone + immich). А вот что хотел бы добавить в твой пост — так это restic! Он может делать инкрементальные бэкапы, имеет очень простой и удобный интерфейс и позволяет легко восстановить что угодно!
Вот так выглядят наиболее популярные фото-менеджеры.
когда я экспортирую из Google, там еще проблема, что он в экспортном архиве дает кучу дубликатов — на каждый созданный альбом — отдельную копию. Ты с этим что-то делал и сортировал? Или просто удалял эти дубли?
И как раз еще то, чем я хочу разобраться — какую систему для удаления дубликатов использовать. Те что на слуху: fdupes, rdfind, или dupeGuru. Но пока еще не пробовал их использовать. Интересно, если уже есть какой-то опыт с этим.
Че-то не очень понял в чем проблема просто купить NAS с несколькими дисками и складывать на него фотки? А диски сделать RAID-массивом, чтобы если одни сломался, то остальные остались на месте.
Тоже сделал аналогично.
Из нюансов:
Из глобальных вопросов, на которые у меня нет ответов, - как делать бэкапы и что есть мастер-система. То есть если я удалю фотку с фотика на HDD то rclone должен её удалить в облаке? А что делать если вдруг СЛУЧАЙНО удалятся фотки на HDD и rclone удалит их в облаке?
Спасибо за статью. Только одно замечание - RAID не заменяет бэкапов ну никак, RAID нужен для обеспечения непрерывности доступа к инфе (ну и еще по мелочи).
Отзыв на Immich. Нюансы, про которые не пишут в списке features.
Решил, наконец-то, сделать self-hosted хранилище фоток, сделать бэкапы с телефона, с флешек, с папок
sdcard_backup_2019
и так далее.Изучил альтернативы https://meichthys.github.io/foss_photo_libraries/. Выбирал между тремя, как мне показалось, наиболее продвинутыми вариантами:
Потыкал три демо, но остановился на Immich, потому что
Условия использования:
По прошествию нескольких дней могу сделать следующие выводы.
Мобильные приложения
Синхронизация
Распознавание и поиск
Карта
Работа с метаданными
Редактирование
Совместная работа
Хранение
Year/Year-Month-Day/Filename.Extension
. По-умолчанию, он выключен по соображениям надежности.bcc7c7e8-901e-4d09-8ea6-f7ad8fef9c64/f8/f5/f8f5a7b3-9abf-498e-bce5-51bcdccf5fe8.jpg
, в каждой директории одна фотография.Выводы
Рассмотрев все преимущества и недостатки, для себя я могу сделать следующие выводы:
Immich - один из самых навороченных софтов для селф-хоста фотографий. Он обладает самой лучшей мобильных приложений и удобной, но односторонней синхронизацией с мобильников. За исключением отсутствия редактора, он очень напоминает Google Photo, но сам Google Photo для меня не очень удобен. Самые большие недостатки - плохая работа распознавания лиц на редких лицах и хреновая работа с несколькими пользователями.
Лирическое отступление про софт и хранение
Вот, смотрите, очередная классная опенсурс штука. Селфхостинг! Ты же не доверяешь свои данные облакам от крупных компаний, ведь за них нужно платить, так еще и возможны утечки, на них будут обучать свои нейросетки, компания может закрыть продукт, ты можешь потерять доступ к учетной записи или компания решить, что по соображениям репутации лучше не работать с клиентами из твоей страны. А локальный жесткий диск и опен-сурс софт - это так надежно! Он никуда не исче...
Лол, нет.
Мы живём в век эфемерного софта. Который разрабатывают в парадигме Cascade of Attention-Deficit Teenagers. Писать очередной крутой проект - клёво, поддерживать зрелый легаси - нет. Лучше начать новый, лучше переписать всё снова по десятому разу. Разработка затихает, разработчики забивают, мейнтейнер устает тянуть лямку и спивается. Тысячи заброшенных open source проектов, которые никто не подобрал, не форкнул, которые просто умерли.
Мы живем в век эфемерного софта. В котором нужно бежать со всех ног, чтобы оставаться на месте. Софт без поддержки, лежащий в репозитории на гитхабе или в папочку "programs" на вашем диске протухает. Через несколько лет окажется, что его уже нельзя запустить, потому что не та версия ядра/libc/зависимостей/докера/whatever. И его уже нельзя пересобрать, потому что он не собирается новой версией GCC с новыми версиями libc. А если есть 3rd party библиотеки (а они есть), то они тоже уже несовместимы, а старые не собираются. В общем, попробуйте, это увлекательно. И это я говорю про сравнительно стабильный стек - Linux + GCC + C. Думаю, всякие TypeScript + Dart + Svetle + Kotlin + Swift (стек Immich) устаревает и протухает намного быстрее.
Где будет Immich (4 года), Photoprism (6 лет) через 5 лет? Через 10? А если мы говорим о lifetime-span хранении фотоархива, чтобы на старости лет посмотреть свои бухие студенческие фотки, то на таком периоде я не уверен ни в Google, ни даже в Linux, ext4 и прочем.
Какой можно сделать из этого нытья? Думаю, для хранения важных данных нужно выбирать такое средство хранение, которое не исчезнет само по себе (облака) и которое позволяет спокойно мигрировать в любое другое место. Да, локальные файлы уже легче скопировать. Но если они хранятся так же ущербно, как в immich, то это уже не так удобно. Да, скопировать фотки из сотен вложенных папок в одну может однострочник на баше. Но вся мета-информация о людях на фотографиях, об альбомах итп будет утеряна.
Вывод? Скорее всего, я буду тестировать дальше.
З.Ы. Есть режим external library, но не тестировал. Не знаю, можно ли подружить с аплоадом с телефона.
Год с Иммихом: всё работает.
Гугл Ван пока ещё оплачен, но весь прошедший год я юзал Immich как основное средство хранения и просмотра фоток, и как бы всё хорошо. Осталось перестать платить гугл облаку.
Из крутого: появилась функция обнаружения дублей фоток. У меня сейчас насчитывается 12к дублей в библиотеке, можно выпилить все разом, можно просматривать по одной. Удобно!
В общем, если вы всё хотели утащить свои фотки из облаков домой и ждали знака — это он :)