Scripts / Proton Drive CLI — Overview¶
gphoto2proton offers two import workflows, and which one you pick depends entirely on where you want your photos to end up:
- Proton Drive (My Files) — the Go binary (
gphoto2proton sync) - Proton Photos timeline — the bash scripts (
gphoto2proton-import.sh)
flowchart TD
A[Google Takeout .tgz archives] --> B{Where do you want<br/>your photos?}
B -->|"Proton Drive<br/>(My Files / gphoto2proton/)"| C[gphoto2proton sync<br/>Go binary]
C --> C1[Streaming · no extraction]
C --> C2[EXIF restored via exiftool]
C --> C3[Albums via legacy Photos API]
B -->|"Proton Photos<br/>(timeline + native albums)"| D[gphoto2proton-import.sh<br/>bash + proton-drive CLI]
D --> D1[Extract · upload · validate]
D --> D2[EXIF read natively by CLI]
D --> D3[Native Photos albums + RAW support]
click C "../quickstart/"
click D "quickstart/"
Which workflow should I choose?¶
Go binary (gphoto2proton sync) |
Bash scripts (gphoto2proton-import.sh) |
|
|---|---|---|
| Target | Proton Drive — My Files / gphoto2proton/ | Proton Photos timeline |
| Albums | Recreated via legacy Photos API | Recreated natively (photos-volume) |
| EXIF | Restored from takeout JSON sidecar (exiftool) | Read natively from files by the CLI |
| RAW support (NEF/CR2/ARW) | ❌ Not handled | ✅ Converted to JPEG (--convert-raw) |
| Disk | Streaming — no extraction | Extracts one archive at a time (≈ 2× archive size) |
| Platform | macOS, Linux, Windows | Linux (where proton-drive CLI runs) |
| Auth | Proton API (password / 2FA or session import) | proton-drive auth login session in pass |
| Best for | Local / laptop use, low disk footprint | Server-based bulk import into Proton Photos |
Choose the Go binary if...¶
- You want your photos stored under Proton Drive My Files, not the Photos timeline.
- You want to run on macOS or Windows, not just Linux.
- Your disk space is limited — it streams from
.tgzand never extracts. - You're okay running
albums-finalizeafterwards to recreate albums.
Choose the bash scripts if...¶
- You want your photos directly in the Proton Photos timeline, where they behave like photos taken on your phone (searchable, in your photo app, with native albums).
- You have a Linux server with the proton-drive CLI installed.
- Your library contains camera RAW files (NEF/CR2/ARW) you want imported.
- You're migrating a large archive set (hundreds of GB) and can afford per-archive extraction.
Tip
The two approaches are not mutually exclusive. You can use the bash script as the primary import path and keep the Go binary for one-off archives, or vice-versa. They write to different places in Proton.
The bash scripts at a glance¶
| Script | Purpose |
|---|---|
gphoto2proton-import.sh |
Full import pipeline: extract → upload → verify → albums → validate → cleanup. Resumable per step, supports RAW conversion and recovery reprocessing. |
fix-photo-date.sh |
Fix the capture time of already-uploaded Proton Photos (typically videos that got the archive extraction date instead of the recording date). |
Both scripts talk to the official proton-drive CLI and reuse its
authenticated session from the pass secret store — no Proton API
credentials needed.
Quick links¶
- Quick Start — get the import pipeline running in minutes
- Import Script Reference — every flag, env var, and pipeline step
- Fix Photo Date Reference — fix wrong capture dates