从 Google Photos 无缝迁移到 immich

2023-06-24 19:18:21 +08:00
 zx900930

最近 Gmail 收到一封邮件说是 7 月份就不能用 takeout 批量导出 Archive Albums 了, 我之前 Blogger 上存的图片不多, 绝大部分都在 Google Photos 里面.

想着这样下去指不定哪天 Google 就把 Google photos 的免费 takeout 关了, 想想上面还是存了几千张照片的.

而且因为最近都一直用 immich 代替 google photos, 体验也挺不错的, 干脆把 Google photos 里的旧照片打包弄出来导入 immich, 完全告别 google photos.

于是看到了这个 issue https://github.com/immich-app/immich/discussions/1340 正是我想要的

想了解 immich 功能的可以看看项目地址 https://github.com/immich-app/immich 更新非常频繁而且时不时有 breaking change, 如果想稳定使用建议固定版本或者更新服务端前仔细阅读 changelog

首先肯定是去 takeout.google.com 把你的照片打包弄出来, 最好选择英语导出, 我只选了 Google photos 和 AlbumArchive, 格式 zip, 单个包直接选 50G, 反正系统很新不怕解不了压. 几个小时后就收到 Google 的邮件和下载链接了.

然后重要的地方是: 把下载好解压出来的 Takeout 文件夹复制到你 linux 文件系统里, 不要在挂载的 smb 共享里操作, 因为文件系统的区别(比如大小写敏感度的不同), issue 里提到的几个工具都有可能会报错!

接下来就是选择你希望的导入方式, 如果你想保留 google photos 里面的一个个的相册. 那么可以用https://github.com/MrYakobo/exif-wrapper这个脚本 它会在你的 Takeout/Google Photos 里生成 mattwilson1024/google-photos-exif 这个工具需要的文件夹 然后你就可以用 bash 脚本批量上传到你的 immich 服务器

#!/bin/bash

KEY="YOURKEYHERE"
SERVER="https://photos.yourdomain.com/api"
BASE_DIR="/foo/bar/Takeout/Google Photos/AlbumsProcessed"

# Change the working directory to BASE_DIR
cd "$BASE_DIR"

