Перейти к содержимому
Главная страница

LibrePhotos: организация фототеки и умный поиск

LibrePhotos

LibrePhotos превращает папки с фотографиями и видео в личную медиатеку с временной шкалой, поиском, распознаванием лиц, картой мест, событиями, альбомами и общим доступом. Программа полезна владельцам домашнего сервера или NAS, семейным архивам и фотографам, которым нужно просматривать большую коллекцию через браузер, не отдавая исходники стороннему облаку: файлы остаются в выбранных каталогах, а LibrePhotos строит собственную базу, миниатюры и поисковые индексы вокруг них.

Варианты загрузок
  • RAW-коррекция и цвет вручную
  • Ретушь портрета и пластика лица
  • Замена фона и удаление объектов
LibrePhotos
  • Нужны сервер и первичная индексация
  • Нет полноценного редактора изображений
  • Геокодирование офлайн недоступно

Содержание:

Как LibrePhotos организует фототеку

LibrePhotos не требует складывать снимки в специально придуманную структуру каталогов. Основной сценарий — указать уже существующую папку как Scan Directory и выполнить индексирование. Во время сканирования сервер читает метаданные, создаёт миниатюры, связывает варианты одного кадра, извлекает лица, формирует признаки для поиска по содержимому и при наличии GPS определяет названия мест. Оригиналы при этом остаются там, где их хранит пользователь. Это важно для NAS и архивов, где структура каталогов уже является частью резервного копирования или рабочего процесса.

Веб-интерфейс отделён от физического хранения. На экране можно видеть один объект фотографии, хотя на диске ему соответствуют, например, RAW, JPEG и XMP. И наоборот, два визуально похожих кадра не сливаются автоматически только потому, что они сняты рядом по времени. Для разных задач используются разные механизмы: file variants объединяют форматы одного захвата, а stacks группируют отдельные, но связанные кадры.

В центральной части приложения пользователь работает с представлениями библиотеки. Домашняя страница Photos показывает временную шкалу, а рядом доступны избранное, скрытые снимки, недавно добавленные файлы, отдельные выборки фотографий и видео, кадры без времени съёмки и просмотр по папкам. Разделы Albums, Memories, Sharing, Organizing и Trash решают уже более конкретные задачи: ручная систематизация, воспоминания по датам, публикация, очистка и удаление.

Временная шкала LibrePhotos с фотографиями, сгруппированными по датам и местам

На временной шкале фотографии сгруппированы по дате; справа предусмотрен скраббер для быстрого перехода по длинной коллекции. Если у группы есть определённое место, оно выводится рядом с датой. Такое представление хорошо работает как ежедневная точка входа: сначала виден хронологический архив, а для уточнения можно перейти к людям, местам, тегам или полнотекстовому поиску.

LibrePhotos принципиально отличается от фоторедактора. В нём можно поправить дату, место, рейтинг, подпись, повернуть кадр, добавить теги и выполнить ряд организационных действий, но нет полноценной проявки RAW, локальной цветокоррекции, слоёв, масок и ретуши пикселей. Это система каталогизации и доступа к медиатеке. Если после отбора кадр нужно художественно обработать, исходный файл открывают во внешнем редакторе.

Установка и начало работы

Самый предсказуемый способ развернуть LibrePhotos — контейнерный. Официальная документация описывает несколько вариантов, включая единый контейнер, Docker Compose, Kubernetes и Unraid. Для домашнего сервера Docker Compose удобен тем, что явно разделяет приложение, базу данных, данные и каталог с оригиналами. Перед запуском стоит заранее решить, где будут лежать четыре разные сущности: исходные фотографии, база PostgreSQL, созданные LibrePhotos миниатюры и модели машинного обучения, а также резервные копии.

Для обычной установки на x86-64 или ARM64 разработчики рекомендуют ориентироваться как минимум на 4 ГБ оперативной памяти и иметь запас места для служебных данных. В документации отдельно упоминается не менее 10 ГБ для образов, базы, миниатюр и моделей; реальный расход зависит от размера коллекции, числа лиц, включённых моделей и количества производных файлов. Это не означает, что 10 ГБ достаточно для самих оригиналов: фотоархив хранится отдельно и может занимать сколько угодно.

Подготовка каталога и переменных

При установке через Compose сначала создают рабочую папку развертывания, копируют пример файла переменных в .env, затем задают пути. Критически важен scanDirectory: именно этот каталог монтируется внутрь контейнера как корень доступной пользователю медиатеки. Второй важный путь — постоянное хранилище служебных данных. Если оставить базу или каталог приложения внутри временной файловой системы контейнера, пересоздание контейнера может привести к потере служебного состояния.

Для сервера с уже аккуратно разложенным архивом разумно сначала смонтировать исходники только для чтения. LibrePhotos сможет индексировать их и строить свою базу, но случайное физическое удаление оригинала из интерфейса окажется невозможным. Позже доступ на запись можно разрешить осознанно, если нужны загрузка через браузер, запись метаданных в оригинал или реальное удаление файлов. Это удобнее, чем начинать с максимальных прав и затем выяснять, какое действие затронуло файловую систему.

После проверки переменных контейнеры запускаются командой docker compose up -d. Дальше работу продолжают в браузере. Для локального развертывания стандартная схема Compose публикует веб-интерфейс на порту 3000, но конкретный внешний порт можно изменить в конфигурации. При доступе из домашней сети следует учитывать, что сам факт открытия порта в LAN не делает сервис безопасным для прямой публикации в интернет: для внешнего доступа нужен нормальный обратный прокси, HTTPS и продуманная аутентификация либо защищённая частная сеть.

Первый запуск и мастер настройки

При первом входе появляется мастер. На первом шаге создаётся администратор: задаются Username, адрес электронной почты, имя, фамилия, пароль и подтверждение пароля. Имя пользователя приводится к нижнему регистру. На следующем шаге задаются параметры всего сайта — прежде всего Allow Upload и Allow Registration. Если сервер доступен не только внутри доверенной сети, открытая регистрация обычно не нужна: новых пользователей безопаснее создавать администратору.

Затем выбирается каталог сканирования. Доступные внутри контейнера папки показываются деревом, поэтому сразу видно, правильно ли сделано монтирование. После Save выбранный путь сохраняется и начинается первичное сканирование. Если каталог пока не готов, этап можно пропустить и настроить позже через административную область.

Для нескольких пользователей действует важное ограничение: их Scan Directory не должны совпадать, вкладываться друг в друга или охватывать каталог другого пользователя. В LibrePhotos каждый объект принадлежит одному владельцу. Если одной и той же коллекцией должны пользоваться несколько членов семьи, правильнее индексировать её у одного владельца, а доступ давать через функции совместного использования, а не назначать одинаковый каталог всем аккаунтам.

Выбор каталога data как Scan Directory в настройках пользователя LibrePhotos

После первичного сканирования не стоит сразу оценивать качество распознавания по первым появившимся миниатюрам. Работа разбита на фоновые задания. Сначала могут появиться превью и базовые EXIF, затем — лица, теги, геокодирование, эмбеддинги для семантического поиска и другие производные данные. Чем больше архив и слабее сервер, тем заметнее эта последовательность. Состояние заданий и сервисов контролируется через Library и административные панели.

Временная шкала и просмотр фотографии

Основной экран Photos рассчитан на длинную историю съёмки. Группы идут от новых дат к старым, а полоса быстрого перемещения справа позволяет перескочить через месяцы и годы без прокрутки тысяч миниатюр. Для больших архивов это практичнее каталога, где единственный способ навигации — дерево папок: файловая структура остаётся доступна в представлении Folders, но повседневный просмотр не зависит от неё.

Дополнительные выборки решают типовые задачи. Favorites показывает кадры, чей рейтинг достиг заданного пользователем порога избранного. Hidden убирает снимки из основной ленты, не удаляя их. Recently Added предназначен не для даты съёмки, а для последней партии импорта. Without Timestamp помогает найти файлы без времени в метаданных и исправить их. Отдельные фильтры оставляют только фотографии или только видео.

Lightbox и панель сведений

Щелчок по миниатюре открывает полноэкранный просмотрщик. Между соседними файлами переходят стрелками клавиатуры или жестом, а нижняя лента миниатюр даёт быстрый переход в пределах текущей выдачи. Escape закрывает просмотр. В верхней панели находятся слайд-шоу, масштаб для статических изображений, полноэкранный режим и действия с текущим объектом.

Слайд-шоу умеет менять интервал между кадрами: доступны 3, 5, 10, 15 и 30 секунд. Избранное переключается кнопкой со звездой или клавишей f. Там же находятся скрытие, общий доступ, перемещение в корзину, поворот и вызов информационной панели. Копирование изображения в буфер обмена относится только к статическим кадрам и требует защищённого контекста HTTPS; копируется отображаемая версия, а не обязательно исходный многомегапиксельный файл.

Информационная панель полезна именно как рабочее место каталогизатора. Она показывает имя файла, размеры изображения, размер файла и, если доступны EXIF, камеру, объектив, диафрагму, выдержку, фокусное расстояние и ISO. Show more раскрывает дополнительные поля, включая путь, эквивалентное фокусное расстояние и сведения о дубликатах. Ниже собраны дата и время, место, люди, альбомы, теги, подпись и похожие фотографии.

Дата редактируется прямо из панели. LibrePhotos при этом старается не переписывать исходный камерный DateTimeOriginal: исправленная дата предназначена для прикладного метаданного поля и может синхронизироваться через XMP в зависимости от выбранного режима. Такой подход удобен при реставрации старых сканов, где исходной даты нет, и одновременно снижает риск уничтожить оригинальные EXIF камеры.

