После брюзжаний под пиво о продуктах Apple всё-таки решил сделать очередной подход к Apple Photos. Пятый по очереди. Как говорил о себе друг: “дважды холост, второй раз удачно”. Посмотрим, что из этого выйдет.

Залил вручную 20 тысяч фотографий в пятидесяти альбомах (мог вырвать время на ручную работу, но не на разработку тула). После последней попытки всё стало гораздо лучше. Разве что после импорта каждой тысячи-двух фото приходилось перезапускать приложение из-за ошибок с метаданными (появлялось окно с ошибками). Это не исправили. На телефоне все фото и альбомы появились очень быстро.

Не нравилось то, что нельзя изменить локацию для существующих фото, но в последней бете OS X эта возможность появилась.

Поставил на телефон Google Photos и сделал бекап из iCloud Photos на Google Photos. Процесс оказался небыстрым, дней пять ушло на перекидывание. На моём 5s всего 16 GB, выдавалось предупреждение о том, что storage закончился, но и это перетерпел.

Почему Google Photos — потому что делает автоматически приятные коллажи, анимации, пытается группировать по темам (утки, собаки, башни, горы, даже лазанье) и местам.

Но вот ни в Apple Photos, ни в Google Photos нет нашей любимой функции Memories - показа что было в этот день в другие годы. Очень классная фича. Есть на телефоне программа Flashback, делающая это без сторонних сервисов, но она делает не так, как мы привыкли. Ещё есть Dropbox Carousel, но это вообще неудобоваримый продукт по неудобству (чтобы исключить фото из других каталогов Dropbox, нужно сильно поработать мышкой) и некрасивости (как достаёт принудительный урок пользования этой программой, не передать).

Поэтому пользуемся Picturelife (ссылка реферальная, у меня сейчас там места впритык, поэтому буду благодарен за ваши регистрации). Я пустышек не рекомендую, поэтому по крайней мере посмотрите, я лично считаю, что это достойный сервис.

Хранить бекапы фото в Picturelife мне не нужно, для этого у меня есть Arq на Google Drive. И альбомы сортировать тоже. Единственная функция — Memories, которая очень хороша. В приложении на iOS присылается push каждый день, когда есть что показать, плюс шлётся письмо с коллажем. Супер.

Минус в цене. Все фото там хранить я не могу, у меня 55 GB. В 8 GB бесплатных не помещаюсь без телодвижений, в 25 GB за разумные 5$ в месяц тоже, а платить $10 за 100 GB много ради одной функции.

Так что выход один — уменьшать картинки. Раньше я использовал Lightroom, у него был плагин к Picturelife, позволяющий автоматически публиковать уменьшенные фото. Вроде бы при редактировании и перепубликации существующих фото они начинали дублироваться в сервисе, не помню, я начинал публикацию только после полной вычистки и обработки новых альбомов.

Теперь пришлось придумывать решение для Apple Photos. Набросал за полчаса прототип-однострочник в shell:

$ masters="/Volumes/Data/Pictures/Photos Library.photoslibrary/Masters"; dest="/Volumes/Data/Pictures/Picturelife"; mkdir -p "$dest"; find "$masters" -type f | while read f; do relfile="${f#$masters/}"; dir=$(dirname "$relfile"); file=$(basename "$relfile"); echo "$relfile -> $dir - $file"; mkdir -p "$dest/$dir"; destfile="$dest/$dir/$file"; if [[ -f "$destfile" ]]; then echo "  Skip $destfile"; continue; fi; echo "  $f -> $destfile"; cp -f "$f" "$destfile"; sips --resampleHeightWidthMax 1024 "$destfile"; done

И в виде скрипта:

#!/bin/bash
masters="/Volumes/Data/Pictures/Photos Library.photoslibrary/Masters"
dest="/Volumes/Data/Pictures/Picturelife"
maxsize=1024

mkdir -p "$dest"

find "$masters" -type f | while read f
do
    relfile="${f#$masters/}"
    dir=$(dirname "$relfile")
    file=$(basename "$relfile")

    echo "$relfile -> $dir - $file"
    mkdir -p "$dest/$dir"
    destfile="$dest/$dir/$file"

    if [[ -f "$destfile" ]]; then
        echo "  Skip $destfile"
        continue
    fi

    echo "  $f -> $destfile"
    cp -f "$f" "$destfile"
    sips --resampleHeightWidthMax ${maxsize} "$destfile"
done

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

Параметры:

  • masters - путь к фотографиям в Masters на системе с оригиналами фото. У меня /Volumes/Data/Pictures/Photos Library.photoslibrary/Masters
  • dest - куда копировать, /Volumes/Data/Pictures/Picturelife
  • maxsize - максимальный размер в пикселах по ширине или длине, 1024

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

Дальше отключил все существующие каталоги в программе синхронизации Picturelife и добавил каталог с уменьшенными копиями.

Из 55 GB получил 5.5 GB, как раз нормально для бесплатных 8 GB. Осталось поставить скрипт в cron и все новые фото появятся в Picturelife.