Skip to content
Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

64 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ₯ GoPro Plus Downloader 2

Break free from the 25-file download limit

A powerful CLI tool to bulk download your entire GoPro Plus media library without restrictions.

Docker Hub Python License

Features β€’ Quick Start β€’ Contributing β€’ Troubleshooting


πŸ’‘ Why This Tool?

This tool lets you download your entire media library in bulk, making it easy to:

  • πŸ“€ Migrate to Google Drive, Dropbox, or any cloud storage
  • πŸ’Ύ Backup to your self-hosted NAS (Synology, TrueNAS, etc.)
  • 🎬 Access your full media collection offline
  • οΏ½ Automate regular backups with Docker

✨ Features

  • πŸ“¦ Bulk Download - Download all your GoPro Plus media without the 25-file limit
  • πŸ”„ Idempotent Downloads - Safely re-run downloads; already downloaded files are automatically skipped
  • πŸ” Automatic Retry - Network failures are handled with exponential backoff retry logic (restarts from scratch on failure)
  • 🐳 Docker Support - Run in a containerized environment for easy deployment
  • πŸ–₯️ CLI Interface - Full command-line control with flexible options

⚑ Quick Start

1. Get Your Credentials

  1. Go to GoPro Plus Media Library and log in
  2. Press F12 to open Developer Tools
  3. Go to Application tab (Chrome/Edge) or Storage tab (Firefox/Safari)
  4. Click Cookies β†’ Select https://plus.gopro.com
  5. Copy these values:
    • gp_access_token β†’ This is your AUTH_TOKEN
    • gp_user_id β†’ This is your USER_ID

2. Run It

Choose your preferred method:

🐳 Option A: Docker
# Paste your credentials from step 1
export AUTH_TOKEN='your_token_here'
export USER_ID='your_user_id_here'

# Download all media
docker run --name gopro-downloader \
  -e AUTH_TOKEN="${AUTH_TOKEN}" \
  -e USER_ID="${USER_ID}" \
  -v ~/gopro-downloads:/app/download \
  maxrodrigo/gopro:latest

Your files will be in ~/gopro-downloads/

πŸ’» Option B: Direct (Python 3.10+)
# Paste your credentials from step 1
export AUTH_TOKEN='your_token_here'
export USER_ID='your_user_id_here'

# Clone and setup
git clone https://github.com/maxrodrigo/gopro-plus.git
cd gopro-plus
python3 -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
pip install -r requirements.txt

# Download all media
./gopro

Your files will be in ./download/

3. Preview First (Optional)

Want to see what will be downloaded first?

# Docker
docker run -e AUTH_TOKEN="${AUTH_TOKEN}" -e USER_ID="${USER_ID}" -e DRY_RUN=true maxrodrigo/gopro:latest

# Direct
./gopro --dry-run

🐳 Docker Configuration

Prerequisites: Get your AUTH_TOKEN and USER_ID from Environment Variables section below.

docker run --name gopro-downloader \
  -e AUTH_TOKEN='<YOUR_TOKEN>' \
  -e USER_ID='<YOUR_USER_ID>' \
  -v /path/to/download:/app/download \
  maxrodrigo/gopro:latest

Docker Environment Variables

Variable Required Default Description
AUTH_TOKEN βœ… Yes - Authentication token from GoPro Media Library
USER_ID βœ… Yes - User ID from GoPro Media Library
DRY_RUN ❌ No false Set to true to preview without downloading
START_PAGE ❌ No 1 Starting page number
PAGES ❌ No 1000000 Number of pages to process
PER_PAGE ❌ No 15 Items per page
PROGRESS_MODE ❌ No noline Progress display: inline, newline, or noline

πŸ”‘ Environment Variables

To set up AUTH_TOKEN and USER_ID, you need to extract them from your GoPro Plus account.

Method 1: Browser Storage (Easiest) ⚑

  1. Go to GoPro Plus Media Library and log in
  2. Open your browser's Developer Tools:
    • Chrome/Edge: Press F12 β†’ Go to Application tab β†’ Cookies β†’ https://plus.gopro.com
    • Firefox: Press F12 β†’ Go to Storage tab β†’ Cookies β†’ https://plus.gopro.com
    • Safari: Cmd+Option+I β†’ Go to Storage tab β†’ Cookies β†’ plus.gopro.com
  3. Find and copy these cookie values:
    • gp_access_token β†’ Copy the Value (starts with eyJhbGc...)
    • gp_user_id β†’ Copy the Value

Method 2: Network Tab

  1. Go to GoPro Plus Media Library and log in
  2. Open Developer Tools (F12 or Ctrl+Shift+I / Cmd+Option+I)
  3. Go to the Network tab
  4. In the filter field, type: user
  5. Refresh the page if needed
  6. Click on any request and find the Cookies tab
  7. Look for these cookies:
    • gp_access_token - starts with eyJhbGc... β†’ Copy to AUTH_TOKEN
    • gp_user_id - the user ID β†’ Copy to USER_ID

For Docker:

docker run -e AUTH_TOKEN=<gopro-auth-token> -e USER_ID=<gopro-user-id> maxrodrigo/gopro:latest

For Linux/macOS:

export AUTH_TOKEN="<gibberish_string_here>"
export USER_ID="<user-id>"

For Windows Command Prompt:

set AUTH_TOKEN="<gibberish_string_here>"
set USER_ID="<user-id>"

For Windows PowerShell:

$env:AUTH_TOKEN="<gibberish_string_here>"
$env:USER_ID="<user-id>"

Once the AUTH_TOKEN and USER_ID are set, you can run the application without passing them explicitly each time.


πŸ”§ Troubleshooting

Docker logs

docker logs gopro-downloader

Common Issues

  • Authentication failed: Your AUTH_TOKEN or USER_ID may have expired. Re-authenticate and update your environment variables.
  • Download stuck: The script validates existing files before downloading. For large ZIP files, this may take a moment.
  • File already exists: The script is idempotent - it will skip files that are already fully downloaded.

Download Failures and Retry Behavior

Important: When a download fails and retries, it restarts from the beginning. ZIP files are dynamically generated by the GoPro API and cannot be resumed without corruption.

If you experience repeated download failures:

  1. Reduce items per page - Smaller ZIP files are more reliable and faster to download

    # Instead of default 30 items per page
    ./gopro --per-page 10
    
    # For very unstable connections, try even smaller batches
    ./gopro --per-page 5
  2. Increase retry attempts - Give the script more chances to complete the download

    ./gopro --max-retries 10
  3. Process fewer pages at a time - Download in smaller batches

    # Download pages 1-5
    ./gopro --start-page 1 --pages 5
    
    # Then continue with pages 6-10
    ./gopro --start-page 6 --pages 5

Recommended strategy for unreliable connections:

./gopro --per-page 10 --max-retries 10 --progress-mode newline

This creates smaller, more manageable ZIP files that are less likely to fail and faster to retry if they do.


🀝 Contributing

Interested in contributing? Check out CONTRIBUTING.md for:

  • πŸ’» Local development setup
  • 🐳 Docker development workflow
  • πŸ“ Coding guidelines
  • πŸ”„ Contribution workflow

πŸ“„ License

This project is open source. Check the LICENSE file for details.

If this tool helped you, consider giving it a ⭐ on GitHub!

About

Bulk download your GoPro Plus media library without the 25-file limit. CLI tool with Docker support for easy migration to any storage platform.

Topics

Resources

Contributing

Stars

Watchers

Forks

Contributors

Languages