Поворот без разрушения оригинала

Кнопки поворота разворачивают статическую фотографию на 90 градусов по или против часовой стрелки. По умолчанию изменение хранится как переопределение ориентации в базе и отражается в миниатюрах. Сам файл не переписывается, пока пользователь не включит синхронизацию метаданных. Если выбран режим записи в оригинал или XMP-sidecar, ориентация может быть сохранена соответствующим способом. Для видео поворот через lightbox не предусмотрен.

Разделение между отображением и физическим файлом нужно помнить при резервном копировании. Если перенести только папку с JPEG и RAW, но потерять базу, часть организационных изменений — подписи, связи, ручные решения по лицам, альбомы — придётся восстанавливать. Если же включена запись подходящих метаданных в XMP, часть информации переживает переиндексацию. Поэтому стратегия резервного копирования должна охватывать и оригиналы, и базу.

Сканирование, загрузка и пополнение коллекции

LibrePhotos различает добавление файлов в каталог и загрузку через веб-интерфейс. При классическом сценарии пользователь копирует новые фотографии в папку на NAS, затем запускает Scan на странице Library. Обычное сканирование ищет новые и изменившиеся файлы; Rescan предназначен для повторной обработки уже проиндексированной коллекции. Полный перескан заметно тяжелее и нужен после изменения некоторых настроек, исправления метаданных или обновления производных данных, а не после каждого копирования пары кадров.

Во время сканирования создаются крупные и малые миниатюры, извлекаются EXIF и XMP, определяются типы файлов, обрабатываются GPS, лица, теги и поисковые признаки. Отдельные модели могут подключаться как фоновые сервисы. Генерация автоматических подписей не является обязательной частью полного прохода по каждому изображению: подпись можно создавать по запросу для выбранного кадра. Это отличает её от базовой индексации, без которой поиск и просмотр не работают.

Загрузка через браузер

В правом верхнем углу интерфейса есть кнопка загрузки. Она открывает системный выбор файлов и поддерживает множественное выделение. Сервер принимает медиа с MIME-типом изображения или видео. Перед передачей клиент и сервер проверяют, есть ли такой объект у пользователя: в механизме используется хеш в сочетании с идентификатором владельца. Если файла нет, данные передаются частями по 1 МБ, после завершения регистрируется фотография и запускается цепочка фоновой обработки.

У веб-загрузки есть два обязательных условия. Во-первых, администратор должен включить Allow uploads. Во-вторых, у аккаунта должен быть задан существующий Scan Directory. Если каталог не назначен, кнопка становится недоступной и показывает подсказку. Если путь записан в базе, но внутри контейнера его физически нет, загрузка доходит до завершающего запроса и завершается ошибкой.

При корректной настройке принятые файлы сохраняются внутри каталога пользователя в подпапку uploads/web. Поэтому монтирование /data должно вести на постоянное хранилище хоста. Типичная ошибка — позволить контейнеру записывать в собственную временную файловую систему. Пока контейнер жив, фотографии видны, а после пересоздания исчезают. Исправление не связано с LibrePhotos как таковым: нужно правильно настроить bind mount или volume и убедиться, что каталог существует на хосте.

Переменная окружения allowUpload в Compose задаёт начальное значение. После того как переключатель был сохранён через мастер или административную область, авторитетным становится значение в базе. Поэтому изменение одной переменной в .env может не вернуть кнопку загрузки. В таком случае проверяют именно Admin Area → Site Settings → Allow uploads.

Admin Area LibrePhotos с переключателем Allow uploads в настройках сайта

Автосканирование и внешние источники

Если новые файлы регулярно появляются в смонтированных папках, можно использовать механизм автоматического сканирования, но его не следует путать с моментальной синхронизацией каждого изменения файловой системы. Для контролируемого импорта надёжный путь — копирование файлов и явный Scan. Это особенно удобно после больших выгрузок с камеры или переноса архива, когда пользователь сам понимает момент завершения копирования.

Есть интеграция с Nextcloud. Администратор включает соответствующую возможность, пользователь задаёт адрес сервера, имя и пароль приложения, выбирает удалённую папку, после чего LibrePhotos переносит доступные файлы в своё пространство и индексирует поддерживаемые изображения, видео, RAW и XMP. Такой режим полезен, когда Nextcloud уже является входной точкой для мобильных загрузок, но создаёт дополнительную копию данных, что надо учитывать в ёмкости хранилища.

Форматы, RAW, Live Photos и варианты файлов

LibrePhotos предназначен не только для JPEG. В цепочке обработки используются LibRaw через rawpy для RAW, libvips для преобразований, FFmpeg для видео и ExifTool для метаданных. Конкретная поддержка камер зависит от используемых библиотек и версии контейнера, поэтому при редком новом RAW-формате правильнее проверить один реальный файл, чем ориентироваться на абстрактный список расширений.

Для пары RAW+JPEG приложение может представить два физических файла как один объект. При включённой настройке Stack RAW+JPEG pairs сканирование связывает файлы в одном каталоге с одинаковой базовой частью имени. На экране главным обычно становится JPEG, а RAW остаётся доступным как дополнительный формат. В панели сведений появляется индикатор +N formats; раскрытие показывает связанные варианты.

Механизм вариантов используется и для Live Photo: неподвижный кадр и короткий ролик рассматриваются как компоненты одной фотографии. XMP-sidecar привязывается как метаданный вариант. Если старый архив был проиндексирован до корректного связывания форматов, в библиотеке предусмотрено обслуживание, которое может восстановить часть RAW+JPEG связей. Однако это не универсальная машина для угадывания любых исторических Live Photo: старые пары, уже разошедшиеся в базе, могут потребовать повторного импорта или ручной проверки.

Важно различать вариант файла и стек. File variant — иной физический формат того же кадра. Stack — группа самостоятельных фотографий, из которых одна выбрана обложкой. В стеки удобно складывать серию, HDR-брекетинг или несколько обработок, если их нужно показывать компактно. Для ручного стека выделяют подходящие кадры и выбирают действие создания стека; обложку можно заменить позже. Разгруппировка не удаляет файлы.

При скачивании фотографии LibrePhotos может включить все её варианты. Отдельная опция позволяет добавить к архиву и остальные фотографии из стека. Это полезно для RAW+JPEG: пользователь видит один объект в ленте, но при экспорте не теряет цифровой негатив. Перед массовой выгрузкой стоит проверить эти флажки, иначе архив может оказаться заметно больше ожидаемого.

Поиск: Spotlight, метаданные и содержимое кадра

Для небольшой библиотеки достаточно даты и альбомов, но сильная сторона LibrePhotos проявляется, когда файлов десятки тысяч и пользователь не помнит ни имя каталога, ни точный год. Поиск построен слоями. Быстрая палитра Spotlight одновременно ищет сущности, открывает разделы и запускает действия, обычный текстовый поиск сопоставляет слова с индексированными полями, а семантический режим добавляет результаты по визуальному смыслу изображения.

Spotlight как командная палитра

Spotlight открывается сочетанием Ctrl+K в Windows и Linux, Cmd+K в macOS, а также Ctrl+P, Cmd+P или клавишей /. После ввода нескольких символов можно перейти к человеку, месту, распознанной категории Things, пользовательскому альбому или общей текстовой выдаче. Та же палитра открывает Photos, Albums, People, Places, Folders, Sharing, Faces Dashboard, Statistics, настройки и административные разделы.

Вторая роль Spotlight — запуск служебных команд. Через него можно начать Scan photos или Rescan photos, обучение и пересканирование лиц, генерацию событий, очистку записей о пропавших файлах и переключение темы. Для администратора или активного пользователя это быстрее, чем постоянно возвращаться к меню профиля.

Текстовый поиск

Текстовый индекс объединяет разные источники. В запросе участвуют ручные и автоматические подписи, имена распознанных людей, названия мест после обратного геокодирования, XMP Subject, IPTC Keywords, теги из sidecar, пути файлов, камера, объектив, тип файла и фрагменты даты в форме ISO. Поэтому запрос вроде Anna 2024 Canon может одновременно опираться на имя человека, год и модель камеры.

Логика слов строгая: каждое слово запроса должно встретиться хотя бы в одном индексируемом поле. Слова не обязаны находиться рядом и могут быть распределены между разными полями. Для точной фразы используют кавычки. Дата ищется текстовым фрагментом 2024, 2024-01 или 2024-01-15; название месяца словами само по себе не является эквивалентом такого фильтра. В заголовке результатов есть переключатель All / Photos / Videos.

Практический сценарий для миграции из Lightroom или digiKam: сохранить ключевые слова в XMP, положить sidecar рядом с оригиналами и выполнить сканирование. LibrePhotos считывает Subject и Keywords, превращая уже накопленные ключевые слова в часть поиска. Это существенно полезнее ручного повторного тегирования всей коллекции.

Семантический поиск CLIP

Семантический поиск предназначен для запроса по смыслу: «закат на пляже», «красная машина зимой», «собака у озера». Во время индексации для фотографий вычисляются CLIP-эмбеддинги — числовые признаки визуального содержимого. Текст запроса кодируется тем же пространством, после чего находятся ближайшие изображения. Результат может совпасть с запросом, даже если нужных слов нет ни в EXIF, ни в имени файла, ни в подписи.

