Skip to main content

Panoramax GoPro Downloader

a screenshot showing the copying in action

This is a very simple utility script/tool I use for streamlining the process of preparing images taken by a GoPro camera for the upload to Panoramax, in particular for organizing the 360° timelapse images into folders that correspond to each time-series.

The problem

GoPro cameras (at least the GoPro Max I use), save images and videos in a DCIM folder with sub-folders as below:

.
├── DCIM
│   ├── 100GOPRO
│   ├── 101GOPRO
│   ├── 102GOPRO
│   ├── 103GOPRO
│   ├── 104GOPRO
│   ├── 105GOPRO
│   ├── 106GOPRO
│   ├── 107GOPRO
│   ├── 108GOPRO
│   ├── 109GOPRO
│   ├── 110GOPRO
│   ├── 111GOPRO
│   ├── 112GOPRO
│   ├── 113GOPRO
│   └── 114GOPRO
└── MISC

These sub-folders do not correspond to e.g. timelapse image series, but rather just save 999 files in each folder. For many use cases, this is fine, but when doing many timelapse series throughout the day, it becomes cumbersome to find in which sub-folder a time series starts/ends.

The prefix of each GoPro file name indicates the type of recording that created it: For example, GSXXXX.JPG (e.g. GSAA1234.JPG) denotes a picture that's part of a 360° timelapse series named AA, while GPXXXXXX.JPG (e.g. GPAA1234.JPG) denotes pictures that are part of a regular, non-360° timelapse.

When importing images into standard photography suites, this might not matter, but for uploading images to Panoramax, (at least) my workflow is different: Each time series/timelapse represents one sequence that I'd like to upload, from start to finish. And typically I'd like to clean up the start/end images a bit, as often I might have recorded a bit pre- and post-movement. This would be a lot easier if each time series was in its own folder.

The solution

This little tool can be used to split up all images found in the SD-cards DCIM folder into a folder structure that corresponds to the time series/sequences, converting the non-informative 1XXGOPRO above, into a structure like this:

.
├── GSAA
├── GSAB
├── GSAC
├── GSAD
├── GSAE
├── GSAF
└── GSAG

Where each folder represents one sequence of images that make up a timelapse that can be cleaned and uploaded easily.

Install

You can install it from PyPI, using pip install panoramax-gopro-downloader, which will give you the CLI tool.

Alternatively you can install from uv or pipx depending on your preferences:

  • run pipx install panoramax-gopro-downloader, then it'll be available as panoramax-gopro-downloader as well, or…
  • …run it directly via uvx panoramax-gopro-downloader if you use uv

Usage

The script has two main commands:

  1. panoramax-gopro-downloader show-files to list the prefixes/sequences found. By default uses current working directory. You can specify the DCIM folder by using --input-folder
  2. panoramax-gopro-downloader copy-files to copy files from either the current working directory (or --input-folder) to the destination specified by --output-folder.

If the output folder doesn't exist yet, it will be created

Development

To develop locally, use uv for managing dependencies etc locally, e.g.:

git clone ssh://git@codeberg.org/gedankenstuecke/panoramax-gopro-downloader.git
uv sync
uv run panoramax-gopro-downloader

## License

This repo is licensed under AGPLv3.

Metadata

Release files for panoramax-gopro-downloader 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for panoramax-gopro-downloader 0.1.0
File Size Uploaded
panoramax_gopro_downloader-0.1.0.tar.gz 17.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for panoramax-gopro-downloader 0.1.0
File Interpreter ABI Platform
panoramax_gopro_downloader-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.2 kB

Release files / panoramax_gopro_downloader-0.1.0.tar.gz

Download URL panoramax_gopro_downloader-0.1.0.tar.gz
Size 17.0 kB
Tags Source
SHA-256 checksum
How to use checksums
6bf3422cb648d99c39b66f5e246b6a568ca799b04954f378eed24b0780dd9b31
BLAKE2b-256 checksum
How to use checksums
cd4e0283a378cebc89e27ed3ebe780bcab0a50bf3ca4522e8d6e5dd24577d038
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / panoramax_gopro_downloader-0.1.0-py3-none-any.whl

Download URL panoramax_gopro_downloader-0.1.0-py3-none-any.whl
Size 17.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
44d3286aedd4c7ef9f47be2edb0729c6a7cb9c5211873d293a9464be728f88d7
BLAKE2b-256 checksum
How to use checksums
1554469a7b1fc0a199bfc4a378c86ff3112843d0f7d509239d50ecdd63330716
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page