google-photos-archiver
aims to provide a simple, fast, extensible interface to be able to back up one's Google Photos to a location of their choosing.
I've drawn inspiration from projects such as: https://github.com/mholt/timeliner & https://github.com/gilesknap/gphotos-sync but wanted to cut my teeth in this domain and see what I could come up with myself.
I wanted a tool (of my own creation) which could easily provide a copy of mine and my partner's Google Photos libraries, and keep said copy up to date over time.
In reality I've mainly just needed a distraction from the vicious cycle of wake, work, Netflix, sleep, and I thought it was high time to do a little side project.
docker
... Or
python==3.8
- poetry
>=1.0.0
- pre-commit
- Run
pre-commit install
- Run
These instructions will help you set up Google OAuth2 client credentials so you can start using google-photos-archiver
- While logged into your Google account navigate to Create a New Project
- Create one, and switch to using it with the UI dropdown
- Navigate to
APIs & Services
click on+ Enable APIs and services
, and enable thePhotos Library API
- Navigate back to
APIs & Services
and click onCredentials
- Click on
+ Create Credentials > OAuth client ID
- Configure an OAuth consent screen. You can just fill out the required fields and hit Save.
- Click
Add Or Remove Scopes
and manually add scope:https://www.googleapis.com/auth/photoslibrary.readonly
- Accept remaining defaults, save through and return to
Credentials
- Click
- Click on
+ Create Credentials > OAuth client ID
- Make a
"Desktop App"
- Congrats!, you now have a Client ID and Client Secret
- Download the associated
client_secret.json
file and make note of its location as we'll be providing it's path togoogle-photos-archiver
A browser window will be opened during the initial OAuth flow. After successfully authenticating once, a refresh token will be stored for future use (See: --refresh-token-path
) and will omit the need to reauthenticate.
$ git clone [email protected]:scottx611x/google-photos-archiver.git
$ poetry install
$ poetry run google-photos-archiver --help
Note that some more Docker volume mounting will be warranted here if you want to specify a different path to download to etc. Ref: https://docs.docker.com/storage/volumes
$ docker build . -t google-photos-archiver
$ docker run -v $PWD:/app/ google-photos-archiver --help
$ pip install google-photos-archiver
$ google-photos-archiver --help
$ poetry run pytest
$ google-photos-archiver archive-media-items --download-path /Volumes/my-big-hdd/downloaded_media
$ google-photos-archiver archive-media-items --date-filter 2020/*/*,2021/8/22
$ google-photos-archiver archive-media-items --date-range-filter 2019/8/22-2020/8/22
$ google-photos-archiver archive-media-items --albums-only
$ tree /<download_path>/downloaded_media/ | head
/<download_path>/downloaded_media/
├── 2021
│ └── 1
│ ├── 1
│ │ └── a.jpg
│ └── 2
│ └── b.mov
├── 2020
│ ├── 1
│ │ └── 2
│ │ └── c.jpg
│ └── 2
│ └── 3
│ └── d.jpg
└── albums
└── Album A
└── <symlink /<download_path>/downloaded_media/2021/1/1/a.jpg >
...