Copy photos from Google Photos to Dropbox without saving to your local machine
Project description
jyphoto_transfer
Disclosure
- Setup required - Users need to create their own Google/Dropbox OAuth apps
- Personal use focus - It’s designed for individual use, not multi-tenant production
- Prerequisites - Technical comfort with OAuth setup
Installation
pip install jyphoto_transfer
Setup
Before using, you need to set up credentials for both Google and Dropbox.
1. Google Cloud Setup
- Go to Google Cloud Console
- Create a new project (or select existing)
- Go to APIs & Services → Library
- Search for “Photos Library API” and click Enable
- Go to APIs & Services → Credentials
- Click Create Credentials → OAuth client ID
- If prompted, configure the OAuth consent screen (choose External, fill in app name)
- For application type, choose Web Application and enter your Redirect URL (Should be BASE_URL/callback)
- Click Create, then download the JSON file
- Save it somewhere safe (e.g.,
~/.config/jyphoto_transfer/google_photos_creds.json) - If keeping project in Testing mode, add your test users in Audience.
Google Cloud Console Setup
Add these scopes in the Data Access tab * https://www.googleapis.com/auth/photospicker.mediaitems.readonly * openid * https://www.googleapis.com/auth/userinfo.email
2. Dropbox App Setup
- Go to Dropbox App Console
- Click Create app
- Choose Scoped access and Full Dropbox
- Give it a name and click Create app
- On the app settings page, note your App key and App secret
- Make to give the following permissions
- files.content.write - to upload files
- files.metadata.read - to check if files exist (for your get_unique_filename function)
- enter your callback URI
3. Environment Config
Create a file called ~/.config/jyphoto_transfer/.env with these
values:
BASE_URL=http://localhost:8000/
GOOGLE_CREDS_FILE=google_photos_creds.json
DROPBOX_APP_KEY=your_dropbox_app_key
DROPBOX_APP_SECRET=your_dropbox_app_secret
GOOGLE_TOKEN_FILE=google_token.json
DROPBOX_TOKEN_FILE=dropbox_token.json
DROPBOX_FOLDER=/CopiedPhotosLocation
| Variable | Description |
|---|---|
BASE_URL |
Where the app runs (include trailing slash) |
GOOGLE_CREDS_FILE |
Path to your downloaded Google OAuth JSON |
DROPBOX_APP_KEY |
From Dropbox app settings |
DROPBOX_APP_SECRET |
From Dropbox app settings |
GOOGLE_TOKEN_FILE |
Location of google_token.json |
DROPBOX_TOKEN_FILE |
Location of dropbox_token.json |
DROPBOX_FOLDER |
Dropbox folder to copy photos into |
4. Protect Your Secrets
Add these to your .gitignore:
*.env
*_creds.json
google_token.json
dropbox_token.json
Never commit credentials to git!
Usage
from jyphoto_transfer.core import app, serve
serve()
Open your browser to http://localhost:8000, log in with Google,
connect Dropbox, select photos, and sync!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jyphoto_transfer-0.0.2.tar.gz.
File metadata
- Download URL: jyphoto_transfer-0.0.2.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ec427898099e8140243874c64fd1d5b603aac1cc9c6966ca2d2f0c6786a9008
|
|
| MD5 |
272bfdef6dd035d7cc7243a73eb5a31c
|
|
| BLAKE2b-256 |
d98de1b068bd910c83d495a2edd232d21d05ee49b52c49aae4b66baf84fbe0da
|
File details
Details for the file jyphoto_transfer-0.0.2-py3-none-any.whl.
File metadata
- Download URL: jyphoto_transfer-0.0.2-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0350ffaeb13884abc71441ac839b2ed05a66c38fce487f4b4bda21aec6227ae0
|
|
| MD5 |
706985c997278cd50cbe9214579deca0
|
|
| BLAKE2b-256 |
d7c91d5ba89563a5bf7e21c5b77af512cc62f2793082a46e3a0a013c82a624b0
|