По умолчанию семантический режим выключен. В Settings параметр Semantic Search можно перевести в Top 10, Top 50 или Top 100. Число задаёт верхний предел добавляемых семантических совпадений, а не гарантированное количество. После включения LibrePhotos ставит в очередь вычисление отсутствующих эмбеддингов и построение индекса. На большой библиотеке до завершения этой работы «умные» совпадения не появятся.

Текстовые и семантические результаты объединяются, поэтому итоговое число карточек может оказаться больше выбранного Top N. Кроме того, семантическая выдача не обязана показываться строго по числовой близости: рейтинг CLIP участвует в отборе набора, но не превращает интерфейс в таблицу с оценками сходства. Первое обращение после простоя может задержаться на загрузке модели в память, последующие запросы обычно обслуживаются быстрее.

Тот же набор признаков используется в блоке Similar Photos боковой панели. Он помогает найти похожий ракурс, соседние кадры события и потенциальные повторы. Это не замена специализированному поиску дубликатов: визуальная похожесть может связать две разные фотографии одного пейзажа, тогда как инструмент дубликатов имеет отдельную модель решения и подтверждения.

Распознавание лиц и работа с людьми

LibrePhotos находит лица локально и строит для них векторные представления. В актуальном наборе инструментов детектор основан на InsightFace SCRFD, а для распознавания применяются ArcFace-эмбеддинги. Администратор выбирает модель распознавания лиц в Site Settings. По умолчанию используется компактная buffalo_sc; доступны более крупные buffalo-варианты и antelopev2. Чем крупнее модель, тем выше требования к вычислениям и памяти, поэтому менять её только ради эксперимента на уже готовом архиве не стоит.

Раздел лиц LibrePhotos с карточками распознанных людей

Переключение модели имеет важное последствие: уже существующие лица сохраняют старые эмбеддинги. Команда Train faces сама по себе не перекодирует каждое старое лицо новой моделью — она достраивает отсутствующие признаки и повторно кластеризует доступные данные. Поэтому модель разумно выбрать до первой большой обработки. Если библиотека уже размечена, изменение требует заранее продуманной миграции и резервной копии.

Как подписывать лица

На панели лиц зелёная кнопка с плюсом открывает Label faces. Можно найти уже существующего человека либо в секции New person ввести имя и нажать Add Person. После нескольких правильных примеров запускают обучение: LibrePhotos использует подписанные изображения как основу для предложений по остальным лицам.

Рабочий процесс удобнее строить итерациями. Сначала вручную подписать несколько хорошо различимых лиц человека, затем выполнить Train, открыть предложенные совпадения и подтверждать только очевидные. Ошибочные предложения отправляются в Unknown — Other или отклоняются. В настройках можно менять порог отображения inferred-лиц, а также параметры кластеризации: минимальный размер кластера, Minimum Samples, Cluster Selection Epsilon и порог сопоставления группы Unknown — Other.

Слишком агрессивное объединение опаснее большого количества неизвестных лиц: ошибочно слитые люди загрязняют альбом человека и поиск. Поэтому при сложной библиотеке с детьми разных возрастов, близнецами или множеством мелких лиц на групповых снимках сначала лучше оставить консервативные параметры, подписать качественные примеры и только затем ослаблять пороги.

Лица из XMP и запись разметки

Если в файле или XMP-sidecar уже есть стандартные регионы лица XMP RegionInfo с типом Face, LibrePhotos может использовать заданные прямоугольники и имена вместо повторного детектирования. Это один из способов перенести ручную разметку из совместимого фотоменеджера и уменьшить объём повторной работы.

По умолчанию присвоение имени лицу изменяет только базу LibrePhotos. Опция Settings → Face Options → Write face tags to image files включает запись регионов и имени в XMP MWG-RS. Здесь есть важный нюанс: этот переключатель сам по себе разрешает запись. Если режим Synchronize metadata to disk установлен в Save to sidecar, данные идут в XMP-файл рядом с оригиналом. При записи в media file, а также при оставленном Off, разметка лиц может попасть непосредственно в исходный медиафайл. Поэтому перед включением функции следует выбрать sidecar, если оригиналы должны оставаться неизменными.

Удаление распознанного лица из базы — отдельная операция и может быть необратимой с точки зрения интерфейса. Для сомнительного совпадения безопаснее сначала отклонить принадлежность человеку, а не удалять сам объект лица. Это сохраняет возможность вернуться к нему после изменения настроек кластеризации.

Альбомы, события, теги и распознанные категории

В LibrePhotos слово «альбом» используется для нескольких механизмов. My Albums — ручные подборки пользователя. People строятся по лицам, Places — по геоданным, Events — по времени, Things — по автоматически определённому содержимому. Теги пользователь задаёт самостоятельно либо получает из импортированных XMP/IPTC. Понимание различий помогает не пытаться вручную поддерживать то, что приложение умеет вычислять.

Ручные альбомы

Для создания подборки включают режим выбора, отмечают фотографии, нажимают плюс и выбирают Album. В диалоге можно добавить кадры в существующий альбом или создать новый. Названия пользовательских альбомов должны быть уникальными. Содержимое альбома не перемещает оригиналы по диску — меняется только связь в базе.

У существующего альбома доступны переименование, настройки совместного доступа и удаление. Удаление самого альбома не удаляет находящиеся в нём фотографии. Для пользовательских альбомов и альбомов людей можно назначать обложку из конкретного кадра. Это удобно, если автоматически выбранная миниатюра неудачна.

Раздел My albums LibrePhotos с пользовательскими альбомами

События

Events группируют фотографии хронологически. Алгоритм не пытается доказать, что два человека действительно были на одном мероприятии: следующий кадр добавляется в текущее событие, если промежуток с предыдущим меньше 1 дня 12 часов. Цепочка может продолжаться несколько дней, если между соседними фотографиями нет большого разрыва. Одиночный кадр сам по себе событие не образует.

Место и распознанные люди не определяют границы события, но могут использоваться для названия и представления. Поэтому «поездка» может получить понятный заголовок, хотя технически была собрана по времени. События не обязаны генерироваться в обычном сканировании: на странице Library предусмотрена команда Generate Event Albums. После большого импорта её можно запустить отдельно. Команда регенерации названий меняет подписи существующих событий, не перекраивая хронологические границы.

Раздел Events LibrePhotos с автоматически созданными альбомами событий

Теги и Things

Для ручных тегов выделяют один или несколько файлов и нажимают t либо + → Tags. Тег удобен для задач, которые невозможно вывести из изображения: «к печати», «клиент А», «сканировать заново», «семейный архив». Если исходники уже имеют XMP Subject или IPTC Keywords, эти слова попадают в индекс и могут использоваться после сканирования.

Things — другой слой. Модель автоматического тегирования классифицирует визуальное содержимое по подготовленному словарю. В Site Settings можно выбрать MobileCLIP-S2 или более тяжёлый SigLIP 2. По умолчанию применяется MobileCLIP-S2. Смена модели не стирает уже вычисленные теги другой модели: наборы хранятся раздельно. Поэтому результат можно сравнить без обязательного уничтожения прежней индексации.

Параметр Scan Confidence определяет, насколько уверенной должна быть автоматическая метка, чтобы попасть к фотографии. Если категориями завален почти каждый кадр, повышение порога уменьшает шум. Если важных сцен не хватает, порог можно снизить, но это увеличит число ложных тегов. Для критически важных классификаций ручные теги остаются надёжнее.

Места, карта и обратное геокодирование

Фотографии с GPS LibrePhotos превращает не только в точки на карте, но и в именованные места. При сканировании извлекаются координаты, затем выбранный провайдер обратного геокодирования возвращает страну, регион, город и более локальные уровни. Эти значения участвуют в разделе Places, поиске, информационной панели и названиях событий.

На странице Albums → Places карта показывает маркер на обнаруженное имя места, а не маркер на каждую фотографию. При отдалении близкие точки объединяются в кластеры. Число в кластере отражает количество разных мест. Панорамирование и масштабирование меняют набор альбомов, отображаемых под картой, поэтому карту можно использовать как пространственный фильтр.

Провайдеры геокодирования и тайлов

В Admin Area → Site Settings параметр Map Provider выбирает сервис, преобразующий координаты в названия. Доступны Nominatim без ключа, а также Mapbox, MapTiler, OpenCage и TomTom, для которых нужен ключ. Источник фоновой карты задаётся отдельно через Map Tiles: можно использовать PhotoPrism, OpenStreetMap либо None.

Это разделение важно для приватности. Даже если фотографии физически остаются дома, открытие карты обращается к внешнему поставщику тайлов и может раскрывать ему приблизительный участок, который пользователь сейчас смотрит. Map Tiles → None отключает фон карты. Однако обратное геокодирование тоже является сетевой функцией: полностью автономного поставщика имён мест в штатной конфигурации нет. Для полностью офлайн-сервера придётся отказаться от автоматического получения названий или строить внешнее локальное решение вне стандартного сценария LibrePhotos.

Публичный Nominatim имеет ограничения по частоте запросов, поэтому первичное геокодирование большой коллекции может идти долго. Это нормальнее, чем пытаться агрессивно распараллелить десятки тысяч запросов и получить блокировку. Если места не появились сразу, сначала проверяют GPS в EXIF и очередь фоновых заданий, а не запускают повторный полный scan несколько раз подряд.

Исправление места отдельного кадра

Если камера записала неточные координаты или у скана GPS отсутствует, местоположение можно исправить из панели сведений фотографии. После изменения важно понимать разницу между записью в базу и записью на диск. При отключённой синхронизации правка остаётся в LibrePhotos. Если настроена запись XMP, часть метаданных можно сделать переносимой. Для архивов, которые периодически переиндексируются в нескольких программах, sidecar обычно безопаснее модификации оригинала.

