CLI tool for backing up DRM-free GOG games.
Project description
gog-cli
gog is a Python CLI for backing up a user's owned DRM-free GOG game library.
It is focused on safe, scriptable workflows:
- list owned games with filtering and fuzzy search
- plan and execute backups to a local directory
- preserve metadata needed to audit and restore backups
- download installers and related files with resumable behavior
- verify downloaded files when checksums are available
Install
Requires Python 3.12 or newer.
pip install gog-cli
To install the latest development version directly from GitHub:
pip install git+https://github.com/aleksandarristic/gog-cli.git
Development
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e ".[dev]"
python -m pytest
Run the CLI locally:
gog --help
gog list
gog plan --destination /path/to/backups --all --summary
gog backup --destination /path/to/backups --games-from games.txt --dry-run
Roadmap
See docs/TODO.md for planned features and improvements.
Reference
Basic Workflow
gog auth login
gog refresh
gog list purchased
gog plan --destination /path/to/backups --all --storage --check-free-space
gog backup --destination /path/to/backups --all --yes
gog list backed-up --destination /path/to/backups
gog sync --destination /path/to/backups --all --yes
gog refresh updates the local purchased-library and download-metadata caches.
It does not download game installers. Run it before browsing or filtering newly
added library metadata.
Browsing Purchased Games
gog list purchased reads the local cache written by gog refresh; it does not
contact GOG. Human output includes ID, title, release year, genre/category, and
platforms when those fields are available. JSON output also includes scriptable
metadata such as owned, release_date, genres, and is_installable.
Examples:
gog list purchased
gog list purchased --format json
gog list purchased --search witcher
gog list purchased --search "baldurs gate"
gog list purchased --platform windows
gog list purchased --platform linux --search ftl
gog list purchased --year 1998..2005
gog list purchased --year 2010..2020 --include-unknown-year
gog list purchased --genre strategy
gog list purchased --genre arcade,rts
gog list purchased --genre strategy --include-unknown-genre
gog list purchased --search "baldurs gate" --platform linux --format json
Year filters omit games with unknown years by default; use
--include-unknown-year to keep them. Genre filters similarly omit unknown
genres by default; use --include-unknown-genre to keep those rows.
Planning Backups
gog plan shows the same dry-run plan as gog backup --dry-run without
downloading files or creating backup directories. Use it before long backup runs
to estimate size, inspect filters, and check destination free space.
Examples:
gog plan --destination /path/to/backups --all
gog plan --destination /path/to/backups --all --summary
gog plan --destination /path/to/backups --all --storage
gog plan --destination /path/to/backups --all --check-free-space
gog plan --destination /path/to/backups --all --format json
gog plan --destination /path/to/backups cyberpunk_2077
Platform and language filters can reduce backup size:
gog plan --destination /path/to/backups --all --platform linux --storage
gog plan --destination /path/to/backups --all --platform windows --language en --storage
Selecting Games
Game selectors can be product IDs, slugs, or exact titles. Commands that select
games accept repeated --game flags:
gog plan --destination /path/to/backups --game witcher_3 --game cyberpunk_2077
gog backup --destination /path/to/backups --game 123456789 --yes
For larger curated lists, put selectors in a UTF-8 text file and pass
--games-from. Blank lines and lines whose first non-whitespace character is
# are ignored.
Example games.txt:
# first NAS batch
witcher_3
cyberpunk_2077
123456789
Use the selector file in plan, backup, or sync workflows:
gog plan --destination /path/to/backups --games-from games.txt --storage
gog backup --destination /path/to/backups --games-from games.txt --downloader aria2c --yes
gog sync --destination /path/to/backups --games-from games.txt --dry-run
--games-from is repeatable and combines with repeated --game flags. Do not
combine explicit game selectors with --all.
Downloading
gog backup defaults to the built-in direct downloader. To use aria2c, install
aria2c and pass --downloader aria2c on an executing backup run:
gog backup --destination /path/to/backups --games-from games.txt --downloader aria2c --yes
When file size metadata is available, gog chooses aria2c connection settings
by size: very small files use one connection, mid-size files use two or four,
and multi-GB installers use eight or sixteen. Configure
aria2c_policy = "conservative" or aria2c_policy = "aggressive" to tune this
behavior.
Without --yes, backup and sync commands print a dry-run plan and exit without
downloading or modifying backup files.
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 gog_cli-0.3.0.tar.gz.
File metadata
- Download URL: gog_cli-0.3.0.tar.gz
- Upload date:
- Size: 66.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
acce83b398c7d94f57d2b961fa928521b0aad3f24b97c062a09ab26571442a5a
|
|
| MD5 |
53e8ed65d3be43ebb4877732826fc9aa
|
|
| BLAKE2b-256 |
9ab028feb3a62ef5b653b9fccea882c1d0dbf3f3825cd093ffaf34b6ba8da5e5
|
Provenance
The following attestation bundles were made for gog_cli-0.3.0.tar.gz:
Publisher:
release.yml on aleksandarristic/gog-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gog_cli-0.3.0.tar.gz -
Subject digest:
acce83b398c7d94f57d2b961fa928521b0aad3f24b97c062a09ab26571442a5a - Sigstore transparency entry: 2024062105
- Sigstore integration time:
-
Permalink:
aleksandarristic/gog-cli@b19fcd8de210ed717d44efacaabc60a50170c718 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/aleksandarristic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b19fcd8de210ed717d44efacaabc60a50170c718 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gog_cli-0.3.0-py3-none-any.whl.
File metadata
- Download URL: gog_cli-0.3.0-py3-none-any.whl
- Upload date:
- Size: 47.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd12177f48e9f8705c4fc51158300f059efe46390e3f2dab64be5393eddc97f3
|
|
| MD5 |
08714adf12a5aef75a994dc2321ce74c
|
|
| BLAKE2b-256 |
5dfb864480185f3568411434e32972fea72cb712623e2b4b25a00475f308a522
|
Provenance
The following attestation bundles were made for gog_cli-0.3.0-py3-none-any.whl:
Publisher:
release.yml on aleksandarristic/gog-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gog_cli-0.3.0-py3-none-any.whl -
Subject digest:
cd12177f48e9f8705c4fc51158300f059efe46390e3f2dab64be5393eddc97f3 - Sigstore transparency entry: 2024062190
- Sigstore integration time:
-
Permalink:
aleksandarristic/gog-cli@b19fcd8de210ed717d44efacaabc60a50170c718 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/aleksandarristic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b19fcd8de210ed717d44efacaabc60a50170c718 -
Trigger Event:
push
-
Statement type: