从 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 会直接腾出空间给你同步其它的内容, 照片会在暂存一个月后永久删除.

7675 次点击
所在节点    Google
43 条回复
conky
2023-06-25 09:39:56 +08:00
感觉和我的 sysnology photo 没啥区别,就不搞了
qW7bo2FbzbC0
2023-06-25 09:43:58 +08:00
刚好周末从 google photos 上批量把因为硬盘故障丢失的照片传回本地了,本地+syncthing 异机备份
Misyo
2023-06-25 09:55:23 +08:00
immich 好像没人脸识别功能吧,看时间线说的是后面会增加
chronos
2023-06-25 10:00:56 +08:00
@Planehi 如果用 immich 就要用它的方式上传,nextcloud 那边就只能放弃了。
chronos
2023-06-25 10:02:52 +08:00
@Misyo 现在的版本已经加上了人脸识别,就是某些识别错误的人脸照片不能手动调整到正确的人脸名称上。
willxiang
2023-06-25 10:09:10 +08:00
@winterbells #6
onedrive 的搜图功能太差了,在 google 上搜一些关键字基本上能得到我想要的结果
但是我还是转到 onedrive 了
chronos
2023-06-25 10:10:44 +08:00
@Planehi 刚刚发现昨天 immich 又更新了一版,添加了对只读的现有库的支持。看起来可以将 nextcloud 之类的现有的图片文件夹纳入进来。
winterbells
2023-06-25 10:18:00 +08:00
@willxiang 我一直都以为它没这个功能。我之前试过汉字是搜不到的(只能搜到几张),几个月前的验光单也找不到了(因为缩略图很多不显示)
willxiang
2023-06-25 10:21:57 +08:00
@winterbells #28
能搜,但效果很烂,拿英文单词搜跟拿中文会搜到不同的结果

会识别图片中的文字(比如搜“车”,保险单中包含“车”,于是搜出来一大堆保险单或者带车这个文字的截图)
搜"car"会搜出汽车或者坐在汽车里的照片

也可以加标签,但是总体来说跟谷歌的比,很烂
jstony
2023-06-25 10:40:48 +08:00
瞄了一眼,还是继续用我的群辉
BlueBing
2023-06-25 10:54:13 +08:00
前几天尝试 compose 安装,不太流畅。
然后试用过程中总是莫名报错或卡住,数次重新安装未果,已被劝退。
zx900930
2023-06-25 11:14:43 +08:00
@Misyo #23 新版本有人脸识别, 但是对侧脸, 或者小时候和长大后的脸识别还是有点弱, 可以手动打标签
jeesk
2023-06-25 11:26:21 +08:00
@0o0O0o0O0o 我的建议是使用组网工具, 在隧道里面安全
xlsepiphone
2023-06-25 13:49:31 +08:00
@winterx #16 群晖 Docker 部署
@lyz1990 #13 Pixel 长期插电,电池已经不行了,一断电就关机,PDD 买了块电池,准备自己换一下。
52acca
2023-06-25 23:59:15 +08:00
看了一下介绍,看来终于不用折腾黑群了
7lQM1uTy635LOmbu
2023-06-26 00:00:26 +08:00
感谢,教程很详细很实用,我前段时间 k8s 造了个 immich ,正愁不知道咋 upload 之前的一堆就看到了你这个。
lozzow
2023-06-26 09:17:10 +08:00
可以自己写识别的那个服务来中文化
nanoswit
2023-07-03 10:58:54 +08:00
感谢分享。正在做相同的操作,自己写了一个 python 脚本转换 GP 导下来的照片,这下可以抄作业了。
Misyo
2023-07-04 10:56:12 +08:00
@zx900930 现在能自定义文件夹吗,好像还是只能 upload
zx900930
2023-07-04 11:07:50 +08:00
@Misyo 不知道什么意思,那个 upload 不是路径是 immich 上传的 option 啊。
你可以在后面定义你想上传的路径。

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

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

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

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

© 2021 V2EX