Автоматические подписи и контекст изображения

LibrePhotos умеет предложить естественно-языковую подпись для фотографии. В текущей конфигурации для этого используется локальная визуально-языковая модель LFM2.5-VL, запускаемая через ONNX Runtime. Генерация выполняется на сервере; фотография не должна отправляться в внешний сервис ради описания. Модель загружается в служебный каталог данных, поэтому первый вызов после установки требует наличия файлов модели и дополнительной памяти.

В lightbox открывают информационную панель, находят Caption, нажимают кнопку генерации, просматривают предложение и подтверждают его. Подпись можно отредактировать вручную до сохранения. Это полезнее безусловной массовой генерации: пользователь сам решает, какие фотографии действительно нуждаются в человекочитаемом описании.

Параметры Caption Context разрешают передать модели знания, которые LibrePhotos уже получил другими путями. Главный переключатель включает контекст, отдельные — имена распознанных людей и геокодированное место. Тогда подпись может назвать человека или город вместо нейтрального «человек на улице». Если имена лиц используются в семейном архиве, нужно учитывать, что ошибочная классификация лица способна попасть в текст; перед генерацией важных описаний лучше сначала очистить разметку People.

Администратор может отключить модель подписи, выбрав Captioning Model → None. Это снижает расход диска и памяти на сервере, где автоматические тексты не нужны. При включении модели разумно не судить о ресурсах только по размеру файла модели: во время инференса ей требуется больше оперативной памяти, чем занимает архив на диске.

Memories и статистика как способы возвращаться к архиву

Memories показывает кадры, снятые около текущей даты в прошлые годы. Механизм использует окно примерно в несколько дней вокруг годовщины; если точных совпадений нет, может расшириться до соответствующего месяца. Текущий год не считается воспоминанием. Для 29 февраля в невисокосный год используется 28 февраля. Корректность зависит от часового пояса пользователя, который задаётся в Settings → Metadata Options → Default timezone.

Из воспоминаний исключаются скрытые объекты, корзина, лишние элементы стеков, скриншоты и документы. Это предотвращает ситуацию, когда «четыре года назад» превращается в подборку квитанций и снимков экрана. Внутри года можно открыть галерею или слайд-шоу. Если фотографий очень много, представление ограничивает число фактически загружаемых карточек, сохраняя общий счётчик.

Раздел Statistics дополняет привычные альбомы визуализациями. Place Tree строит иерархию мест, Timeline показывает число фотографий по месяцам и интервалы пребывания в местах, Social Graph соединяет людей, встречающихся в одних кадрах, а Face Clusters показывает проекцию эмбеддингов лиц. Последняя диаграмма пригодна не только для любопытства: по ней видно, где один человек развалился на несколько кластеров или где разные лица оказались подозрительно близко.

Статистика доступна со страницы Library через карточку Explore charts и через Spotlight. Это не аналитический пакет с экспортом сложных отчётов, а инструменты навигации по собственному архиву. Для практической чистки наиболее полезны Face Clusters и временные графики: они быстро показывают аномалии в датах и классификации.

Общий доступ и многопользовательская библиотека

LibrePhotos разделяет обмен внутри экземпляра и публичные ссылки. Внутренний вариант рассчитан на пользователей, у которых уже есть аккаунты на том же сервере. Внешний — на родственников, клиентов или друзей, которым нужно открыть конкретный альбом без регистрации. Раздел Sharing сводит в одном месте то, чем поделились с пользователем, его собственные расшаренные объекты и публичные ссылки.

Обмен между пользователями

Пользовательский альбом можно открыть другому аккаунту через меню с тремя точками: Album Actions → Sharing. В диалоге находится нужный пользователь и включается доступ. Для отдельных фотографий порядок похож: сначала выделение, затем Photo Actions → Sharing. Получатель видит такие объекты в Sharing → Shared with you.

Такой подход решает проблему общей семейной медиатеки без перекрывающихся Scan Directory. Один аккаунт может быть владельцем оригиналов, а остальные получают только нужные подборки. При этом важно понимать, что это не модель общей сетевой папки с произвольными правами на уровне файловой системы: владение объектом остаётся у исходного пользователя, а обмен реализован на уровне базы LibrePhotos.

Публичная ссылка на альбом

В ручном альбоме открывают Sharing и включают Public sharing. Сервис создаёт уникальный slug. Посетителю не нужна учётная запись: он получает сетку фотографий и lightbox. Публичность можно выключить; старый адрес после отзыва перестаёт работать, а при повторном включении создаётся новый. Это полезно, если ссылка случайно ушла не тому адресату.

Для ссылки можно задать собственный slug длиной от 3 до 64 символов из строчных латинских букв, цифр и дефисов. Есть дата и время окончания действия, а также быстрые варианты 7, 30 и 90 дней либо бессрочный режим. Изменения slug, срока и деталей фотографии необходимо подтвердить кнопкой Save link settings; одно закрытие диалога их не применяет.

Отдельный блок Photo Details определяет, увидит ли внешний посетитель время съёмки, геолокацию, сведения камеры, подписи и распознанные лица. Все пять категорий по умолчанию выключены. Это разумная защита: семейный альбом можно показать как фотографии без точных GPS дома, имён детей и модели камеры. Глобальные значения задаются в Settings → Public Sharing Defaults, а для конкретного альбома их разрешено переопределить.

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

Поиск дубликатов и безопасная очистка

Раздел Organizing → Duplicate Photos умеет искать два типа повторов. Exact file copies сравнивает хеш файла и находит побайтово одинаковые копии. Visual duplicates использует 64-битный перцептивный pHash на базе DCT и способен связать изображения после изменения разрешения, степени JPEG-сжатия, небольших цветовых корректировок или конвертации формата.

Для визуального режима требуется заранее вычисленный pHash. Он создаётся во время сканирования из большой миниатюры. Если библиотека была проиндексирована до появления этой функции, обычный Scan может пропустить старые неизменившиеся файлы. Ситуация «точные копии находятся, визуальные — нет» часто исправляется однократным Rescan, который заполнит недостающие признаки.

Параметры обнаружения

Перед запуском Detect Duplicates раскрывают Detection Options. Можно отдельно включать точные и визуальные совпадения. Для визуальных есть чувствительность Strict, Normal и Loose. Strict формирует меньше, но более уверенные группы; Loose захватывает больше похожих кадров и соответственно требует внимательнее отличать копию от соседнего кадра серии.

Clear pending duplicates очищает незавершённые результаты предыдущего прохода перед новой проверкой. Значения чувствительности и флага очистки можно задать как пользовательские значения по умолчанию в Settings, однако перед каждой важной чисткой параметры всё равно стоит просмотреть. Поиск выполняется в фоне. Для больших библиотек реализация обрабатывает изображения пакетами и затем делает второй проход между пакетами, чтобы не держать весь набор сравнений в памяти.

Разбор группы

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

Кнопка Keep Selected & Trash Others не уничтожает остальные файлы мгновенно, а отправляет их в корзину и переводит группу в resolved. Для resolved-группы доступно Revert & Restore Photos, которое возвращает изображения. Если группа ошибочная, Not a Duplicate помечает её как не являющуюся дубликатом. Текущее поведение такого dismiss имеет ограничение: фотографии разъединяются, группа исчезает из обычного списка, и вернуть именно это решение через интерфейс нельзя.

Практичная последовательность для первого запуска — сначала обработать только exact copies, затем визуальные в Strict и лишь после этого переходить к Normal. У похожих кадров из серии лучше не нажимать массовое удаление: именно там перцептивный алгоритм выполняет свою задачу правильно, находя визуально близкое, но пользователь может хотеть сохранить несколько выражений лица или фаз движения.

Пропавшие файлы, корзина и внешние изменения

Если файл переименовали, переместили, отключили внешний диск или неправильно смонтировали сетевой каталог, LibrePhotos не спешит удалять его запись из базы. Такой объект становится Missing: миниатюра, рейтинг, подпись, лица и принадлежность альбомам сохраняются. Это защитное поведение особенно полезно для NAS, который мог временно не подключиться после перезагрузки.

Проверка отсутствующих файлов выполняется не при каждом открытии фотографии. Она запускается в подходящем полном сканировании каталога. Поэтому исчезнувший JPEG может некоторое время оставаться обычной миниатюрой, а при открытии оригинала дать ошибку. После проверки на странице Library появляется красный счётчик N Missing Photos.

Счётчик нельзя воспринимать как кнопку «починить». Щелчок по нему открывает подтверждение удаления пропавших записей. Если причина — отключённый диск или неверный mount, сначала восстанавливают хранилище и запускают сканирование. LibrePhotos использует сопоставление по хешу и способен повторно связать вернувшийся файл с прежними метаданными даже после перемещения внутри доступной области.

Удаление missing-записей окончательно очищает из базы метаданные, миниатюры, лица, рейтинги, подписи и связи с альбомами. Выполнять его имеет смысл только после проверки резервной копии и монтирования. Для внешнего USB-диска безопасный порядок такой: остановить лишние сканирования, вернуть диск на ожидаемый путь, проверить его внутри контейнера, запустить Scan и только если файлы действительно утрачены — чистить missing.

Корзина

Обычное удаление двухэтапное. Сначала выбранный объект отправляется через Move to Trash. В разделе Trash его можно восстановить синей кнопкой со стрелкой. Для окончательного удаления отмечают элементы и нажимают красную кнопку Delete permanently, затем подтверждают операцию.