for album in "$BASE_DIR"/*; do
  if [ -d "$album" ]; then
    echo "Uploading album: $album"
    immich upload \
      -y \
      --key "$KEY" \
      --server "$SERVER" \
      -d "$album" -t 16 -al
  fi
done

我自己选择的是第二个工具, 因为我从来没有手动整理过 Google 相册, 所以我只需要简单的时间线和地理位置就行了, 而且相比第一个工具, 第二个工具能处理的文件扩展名更多 https://github.com/garzj/google-photos-migrate

我用的 ubuntu cloud 22.04 的虚拟机, 用别的发行版的可以自行改动一下 先安装 nodejs, 注意版本需要>=14, 我这里装 16 并安装 Yarn 包管理器

curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -

sudo apt install gnupg2
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn

然后下载 google-photos-migrate 并安装依赖

git clone https://github.com/garzj/google-photos-migrate.git
cd google-photos-migrate

yarn

此时要注意, 如果你 takeout 选择的语言不是英语, 需要修改 src/meta/find-meta-file.ts 加入你相册里面可以看到的对应语言的'edited'后缀, 不加的话这部分的图片会找不到对应的 meta file.

woExt = woExt.replace(/-(edited|bearbeitet|modifié)$/i, '');

修改完保存然后继续编译执行

yarn build

mkdir output error
yarn start '/path/to/takeout/Google Photos' './output' './error'

等待它执行完, 你需要上传的就是 output 文件夹里的内容, 重复的会放在 /output/duplicateXX 文件夹里, 可以自行决定删除哪个, 也可以直接上传, immich 会过滤掉 hash 一致的图片, 如果还有重复的估计就是缩略图, 自己看着删除或者写个比较大小的脚本删吧.

上传直接用 immich cli 就行了

yarn add immich

yarn immich upload --key YOUR_IMMICH_API_KEY --server http://docker.lan:3001 --recursive /home/bar/google-photos-migrate/output/

注意一下, immich 新加的 typesense 识图的时候会把 cpu 吃饱(我的 13400 直接 16 线程吃满 90%了...), 如果你上传的虚拟机不幸卡死, 可以等 immich 服务器那边 load 下去以后, 再上传一次, 它会自动对比云端和本地的文件, 不会上传重复的照片.

上传完就可以和 Google Photos 说再见了. 当然如果你用的 icloud 之类的,可以先把 icloud 的图片全部下载到手机, 然后用 immich 的 app 同步手机里的图片视频到 nas, 同步完以后再关闭 icloud 的图片同步功能, icloud 会直接腾出空间给你同步其它的内容, 照片会在暂存一个月后永久删除.

7886 次点击
所在节点    Google
43 条回复
stephen2009
2023-06-24 20:31:30 +08:00
楼主好,使用 rclone 挂载网络硬盘(比如 onedrive ),然后把照片储存在网络硬盘上,这样情况下,可以使用 immich 吗?谢谢!
zx900930
2023-06-24 20:35:19 +08:00
@stephen2009 只要你能挂载到你的文件系统下,immich 就能处理,我 immich 的数据文件夹就是远程挂载的。
stephen2009
2023-06-24 20:46:54 +08:00
@zx900930 #2 好的,immich 对硬件要求高吗?甲骨文 AMD 免费机不知道能不能带的动?
ggmood
2023-06-24 20:49:26 +08:00
楼主感觉 OneDrive 算不算一个好的替代方案?我这里上传下载不算稳定,有时抽风
0o0O0o0O0o
2023-06-24 20:51:45 +08:00
@stephen2009 #3

immich 没端到端加密,开发者好像也明确说了不考虑加,绝对不建议跑云服务器上。
winterbells
2023-06-24 21:32:35 +08:00
@ggmood 收费之后我就转到 Onedrive 了,速度还算可以,但客户端真的差劲(包括网页端)。刚上传的本地文件都还没删呢,点击查看就是已删除 /没权限。。
zx900930
2023-06-24 21:51:19 +08:00
@stephen2009 只建议在 nas 上跑,不建议上公共云
iooco
2023-06-24 21:59:24 +08:00
@winterbells 我也是 onedrive 好废材的感觉 客户端不好用 win 的文件管理器照片多了加载缩略图好卡 我 tm 都 i9 了 还是卡 佛了 那个照片应用只能用个人账号 企业教育版的账号都用不了 不知道用起来咋样
xlsepiphone
2023-06-24 23:07:48 +08:00
目前我的照片都是先同步群晖 Photo ,群晖 syncthing 到 pixel ,pixel 无损备份到 Google Photos 。
jeesk
2023-06-25 01:05:47 +08:00
@0o0O0o0O0o 加 https 不就行了吗? 如果服务厂商要查你文件, 你还真没办法。
williamx
2023-06-25 07:24:49 +08:00
嗯……什么情况需要 takeout ?
0o0O0o0O0o
2023-06-25 07:40:51 +08:00
@jeesk 被黑的风险啊,谷歌微软有顶级团队来确保不被黑,自建哪有。
lyz1990
2023-06-25 07:54:04 +08:00
@xlsepiphone 我跟你一样的路径😬
yyysuo
2023-06-25 08:46:15 +08:00
@0o0O0o0O0o 大部分人的照片也没什么机密吧。
0o0O0o0O0o
2023-06-25 08:52:14 +08:00
@yyysuo #14 选择自建服务的本来就是少数,在这个群体里我觉得注重数据安全的占比还是高一些的。
winterx
2023-06-25 09:00:55 +08:00
@xlsepiphone syncthing 是 docker 部署的吗?
Planehi
2023-06-25 09:01:25 +08:00
我的服务器跑着 photoprism, 在犹豫要不要转 immich
chronos
2023-06-25 09:22:22 +08:00
@Planehi 我是从 Photoprism 转到 immich 的,第一感受就是浏览速度真快。immich 有 ios 和 android 的 app ,我在家里的 nas 使用 docker-compose 方式部署 immich server 后定期用 app 同步上传一下照片,也解决了我老婆的 iphone 只有 256G 但又经常给娃拍照拍视频导致空间不够用的问题。
l4ever
2023-06-25 09:35:56 +08:00
我都是丢到"时光相册"的. 好像用了好多年也没关闭.
Planehi
2023-06-25 09:37:29 +08:00
@chronos 大佬,我现在的方案是通过 app 同步到 nextcloud ,然后 photoprism 读取存储图片的路径内的所有文件,如果换 immich 的话用他的 app 上传图片,就得在 nextcloud 手动更新索引才能在 nextcloud 也显示照片,是不是会比较麻烦?还是说我应该把图片从 nextcloud 里搬出来单独存储会比较好?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951255

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX