You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mpl 53afb72ae1 Make a copy of .lastdone before updating it 4 months ago
upload add example to push file to Perkeep 1 year ago
.gitignore Initial commit 1 year ago
LICENSE Initial commit 1 year ago README: add some links, mention Drive sync 1 year ago
go.mod Cope when item in .lastDone does not exist (anymore) 2 weeks ago
go.sum Cope when item in .lastDone does not exist (anymore) 2 weeks ago
main.go Make a copy of .lastdone before updating it 2 weeks ago



This program uses the Chrome DevTools Protocol to drive a Chrome session that downloads your photos stored in Google Photos. By default, it starts at the most ancient item in the library, and progresses towards the most recent. It can be run incrementally, as it keeps track of the last item that was downloaded. It only works with the main library for now, i.e. it does not support the photos moved to Archive, or albums. For each downloaded photo, an external program can be run on it (with the -run flag) right after it is downloaded to e.g. upload it somewhere else. See the upload/perkeep program, which uploads to a Perkeep server, for an example.


We want to incrementally download our own photos out of Google Photos.

Google Photos used to have an API to do this (the Picasa Web Albums API) but they removed it, replacing it with a new API that doesn't let you download your original photos. They instead let you download your photos with mangled EXIF, stripping location (and maybe recompressing the image bytes?).

There also used to be a way to sync your Google Photos to Google Drive, and then you could use the Google Drive API to download your original photos, but Google Photos removed that too.

We can get our original photos out with Google Takeout, but only manually, and slowly. We don't want to have to remember to do it (or remember to renew the time-limited scheduled takeouts) and we'd like our photos mirrored in seconds or minutes, not weeks.

In our original Perkeep issue, @bradfitz said that we might have to give up on APIs and resort to scraping, noting that the Chrome DevTools Protocol makes this pretty easy. Brad hacked up some Go code to drive Chrome (using and do a basic download and then Mathieu Lonjaret made this tool, fleshing out the idea.

What if Google Photos breaks this tool on purpose or accident?

I guess we'll have to continually update it.

But that's no different than using people's APIs, because companies all seem to be deprecating and changing their APIs regularly too.