Удалить физический оригинал LibrePhotos может только при наличии прав записи. Если каталог смонтирован read-only, запись в базе изменится, но файловая операция будет ограничена. Это ещё один аргумент для режима только чтение на архивном NAS: интерфейс остаётся удобным каталогом, а физическое уничтожение исходника контролируется отдельными файловыми инструментами.

Настройки пользователя и администратора

Настройки разбиты по области действия. Profile относится к учётной записи: имя, аватар, электронная почта, пароль, язык и доступность публичного профиля. Settings хранит предпочтения конкретного пользователя — параметры метаданных, поиска, лиц, слайд-шоу, альбомов, дубликатов. Admin Area управляет всем экземпляром: регистрацией, загрузкой, картами, моделями, пользователями, почтой и фоновыми сервисами.

Метаданные и sidecar

Ключевой параметр Synchronize metadata to disk задаёт стратегию сохранения изменений. При Off большинство правок живёт только в базе. Режим записи в media file меняет сам оригинал, а sidecar переносит поддерживаемые сведения в отдельный XMP. Для консервативного архива sidecar удобен тем, что оригинальный RAW или JPEG остаётся неизменным, а переносимые данные можно резервировать рядом.

Не все действия подчиняются этому переключателю одинаково. Особенно важно отдельно контролировать Write face tags to image files: включение этой опции уже разрешает физическую запись разметки лиц; выбор metadata sync определяет, пойдёт она в sidecar или в сам медиафайл. Перед массовой разметкой на коллекции с ценными оригиналами стоит проверить поведение на копии одного изображения.

Minimum image rating to interpret as favorite определяет, с какой звезды фотография считается избранной. По умолчанию это 4. Поскольку EXIF/XMP содержит рейтинг, но не универсальный флаг «favorite», такое преобразование позволяет согласовать LibrePhotos с другими менеджерами. Если во внешнем каталоге 3 звезды означают «отобрано», порог можно изменить и затем перепроверить Favorites.

Default timezone влияет на интерпретацию времени. Ошибка здесь проявляется не только в часах lightbox: кадр около полуночи может попасть в соседний день, а Memories — выбрать другой набор. При миграции старого архива сначала задают правильный часовой пояс, потом устраняют действительно неверные даты.

Карты, модели и системные параметры

В Site Settings находятся Skip patterns, полезные для NAS. Туда можно добавить служебные каталоги вроде @eaDir и #recycle, чтобы сканер не индексировал мусорные копии Synology и корзины. Там же выбираются поставщик геокодирования и источник тайлов.

Tagging Model выбирает модель автоматических тегов, Face Recognition Model — модель лиц, Captioning Model — генератор подписи либо None. Эти пункты лучше рассматривать как инфраструктурные, а не декоративные настройки. Смена модели может инициировать загрузку файлов и новые фоновые задания; у лиц старые эмбеддинги не исчезают автоматически.

Для восстановления пароля по электронной почте администратор настраивает SMTP. Поддерживается собственный SMTP-сервер и несколько готовых провайдеров. Без исходящей почты кнопка восстановления пароля не сможет отправить сообщение; администратор при этом сохраняет возможность сбросить пароль пользователя через Admin Area → Users.

Фоновые задания, производительность и ресурсы

Производительность LibrePhotos нельзя корректно описать одной цифрой «фотографий в секунду». Один JPEG без лица и GPS обрабатывается иначе, чем RAW с десятком лиц, 45-мегапиксельный кадр или видео. Скорость зависит от CPU, памяти, архитектуры, диска, числа моделей и того, включено ли нужное обслуживание. Поэтому при оценке сервера полезнее разделять этапы: чтение файлов, генерацию миниатюр, EXIF, лица, теги, CLIP и геокодирование.

Первый scan обычно самый тяжёлый. После него обычный Scan пропускает неизменившиеся данные и предназначен для пополнения. Rescan следует применять осознанно: он повторно прогоняет существующие элементы и на большой библиотеке создаёт значительную очередь. Если проблема касается только CLIP, лиц или событий, сначала ищут специализированное действие на странице Library, а не запускают полный перескан.

Внутренние сервисы отвечают за отдельные функции: миниатюры, face recognition, CLIP embeddings, image similarity, captions, EXIF и теги. Административная панель показывает состояние и логи. Если процесс «завис», полезно сначала выяснить, какой именно сервис не продвигается. Ошибка геокодирования не означает, что перестало работать извлечение EXIF, а падение модели подписи не должно мешать открывать уже созданные миниатюры.

Модели хранятся в служебном каталоге data_models и могут занимать несколько гигабайт в совокупности. Их удаление обычно не уничтожает оригиналы или базу, но приведёт к повторной загрузке перед следующим использованием. Для сервера без интернета модели нужно подготовить заранее. Полностью офлайн-режим также требует отключить сетевые карты и учитывать отсутствие встроенного офлайн-геокодера.

На ARM64 LibrePhotos запускается, но тяжёлые ML-задачи на малом одноплатном компьютере могут выполняться существенно медленнее настольного x86-процессора. Для домашней системы это не всегда проблема: первичная индексация выполняется один раз, а ежедневные партии малы. Если важна быстрая обработка десятков тысяч новых кадров, лучше закладывать производительный CPU и достаточный объём RAM, а не ориентироваться только на минимальные требования.

В настройках есть экспериментальное транскодирование видео в H.264 «по требованию». Первый просмотр такого ролика может идти одновременно с преобразованием, поэтому длительность и перемотка ещё недоступны. После завершения копия сохраняется в кэше, и следующие просмотры ведут себя как обычное видео. Кэш ограничен и удаляет давно не использовавшиеся копии. Эту функцию стоит включать только при реальной несовместимости исходных кодеков с браузерами.

Резервное копирование и обслуживание

Резервная копия LibrePhotos должна охватывать две независимые ценности: сами оригиналы и состояние каталога. Оригиналы — незаменимая часть. База PostgreSQL хранит пути, связи, подписи, альбомы, решения по лицам и другие данные. Миниатюры и модели в значительной степени воспроизводимы, но их потеря приводит к долгой регенерации. Поэтому «у меня есть RAID с фото» не равно «у меня есть резервная копия LibrePhotos».

Базу разумно сохранять средствами PostgreSQL, а не копированием живого каталога файлов базы в случайный момент. При миграции на другой сервер надёжнее сделать согласованный дамп, перенести оригиналы с сохранением ожидаемых путей, развернуть контейнеры, восстановить БД и затем проверить соответствие mount points. Если пути меняются, приложение может временно считать большую часть архива missing.

Каталоги миниатюр можно восстановить сканированием, но для огромной коллекции их резервирование сокращает время аварийного восстановления. То же относится к эмбеддингам и моделям. Решение зависит от стоимости места: при быстром интернете модели проще скачать заново, а многодневную генерацию миниатюр сотен тысяч RAW выгоднее сохранить.

Перед изменением моделей лиц, массовым удалением дубликатов, очисткой missing-записей или включением записи XMP стоит иметь свежую копию базы. Эти операции затрагивают именно накопленную организационную работу. Проверка восстановления важнее наличия файла архива: хотя бы периодически нужно поднимать тестовый экземпляр и убеждаться, что дамп читается.

Типичные ошибки и способы исправления

После входа нет фотографий

Сначала проверяют Scan Directory и то, как каталог смонтирован внутрь контейнера. Путь, видимый хосту, и путь, видимый LibrePhotos, могут отличаться. Если дерево выбора не показывает нужную директорию, проблема находится на уровне volume/bind mount. После исправления запускают Scan. Нет смысла пересоздавать пользователей или базу, пока контейнер физически не видит файлов.

Upload серый или пропал

Серый Upload чаще всего означает, что у аккаунта нет Scan Directory. Полное отсутствие кнопки указывает на выключенный Allow uploads. Если переменная в .env уже изменена, но интерфейс не реагирует, проверяют сохранённый переключатель в Admin Area: после первоначальной настройки именно база хранит фактическое значение.

Upload доходит до конца и выдаёт ошибку каталога

Так происходит, когда путь записан у пользователя, но не существует внутри контейнера или находится вне разрешённого корня данных. Нужно сверить bind mount, фактическое наличие каталога и права. Отдельно проверяют право записи: индексирование read-only архива работает, а загрузка туда — нет.

Загруженные файлы исчезли после обновления контейнера

Вероятная причина — каталог данных не был привязан к постоянной папке хоста. Следует исправить монтирование /data и только затем повторять загрузку. Восстановить уже удалённую временную файловую систему контейнера средствами LibrePhotos невозможно.

Семантический поиск возвращает только обычные совпадения

Проверяют Semantic Search: по умолчанию он Disabled. После включения нужно дождаться задачи CLIP embeddings и построения индекса. Если библиотека старая и признаки не вычислялись, очередь может быть длинной. Результаты начнут появляться после завершения, а не в момент изменения выпадающего списка.

Визуальные дубликаты не находятся

У старых объектов может отсутствовать pHash. Один Rescan достроит его; после этого снова запускают Detect Duplicates. Exact copies при этом могут работать и до перескана, потому что используют файловый хеш.

Лица постоянно смешиваются

Не нужно сразу снижать все пороги. Сначала добавляют качественные ручные подписи, отклоняют очевидные ошибки и повторяют Train. Если проблема системная, проверяют выбранную модель и параметры кластеризации. При смене face model надо помнить о несовместимости старых и новых эмбеддингов в одной библиотеке и планировать полное переобучение, а не рассчитывать на мгновенный эффект переключателя.

