Giter Club home page Giter Club logo

google-photos-archiver's Introduction

google-photos-archiver

CircleCI codecov PyPI version

What?

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.

Why?

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.

How?

Development Pre-reqs

  • docker

... Or

Optional Reqs

Getting Started

Google Oauth Setup

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 the Photos Library API
  • Navigate back to APIs & Services and click on Credentials
  • 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 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 to google-photos-archiver

First Run

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.

Development Usage

$ git clone [email protected]:scottx611x/google-photos-archiver.git
$ poetry install
$ poetry run google-photos-archiver --help

... with Docker

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

General Usage

$ pip install google-photos-archiver
$ google-photos-archiver --help

Running tests

$ poetry run pytest

Examples

Specify a different download location

$ google-photos-archiver archive-media-items --download-path /Volumes/my-big-hdd/downloaded_media

Download from specific dates (with wildcard support)

$ 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

Download Albums and their MediaItems only

$ google-photos-archiver archive-media-items --albums-only

Download Path Hierarchy

$ 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 >
...

google-photos-archiver's People

Contributors

scottx611x avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.