Automate GoPro media offload — auto-detects camera Wi-Fi, downloads footage organized by city and date using GPS metadata, and syncs to Google Drive. No GoPro app needed. Windows & Mac compatible.
GoPro discontinued their desktop app, GoPro Quik. The only official way to transfer footage is their mobile app or physically removing the SD card. This project fixes that — connect your laptop to GoPro Wi-Fi and everything downloads automatically, organized and backed up.
- Auto-detects GoPro Wi-Fi and triggers download automatically
- Organizes by city then date —
media/Ahmedabad/2026-06-03/ - GPS extraction from JPEGs (EXIF) and MP4s (GPMF telemetry)
- Reverse geocoding via OpenStreetMap — no API key needed
- Duplicate detection — never downloads the same file twice
- Storage check — won't download if laptop is low on space
- Auto-wipes GoPro after successful download
- Google Drive sync with duplicate check
- Organizes existing unorganized footage by city and date
- No logs, no telemetry, nothing leaves your device unless you run Drive sync
| File | Purpose |
|---|---|
install_and_run.bat |
One-click setup for non-coders — installs dependencies and runs the downloader |
gopro_downloader.py |
Core download logic. Run manually or triggered by watcher. |
gopro_watcher.py |
Background watcher — detects GoPro Wi-Fi and auto-triggers download. |
gopro_drive_upload.py |
Manual Google Drive sync. |
gopro_organise.py |
Organizes existing unorganized footage into city/date folders. |
- Download and install Python from python.org
- IMPORTANT: Check "Add Python to PATH" during installation
- Download this repo as a ZIP → extract it
- Connect your laptop to GoPro Wi-Fi
- Double-click
install_and_run.bat
That's it — it installs everything automatically and starts downloading.
git clone https://github.com/Purva137/GoPro-Autodownload.git
cd GoPro-Autodownloadpip install requests google-auth-oauthlib google-api-python-clientOn your GoPro: swipe down → tap the wireless icon → Connect → Camera on Phone → this activates the hotspot.
On your laptop, check available Wi-Fi networks. You'll see a network like GP24500XXXX or whatever you've named it.
Open gopro_watcher.py and set line 7:
GOPRO_SSID = "Your GoPro Network Name Here"Connect your laptop to GoPro Wi-Fi, then run:
python gopro_downloader.pyYou should see files downloading into media/city/date/ folders. If GPS was locked when shooting, city names will appear. If indoors, files go to Unknown_Location/.
This makes the watcher start automatically every time you log into Windows.
- Press
Win→ search Task Scheduler → open it - Click Create Basic Task on the right
- Name:
GoPro AutoDownload→ Next - Trigger: When I log on → Next
- Action: Start a program → Next
- Program: full path to your Python exe, e.g.
C:\Users\YourName\AppData\Local\Programs\Python\Python314\python.exe - Arguments: full path to
gopro_watcher.py, e.g."C:\Users\YourName\Desktop\GoPro-Autodownload\gopro_watcher.py" - Click Next → Finish
- Find the task in the list → right-click → Properties → Triggers → Edit → set Delay task for: 3 minutes → OK
From now on, every time you log in and connect to GoPro Wi-Fi, download starts automatically within 2-3 minutes.
To run the watcher right now without rebooting:
python gopro_watcher.py6a. Create Google Cloud credentials
- Go to console.cloud.google.com
- Create a new project — name it anything e.g.
GoPro Sync - Search for Google Drive API → Enable it
- Go to Google Auth Platform → Branding → Get Started → fill in app name and your email → save
- Go to Audience → Add your Gmail as a test user
- Go to Clients → Create OAuth Client → Desktop App → Create → Download JSON
- Rename the downloaded file to
credentials.json - Place
credentials.jsonin the project folder
6b. Run first-time auth
python gopro_drive_upload.pyA browser window opens — sign in with Google and allow access. This only happens once. A token.pickle file is saved for future runs.
6c. Run sync anytime
python gopro_drive_upload.pyAll media from your media/ folder uploads to a GoPro folder on Drive, mirroring the same city/date structure. Already uploaded files are skipped automatically.
If you have old unorganized GoPro footage:
- Create a folder called
unorg_datainside the project directory - Dump all your media files into it (any structure, just dump everything)
- Run:
python gopro_organise.pyFiles are copied (not moved) into media/city/date/ — originals stay in unorg_data/ until you verify everything looks right and delete manually.
media/ location/ date/ image.jpg or video.mp4
- Shoot outdoors for GPS lock — city names won't work indoors
- For geocoding during GoPro download, plug your phone via USB and enable USB tethering — laptop gets internet through phone while staying on GoPro Wi-Fi
- Quality is never touched — raw byte-for-byte copy at every step, nothing is re-encoded
credentials.jsonandtoken.pickleare in.gitignore— never commit these
| Feature | Windows | Mac |
|---|---|---|
| One-click installer | ✅ | ❌ |
| Manual download | ✅ | ✅ |
| Auto Wi-Fi watcher | ✅ | |
| Google Drive sync | ✅ | ✅ |
| Organise existing footage | ✅ | ✅ |
- Tested on Hero 11, other models may vary
Made by Purva Patel