Places пустой, хотя камера записывает GPS

Открывают сведения конкретного файла и убеждаются, что координаты действительно извлечены. Затем проверяют Map Provider и фоновые задания геокодирования. Карта и геокодер — разные настройки: Map Tiles → None скрывает подложку, но само наличие координат не должно исчезать. Если сервер полностью без интернета, автоматическое получение названий мест штатным внешним провайдером не сработает.

После отключения NAS появились тысячи Missing Photos

Не нажимают красный счётчик для очистки. Сначала возвращают сетевой ресурс в прежнюю точку, проверяют его внутри контейнера и запускают Scan. Если содержимое совпадает по хешам, LibrePhotos способен восстановить связи. Очистка missing нужна только для действительно удалённых файлов.

Редактирование метаданных неожиданно изменило оригинал

Проверяют два набора настроек: общий Synchronize metadata to disk и отдельный Write face tags to image files. Для архивного режима лучше выбрать sidecar и протестировать запись на копии. Переключатель лиц способен модифицировать оригинал даже при общем Off, если sidecar не выбран.

Новый пользователь не может получить тот же Scan Directory

Это не ошибка прав. LibrePhotos запрещает совпадающие и пересекающиеся каталоги разных пользователей. Для общей семейной библиотеки назначают одного владельца и используют Sharing. Если нужны действительно независимые учётные записи над одними файлами, архитектура LibrePhotos этого напрямую не предоставляет.

Контроль фоновых заданий

Страница Library показывает действия, которые запускает пользователь, а подробная история находится у администратора в Admin Area → Worker Logs. Для каждого задания сохраняются статус, момент постановки в очередь, начало, завершение, инициатор и текущий шаг. При сбое выводится сообщение ошибки. Это первый источник диагностики: если интерфейс сообщает, что поиск ещё индексируется, нужно найти соответствующий Calculate Clip Embeddings, а не перезапускать весь сервер.

В очереди встречаются Scan Photos, Generate Event Albums, Regenerate Event Titles, Train Faces, Scan Missing Photos, Calculate Clip Embeddings, Generate Tags, Add Geolocation, Scan Faces, Generate Face Embeddings, Find Similar Faces, Download Models, Repair File Variants и Detect Duplicate Photos. Массовая выгрузка выбранных кадров тоже выполняется фоновым заданием: сервер сначала собирает ZIP и только потом предлагает готовый архив.

Если задание действительно застряло, в Worker Logs используют Cancel. Отмена отмечает задание завершённым и удаляет ожидающие шаги из очереди; выполняющийся шаг может остановиться не мгновенно, поскольку проверяет флаг отмены в контрольных точках. Remove — другая команда: она удаляет строку лога, но не является способом остановить работающий процесс. Эту разницу важно помнить, чтобы не убрать запись и оставить тяжёлую обработку в фоне.

Для повседневной эксплуатации удобно придерживаться правила «одна причина — одно задание». После добавления новой папки запускают Scan. Для смены event-заголовков — только Regenerate Event Titles. Для появления семантики — Calculate Clip Embeddings. Для лиц — Scan/Train Faces. Так проще оценить результат и найти ошибку, чем запускать Rescan на каждый симптом.

Мобильный доступ

Основная работа с LibrePhotos выполняется через адаптивный веб-интерфейс, но для Android существуют отдельные клиенты. В документации UhuruPhotos указан как наиболее функциональный нативный Android-клиент; он находится в открытом тестировании и ориентируется на офлайн-доступ, резервирование и синхронизацию. Официальный LibrePhotos Mobile описан как proof of concept на React Native и заметно менее зрелый.

Это ограничение стоит учитывать до выбора платформы для автоматического бэкапа телефона. Если главная задача — чтобы iPhone и Android бесшовно загружали всю медиатеку в фоне, LibrePhotos не предлагает такой же отлаженный кроссплатформенный мобильный контур, как некоторые прямые конкуренты. Веб-загрузка подходит для ручных партий, а Android-клиент может расширить сценарий, но серверную фототеку лучше не проектировать, предполагая несуществующую мобильную функцию.

Для удалённого просмотра браузерного интерфейса важнее правильно организовать доступ к собственному серверу. Не следует просто пробрасывать порт приложения в интернет. Минимум нужен HTTPS и обратный прокси, а ещё лучше — VPN или другая приватная сеть. Публичные альбомы при необходимости можно выводить наружу отдельно, не открывая административные страницы всему интернету.

Практические рабочие сценарии

Семейный архив на NAS без изменения оригиналов

Начальная задача — получить поиск и распознавание поверх уже существующих папок и исключить риск повреждения файлов. Каталог NAS монтируют в контейнер read-only, служебные данные LibrePhotos — в отдельный постоянный volume. Создают одного владельца коллекции, выбирают Scan Directory и запускают первичный Scan. В Metadata Options оставляют запись на диск выключенной, а Write face tags to image files не включают.

После завершения базовой индексации проверяют случайные JPEG, RAW и видео, затем Places, People и Things. Для семантического поиска включают Top 50 и дают закончиться CLIP-заданию. Людей подписывают постепенно. Вторым членам семьи создают отдельные аккаунты и делятся нужными альбомами вместо назначения того же каталога. Такой вариант оставляет файловое хранилище источником истины, а LibrePhotos становится поисковой и презентационной оболочкой.

Архив фотографа с RAW+JPEG

До первого сканирования включают Stack RAW+JPEG pairs. Проверяют, что RAW и JPEG одной съёмки лежат рядом и имеют одинаковую базовую часть имени. После импорта выборочно открывают несколько карточек с бейджем RAW и раскрывают +N formats. Если одинаковый кадр появился дважды, сначала выясняют, это отдельный stack или не связавшийся file variant; простое удаление одной карточки может уничтожить нужный RAW.

Теги из внешнего DAM лучше заранее записать в XMP. Тогда LibrePhotos подхватит Subjects/Keywords и позволит искать по ним. Для рейтингов задают тот же порог избранного, что использовался в прежнем каталоге. Художественную проявку продолжают делать во внешнем RAW-редакторе; после создания нового JPEG запускают Scan, чтобы он появился как вариант или отдельный объект в зависимости от имени.

Разбор старого неструктурированного диска

Сначала индексируют диск без включения автоматической записи метаданных. Далее открывают Without Timestamp и исправляют наиболее важные даты, затем Duplicate Photos и запускают только Exact copies. Это даёт безопасный первый объём очистки. После резервной копии можно перейти к visual duplicates на Strict. Случайные папки по-прежнему доступны через Folders, но для нормальной навигации постепенно создаются People, Places и ручные теги.

Если диск иногда отключается, не очищают Missing Photos до проверки mount. При переименовании каталогов в файловом менеджере после операции выполняют Scan и дают системе связать файлы по хешам. Массовое физическое удаление лучше делать после того, как решения по дубликатам прошли корзину и несколько дней проверки.

Публичная фотоподборка без выдачи GPS

Создают отдельный My Album, добавляют только опубликованные кадры, включают Public sharing и задают срок. В Photo Details оставляют Share location information, Share detected faces и при необходимости timestamp выключенными. После Save link settings ссылку открывают в приватном окне браузера и проверяют глазами то, что увидит посетитель.

Такой контроль полезнее прямой публикации отдельных JPEG: у альбома есть отзыв ссылки, срок действия и отдельные настройки деталей. Если ссылка больше не нужна, Public sharing выключают; повторное включение создаст новый адрес, а старый останется недействительным.

Сервер без постоянного доступа в интернет

До изоляции сети загружают необходимые модели и выполняют первичную обработку. В Map Tiles выбирают None, чтобы интерфейс не пытался получать картографическую подложку. Семантический поиск, распознавание лиц, теги и локальные подписи могут работать с уже установленными моделями. Автоматическое получение названий мест через штатных внешних провайдеров без сети работать не будет.

Если модели удалить из data_models, следующая задача, которой они понадобятся, попытается получить их снова. Поэтому в офлайн-среде каталог моделей имеет смысл включить в резервную копию. То же относится к образам контейнеров: сервер должен иметь локально всё необходимое до отключения доступа к реестрам.

Перенос на новый сервер

Сначала фиксируют текущие mount points и делают дамп PostgreSQL. Оригиналы переносят отдельно с проверкой контрольных сумм. На новой машине разворачивают совместимую конфигурацию и стараются сохранить внутренний путь Scan Directory. Затем восстанавливают БД и служебные данные, запускают сервис и проверяют несколько объектов. Если пути изменились, сначала исправляют mounts или выполняют контролируемое связывание, а не удаляют массово появившиеся missing-записи.

После переезда проверяют Worker Logs, People, Places, семантический поиск и открытие оригинала из lightbox. Успешная загрузка главной страницы ещё не означает, что доступны модели и физические файлы. Для большого архива стоит также проверить случайный RAW+JPEG и публичную ссылку, если такие ссылки используются.

Что LibrePhotos делает с метаданными

EXIF для LibrePhotos — не просто информационная подпись. Время съёмки определяет положение на Timeline и события, GPS — Places, модель камеры и объектива участвуют в поиске, рейтинг — в Favorites. XMP расширяет переносимость: теги, исправленные даты и регионы лиц могут существовать рядом с оригиналом и быть понятны другим программам.

Изменение даты в интерфейсе следует рассматривать как каталогизационную правку, а не переписывание истории камеры. Это особенно удобно для сканов плёнки: пользователь может задать реальную дату события, не притворяясь, что сканер снял изображение в тот же момент. Для новых цифровых снимков оригинальный DateTimeOriginal сохраняет ценность как свидетельство камеры.

Если один и тот же архив обслуживают LibrePhotos и другая программа, правила записи надо определить заранее. Два приложения, которые одновременно переписывают XMP с разным представлением тегов или лиц, способны перетирать изменения друг друга. Практичный вариант — назначить один инструмент источником правды для конкретного типа метаданных: например, digiKam для ручных IPTC/XMP и LibrePhotos только для чтения, либо LibrePhotos для лиц с записью в sidecar и внешний редактор без изменения этих регионов.

После изменения XMP вне LibrePhotos нужен новый scan, чтобы база увидела данные. Если обычный Scan не перечитал неизменившийся основной файл при изменённом sidecar, используют Rescan только после проверки на небольшой выборке. Массовая переиндексация — операция обслуживания, её удобно выполнять ночью и контролировать Worker Logs.

Правила дат, часовые пояса и серии

У старой медиатеки время часто записано неоднородно: одна камера хранит полноценный EXIF, телефон добавляет смещение, видео приносит QuickTime-тег, скан получает только дату файла, а часть снимков содержит дату в имени. LibrePhotos решает это системой последовательных правил. Они применяются сверху вниз, и первое правило, способное получить дату, завершает поиск. Поэтому порядок важнее количества правил.

В Settings редактор Set date & time parsing rules позволяет добавлять, удалять и переставлять источники. Поддерживаются EXIF-теги, дата из пути по регулярному выражению, свойства файловой системы и значение, заданное пользователем. После изменения правил обязательно нужен Rescan: обычный Scan пропускает уже индексированные неизменившиеся файлы, а значит старая дата останется в базе.

Для видео особенно важно различать локальное время и UTC. Некоторые контейнерные метаданные традиционно записывают время без понятного пользователю часового пояса. Правила могут указывать источник зоны и зону, в которой следует трактовать результат: пользовательскую, найденную по GPS или заданную явно. LibrePhotos сохраняет «настенные часы» места съёмки, чтобы фотография, сделанная в Токио в 14:00, не превращалась на экране домашнего компьютера в другое время только из-за текущей зоны браузера.

Ручная дата имеет приоритет. Если пользователь однажды исправил конкретный снимок, стандартное правило Timestamp set by user воспроизводит эту правку при следующих пересканированиях. Поэтому ситуация «изменил правила, но один файл всё равно показывает прежнее время» может быть нормальной: нужно очистить ручную дату у этого объекта либо осознанно изменить порядок правил.

Рядом с датами находится редактор правил burst detection. Жёсткие правила по EXIF Burst Mode, sequence number и шаблону имени включены по умолчанию; мягкие предположения по близости времени и визуальному сходству отключены. Такой консервативный режим снижает риск случайно сложить в стек два самостоятельных кадра. Если камера пишет характерные имена серий, можно включить или добавить подходящее правило и затем проверить несколько реальных burst-наборов.

Мягкое правило Timestamp Proximity полезно для камеры, не записывающей служебные burst-теги, но оно требует осторожности. Два разных снимка, сделанные в течение пары секунд, формально удовлетворят временному условию. Для событий, спорта или репортажа это обычная ситуация. Поэтому автоматическое объединение по времени лучше сначала опробовать на копии каталога, а не сразу применять к многолетнему архиву.

Автоматический Scan по расписанию

В LibrePhotos нет необходимости каждый раз заходить в интерфейс, если файлы поступают на NAS по расписанию. Серверное управление предоставляет команду manage.py scan, которую можно запускать внутри backend-контейнера. Без дополнительных параметров это инкрементальный проход: он подхватывает новые или изменённые файлы. Ключ полного прохода предназначен для реиндексации всего архива, а режим со списком путей — для точечной обработки конкретных файлов.

Для домашнего сервера команду удобно вызывать cron, например один раз ночью после синхронизации камер и телефонов. Частота зависит от процесса: архив, куда фотографии попадают раз в неделю, не выигрывает от сканирования каждые пять минут. Напротив, лишние проверки только создают журнал и фоновую нагрузку. Если пользователь хочет видеть новый кадр сразу после загрузки через веб-интерфейс, отдельный cron не требуется — завершение upload само ставит обработку файла в очередь.

Nextcloud имеет собственный режим сканирования. Команда обычного локального Scan не должна восприниматься как универсальный проход по всем внешним интеграциям. Если Nextcloud используется как источник, его задачу планируют отдельно и наблюдают за ней в Worker Logs. Такая явность полезна: сбой облачного источника не блокирует индексацию локальной папки.

Автоматизация особенно требует аккуратности с missing-файлами. Если сетевой диск иногда монтируется с задержкой после перезагрузки, не стоит запускать полный проверочный проход раньше появления NAS. Иначе база отметит большой массив записей missing. Сами записи не удалятся автоматически, но красный счётчик и последующая ручная очистка создают ненужный риск. На системном уровне разумно связать cron с готовностью хранилища.

Аутентификация и доступ к серверу

Для одного домашнего пользователя достаточно обычной пары логин-пароль, но в многопользовательской установке LibrePhotos поддерживает OpenID Connect. Внешним поставщиком идентификации может быть, например, Keycloak, Authentik, Authelia, Zitadel, Okta, Google или Entra ID. После успешной проверки LibrePhotos создаёт собственную сессию; обычный вход по паролю при включении OIDC продолжает работать параллельно.

Для OIDC необходимо корректно задать публичный адрес экземпляра через FRONTEND_BASE_URL. Это не косметическая настройка: обратный прокси может менять Host, поэтому приложение не всегда способно само вывести свой внешний адрес для callback. У поставщика создают confidential client, задают точный redirect URI, client ID, secret и issuer. Затем провайдер регистрируется в административной части LibrePhotos, а OIDC_ENABLED включает кнопку входа.

Автоматическое создание новых аккаунтов через SSO по умолчанию выключено. Если включить OIDC_ALLOW_SIGNUP, сервер также требует настроенную исходящую почту. При первом входе существующая учётная запись связывается по подтверждённому адресу электронной почты. Неподтверждённый адрес, отсутствие email или несколько аккаунтов с одним адресом приводят к отказу — это защита от ошибочного захвата чужой записи.

SSO не отменяет необходимость сетевой защиты. Административный интерфейс, API и база фотографий содержат чувствительные данные; экземпляр, доступный из интернета, должен находиться за HTTPS и получать своевременные обновления. Публичные альбомы предназначены для внешнего просмотра, но административные endpoints не следует публиковать без обычных мер серверной безопасности.

Для семейного сервера полезно разделить роли на практике, даже если интерфейс не строит сложную матрицу RBAC. Один или два администратора управляют Scan Directory, моделями и пользователями; остальные аккаунты используют фото, альбомы и sharing. Открытую регистрацию оставляют выключенной, если нет конкретной причины принимать незнакомых пользователей.

Массовое выделение и дисциплина изменений

Большая фототека быстро превращает любое групповое действие в потенциально дорогое. LibrePhotos позволяет выбирать много фотографий и выполнять операции с альбомами, тегами, sharing, скрытием, корзиной и загрузкой. Наличие Select All полезно, но перед действием важно смотреть, в каком представлении находится пользователь: «все» в результатах поиска — это не обязательно вся библиотека, а «все» в person album может включать только кадры конкретного человека.

Теги — одно из самых безопасных массовых действий, особенно если запись на диск выключена. Их можно использовать как временные рабочие статусы: «проверить», «к печати», «экспорт клиенту». После завершения проекта теги снимаются без перемещения файлов. Альбомы также не меняют файловую структуру, поэтому подходят для подборок, которые не должны превращаться в копии на диске.

Массовое перемещение в Trash менее рискованно, чем немедленное физическое удаление, но корзину нельзя считать резервной копией. После Delete permanently восстановление зависит только от внешнего backup. Для дубликатов лучше сначала отработать несколько групп вручную, убедиться в правильном выборе оригинала и лишь затем применять пакетные операции.

Скрытие отличается от удаления. Hidden убирает фотографию из основной Timeline, но сохраняет её в библиотеке и позволяет вернуть. Это подходящий механизм для технических кадров, чеков или неудачных дублей, которые пока нельзя уничтожать. Для скриншотов и документов есть отдельные категории, а Memories дополнительно исключает их из ретроспективных подборок.

После большой серии изменений полезно не запускать сразу несколько обслуживающих задач. Например, если сначала переместить тысячи файлов во внешнем файловом менеджере, затем одновременно включить Rescan, Duplicate Detection и переобучение лиц, диагностировать расхождение будет сложнее. Надёжнее менять одну сущность, дождаться завершения Worker Logs, проверить результат на нескольких объектах и переходить к следующему шагу.

Сравнение с аналогами

LibrePhotos логично сравнивать сразу с двумя классами программ: серверными фототеками и настольными редакторами. ФотоМАСТЕР относится ко второму классу, поэтому совпадение задач у него ограниченное. PhotoPrism и Immich — прямые серверные альтернативы, а digiKam полезен как ориентир для тех, кому нужен локальный DAM с развитым редактированием метаданных и изображений.

Задача LibrePhotos ФотоМАСТЕР PhotoPrism Immich digiKam
Каталог существующих папок Сканирует папку сервера, сохраняет файловую структуру Не является серверным каталогом медиатеки Индексирует originals и показывает папки Поддерживает внешние библиотеки и собственное хранилище Работает с локальными, съёмными и сетевыми коллекциями
Веб-доступ Основной интерфейс работает в браузере Редактор запускается на компьютере Основной интерфейс — PWA в браузере Есть развитый веб-интерфейс Основной интерфейс — настольный
Лица Детекция, кластеризация, именование, XMP-регионы Инструменты портретной ретуши, а не каталог людей Распознавание и группировка людей Распознавание и группировка людей Распознавание лиц и теги людей
Поиск по содержимому CLIP semantic search и похожие фото Нет задачи поиска по серверной фототеке AI-метки и развитые фильтры поиска Контекстный CLIP-поиск и фильтры Поиск по метаданным, тегам и другим критериям
Карта Places, геокодирование, карта и дерево мест Не ключевая функция фоторедактора Карты, места и собственный геокодинг Карта и обратное геокодирование Геолокация и карта в настольном каталоге
RAW Индексирует и показывает, связывает RAW+JPEG Открывает RAW и даёт выполнять обработку Индексирует RAW и создаёт представления Показывает RAW в медиатеке Каталогизирует и конвертирует RAW через LibRaw
Пиксельное редактирование Ограничено организационными правками и поворотом Цвет, ретушь, фон, удаление объектов, кадрирование Не заменяет полноценный редактор Есть встроенные базовые коррекции, кадрирование и поворот Есть полноценный Image Editor и пакетная обработка
Мобильный бэкап Android-клиенты есть, мобильный контур менее зрелый Не сервер для фонового бэкапа телефона Обычно использует внешние приложения, например PhotoSync Сильная сторона: приложения iOS/Android и фоновая загрузка Не ориентирован на постоянный мобильный серверный бэкап
Общий доступ Внутренний sharing и публичные альбомы со сроком и деталями Экспортирует результат редактирования как файл Альбомы и общий доступ в серверной фототеке Пользователи, партнёры, альбомы и публичные ссылки Экспорт и публикация через настольные инструменты
Дубликаты Точные и визуальные, с ручным подтверждением Не предназначен для чистки медиатеки Есть функции организации и стеков, подход отличается Автоматическое обнаружение дубликатов Есть поиск сходства и инструменты отбора

LibrePhotos и ФотоМАСТЕР

ФотоМАСТЕР решает задачу обработки отдельного изображения. В нём есть цветокоррекция, замена и размытие фона, удаление объектов, пластика лица и фигуры, инструменты ретуши, эффекты, пакетная обработка, кадрирование, коррекция шума и работа с RAW. LibrePhotos почти не пересекается с этим набором: его сильная сторона — индексирование коллекции и поиск, а не изменение пикселей.

Поэтому практический выбор здесь определяется этапом процесса. Для «найти все фотографии Анны в Берлине и собрать публичный альбом» подходит логика LibrePhotos. Для «убрать объект на конкретном кадре, поправить тон кожи и проявить RAW» нужен редактор вроде ФотоМАСТЕРа. Эти программы могут использоваться последовательно: LibrePhotos помогает найти и отобрать файл, редактор — создать обработанную версию, затем Scan добавляет результат обратно в каталог.

LibrePhotos и PhotoPrism

PhotoPrism ближе по архитектуре: он индексирует фото и видео, работает через браузер, распознаёт лица, добавляет метки, показывает места, читает EXIF/XMP и поддерживает RAW. У PhotoPrism развитая система комбинируемых поисковых фильтров по меткам, месту, разрешению, цвету, качеству и другим полям, а PWA рассчитана на работу с телефона и компьютера. Для мобильного фонового импорта документация PhotoPrism опирается в том числе на совместимые приложения вроде PhotoSync.

LibrePhotos делает заметный акцент на семантическом CLIP-поиске, обучении лиц, событиях, Memories и подробном управлении публичными деталями альбома. При выборе между ними стоит проверить собственные приоритеты на тестовой копии библиотеки: качество лиц, поиск по конкретным языковым запросам, скорость индексирования на имеющемся CPU и то, как каждый продукт трактует уже накопленные XMP.

LibrePhotos и Immich

Immich совмещает серверную медиатеку с сильным мобильным сценарием. Его приложения для iOS и Android умеют резервировать выбранные альбомы, пропускать уже загруженные файлы по контрольной сумме и работать в фоне в пределах ограничений мобильной ОС. Есть timeline, albums, map, memories, facial recognition, smart search, RAW, stacks, tags, публичные ссылки, внешние библиотеки и встроенный базовый редактор.

Если архив в основном рождается на телефонах и должен автоматически попадать на сервер, возможности мобильного бэкапа Immich оказываются функционально значимым отличием. LibrePhotos больше подходит к модели «у меня уже есть папки с архивом; хочу умный локальный каталог поверх них», хотя он также умеет веб-загрузку и Android-клиенты. Разница не означает превосходство одной системы во всех задачах: для конкретного NAS важны поведение внешних папок, права на оригиналы и переносимость метаданных.

LibrePhotos и digiKam

digiKam работает как настольный менеджер цифровых активов. Он поддерживает очень крупные коллекции, теги, рейтинги, EXIF/IPTC/XMP, лица, геолокацию, RAW, пакетные операции и полноценный редактор с кривыми, шумоподавлением, резкостью, коррекцией объектива и другими инструментами. Это удобный выбор, когда один человек работает за компьютером и хочет контролировать метаданные и обработку в одном приложении.

LibrePhotos удобнее, когда коллекцией нужно пользоваться из браузера на разных устройствах и делиться с другими аккаунтами. digiKam, в свою очередь, глубже работает с ручным DAM и редактированием. Благодаря XMP эти подходы можно сочетать, но только после определения правил записи: параллельное изменение одних и тех же sidecar двумя программами без дисциплины создаёт конфликты.

Ограничения, которые важно учитывать заранее

Первое ограничение — LibrePhotos требует серверного обслуживания. Даже если интерфейс выглядит как обычный фотосервис, за ним стоят контейнеры, PostgreSQL, служебные каталоги, модели, очереди и резервные копии. Пользователь домашнего NAS должен быть готов хотя бы к обновлению контейнеров, проверке логов и восстановлению базы. Это не та программа, которую достаточно один раз установить на ноутбук и забыть.

Второе — первичная индексация не мгновенная. Миниатюры, лица, теги, CLIP, геокодирование и pHash требуют времени и ресурсов. Большая медиатека может быть уже частично доступна, пока очереди ещё работают, поэтому первые часы не отражают итоговое качество поиска. Массовые Rescan лучше планировать, а не запускать импульсивно.

Третье — LibrePhotos не заменяет графический редактор. Организационные правки, поворот, дата, место, рейтинг и метаданные — это не проявка RAW и не ретушь. Для профессиональной обработки понадобится другой инструмент.

Четвёртое — полностью автономная работа имеет границы. Локальные ML-модели можно заранее скачать, а тайлы карты отключить, но штатное обратное геокодирование обращается к внешнему провайдеру. В закрытой сети названия мест автоматически не появятся без собственного дополнительного решения.

Пятое — мобильная экосистема слабее, чем у сервисов, построенных вокруг автоматического бэкапа смартфона. Android-варианты существуют, но официальный мобильный клиент всё ещё описывается как ранний проект, а полноценного официального iOS-клиента документация не обещает. Если это главный сценарий, мобильную часть нужно протестировать до миграции.

Шестое — некоторые действия могут менять оригиналы. По умолчанию каталог можно держать безопасно read-only, однако веб-загрузка, физическое удаление и запись части XMP требуют прав. Особенно внимательно нужно относиться к записи тегов лиц. Тест на копии и регулярный backup здесь важнее уверенности в настройках.

Как оценить LibrePhotos на своей коллекции

Для проверки не требуется сразу отдавать системе весь архив. Лучше сделать тестовый набор из нескольких сотен или пары тысяч файлов: JPEG разных лет, несколько RAW+JPEG, видео, фотографии с GPS и без него, групповые портреты, файлы с XMP, несколько явных дубликатов и изображения без даты. Такой набор быстро выявит именно ваши риски — поддержку камеры, перенос тегов, качество лиц и поведение вариантов.

  1. Разверните экземпляр с постоянной БД и служебными данными, а тестовые оригиналы подключите read-only.
  2. Выберите Scan Directory, запустите Scan и дождитесь завершения основных Worker Logs.
  3. Проверьте Timeline, Folders, RAW+JPEG, видео и сведения EXIF.
  4. Подпишите несколько лиц, выполните Train и оцените inferred-совпадения.
  5. Откройте Places и убедитесь, что GPS преобразуется в ожидаемые места.
  6. Включите Semantic Search на Top 50 и проверьте несколько запросов по смыслу.
  7. Запустите Duplicate Photos сначала для exact copies, затем visual Strict.
  8. Создайте My Album, опубликуйте его с выключенными GPS и лицами и проверьте ссылку в приватном окне.
  9. Сделайте дамп базы, измените тестовый тег или подпись и убедитесь, что понимаете, где хранится правка.
  10. Только после этого подключайте основной архив и выбирайте, разрешать ли запись в XMP.

Такой тест показывает не «красивость» стартового экрана, а устойчивость реального рабочего процесса. Если ключевые задачи — быстро находить людей и события, просматривать архив на разных устройствах, сохранять исходную структуру папок и контролировать публикацию — LibrePhotos предоставляет для этого согласованный набор инструментов. Если главное — обработка изображения или полностью автоматический мобильный бэкап, часть процесса придётся отдать другому приложению.

0 0 голоса
Рейтинг статьи

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные