Steam Cloud for the games that don't have it.
Automatic, versioned, self-hosted cloud save sync for PC games โ Hydra and manual installs, GOG offline installers, repacks, anything a launcher isn't protecting. Your saves, your cloud, no subscription.
If you play games outside Steam/Epic/Xbox, nothing is protecting your saves. One corrupted file, one Windows reinstall, one "wait, which PC did I play on last?" and dozens of hours are gone. Paid save-sync services cap your history at a couple of backups and delete everything when you stop paying.
Game Save Genie runs quietly in the background and gives you what the launchers give their games:
- ๐น๏ธ Knows 19,000+ games โ save locations detected via the open-source Ludusavi database, plus process watching to know when you're playing
- ๐ฎ Emulators too โ
gsg add --pathbacks up any folder or file (RetroArch, PCSX2, Dolphin, memcards, save states), so games Ludusavi doesn't know are covered as well - ๐พ Backs up automatically โ when a game closes, and every 10 minutes while it runs
- ๐ Shows save health โ the dashboard,
gsg status, and tray distinguish protected, local-only, queued, paused, and failed saves; a healthy game never hides another game's failure - ๐ถ Recovers from outages โ failed uploads stay queued across restarts and retry automatically without another play session
- ๐ฐ๏ธ Every session is a version โ immutable, checksummed snapshots; roll back to any point with
gsg restore --version - โ๏ธ Your own cloud โ Google Drive (free 15 GB), OneDrive, any S3 bucket, or anything rclone speaks; version retention controls history, and delta uploads only send the save files that changed (an unchanged 40 MB slot is never re-uploaded)
- ๐ฅ๏ธ Follows you between PCs โ
gsg pullrestores on any machine, remapping paths saved under a different username on Windows, Linux or macOS - ๐ Paranoid by design โ downloads are verified before anything is touched, a safety backup is taken before every restore, restores never run while the game is, and a strictly-newer rule means offline progress is never clobbered
Steam/Epic/Xbox games are detected and skipped automatically โ those launchers already sync their own saves.
Windows installer (recommended): grab GameSaveGenie-Setup.exe from Releases โ per-user, no admin needed, adds gsg to your terminal, offers to run setup when done.
Portable: gsg.exe from the same Releases page โ no install at all.
From source (Python 3.10+): pip install git+https://github.com/Vasanthdev2004/Game-Save-Genie
Then:
gsgThat's the whole setup. A wizard finds your games, connects your cloud (Google Drive/OneDrive open a browser โ sign in, click Allow, done), and offers start-at-boot. From then on gsg auto protects everything, hands-free. Ludusavi and rclone are downloaded automatically on first use.
Once you're set up, running gsg again opens the dashboard โ your games, every version, and a one-key restore. No ids to copy.
Example library in an 80-column terminal. Wider terminals show games and history side by side.
Homelab? Run your own save server with one docker compose up and connect it with gsg setup-s3 โ see docker/README.md. Works with any S3-compatible store (MinIO, Garage, TrueNASโฆ), supports per-friend accounts, and your saves never leave your network.
Somewhere gsg can't run? The cloud layout is documented in CLOUD_FORMAT.md โ content-addressed blobs plus a small JSON manifest per backup, reachable with rclone and sha256sum from a shell script. A handheld or NAS that writes that layout produces storage gsg understands and deduplicates against; a one-command restore from a device-written backup is not there yet (#43).
Status: single-machine backup on Windows is stable and used daily. Cross-machine sync (
gsg pull) and Linux/Steam Deck support are beta โ solid in testing, but not yet battle-tested across many real setups. Keep a second copy of anything precious for now, and please file an issue with anything you hit โ that feedback is what moves it out of beta.
| Game Save Genie | Ludusavi | Game Backup Monitor | Hydra Cloud | Syncthing DIY | |
|---|---|---|---|---|---|
| Auto-backup on game close | โ | โ | โ | โ | โ folder sync only |
| Periodic backup during play | โ | โ | โ | โ | โ |
| Automatic cloud restore | โ | โ manual | โ | โ no game awareness | |
| Native cloud (direct, delta uploads) | โ | โ | โ needs Dropbox etc. | โ their servers | โ folder sync |
| Cross-machine path remapping | โ | โ | โ | โ | โ |
| Version history | โ per session | โ | โ | โ conflict files | |
| Storage you own | โ | โ | โ their servers | โ | |
| Free | โ | โ | โ | โ subscription* | โ |
*Hydra Cloud is subscription-only, caps each backup at 500 MB and 2 versions per game, and deletes saves 7 days after a subscription ends. Game Backup Monitor is a solid tool that also auto-backs-up and auto-restores โ its difference from Game Save Genie is cloud: "cloud" in GBM means pointing its backups at a separate folder-sync client (e.g. Dropbox), whereas Game Save Genie uploads directly to your own cloud/S3/self-hosted server with delta transfers, unlimited versions, and cross-machine path remapping. Comparison reflects mid-2026; check each project for current features. Ludusavi is a fantastic backup engine โ Game Save Genie builds on it and adds the automation layer.
gsg auto # the only command most people need โ watch + backup + restore
gsg auto --install # start hidden at logon (per-user, no admin needed)
gsg ui # interactive dashboard: browse versions, restore by arrow key
gsg status # per-game overview, storage meter, quota warning
gsg scan # what's installed (--source all to include Steam/Epic/Xbox)
gsg add "Elden Ring" --exe eldenring.exe # track something manually
gsg add "RetroArch" --path ~/.config/retroarch/saves --path ~/.config/retroarch/states --exe retroarch
# emulator / custom folders โ repeat --path as needed
gsg backup [game-id] # back up now (--dry-run previews, changes nothing)
gsg retry [game-id] # retry queued uploads now, or upload the latest local-only snapshot
gsg versions <game-id> # local history gsg cloud-list <game-id> # cloud history
gsg restore <game-id> [--version ID] # roll back to any local snapshot
gsg pull <game-id> [--version ID] # restore from the cloud (any machine)
gsg pull --all # catch this machine up on everything that's behind
gsg pause / resume <game-id> # exclude/re-include a game
gsg remove <game-id> [--purge] # untrack (--purge deletes local + cloud saves)Open gsg ui (or gsg status) to see each game's protection state, last backup,
last recorded successful upload, and any failure with a next step. In the
dashboard, u retries uploads for the selected game; b makes a backup.
Health refreshes every five seconds without changing your selected restore point.
Press / to find a game, Enter to browse matches, and Esc to clear the search. Tab moves between panes; c switches local/cloud history, r restores the selected point after confirmation, and F5 reloads. Restore points show readable times, labels, and an explicit Safety kind for pre-restore copies; the confirmation still shows the full version ID. L toggles the activity log, which opens after an operation. Long health messages can be scrolled without hiding the game/history tables.
Protected means the latest local snapshot was successfully uploaded to the currently configured destination. It is local evidence of a completed upload, not a fresh check that the remote copy still exists. Older versions may have no recorded upload time.
gsg auto and gsg watch check the persistent upload queue every minute.
Failures back off from one minute to at most one hour. Retrying uploads the
original checksummed snapshot, even if the live save has since changed. No new
game session is required. A watcher must be running for automatic retries;
otherwise use gsg retry or the dashboard's u key.
--no-cloudbackups and pre-restore safety snapshots are never automatically queued. Explicitly retrying may upload the latest local-only regular snapshot.- Paused or removed games are skipped. Queued uploads keep their original remote name and root; changing cloud settings does not silently redirect them.
- Pending snapshots are exempt from local retention until uploaded, so an
extended outage can temporarily exceed
max_versionsand use more disk space. - Damaged queued snapshots are retained and marked Needs attention, not
repeatedly uploaded. Recover the original snapshot file from another copy,
then use u or
gsg retryto revalidate it. New healthy backups can still upload while an older snapshot is blocked. - If another save operation is busy when a game closes, its automatic backup request survives restart and is retried before uploads or idle cloud restores.
- Games discovered by a periodic rescan get their first backup immediately.
- A separate writer lock serializes backup, upload, restore, and purge operations across the CLI, dashboard, and watcher. An idle watcher does not block them.
Restart any older watcher after upgrading so it participates in the new writer lock.
Run the same setup (same cloud account) on both PCs. Each machine backs itself up; newer cloud saves are pulled down at startup and while a game isn't running. gsg pull --all catches a machine up on demand.
The trust rules that make this safe:
- Verify first โ downloads are integrity-checked and staged before anything on disk changes; a bad download changes nothing.
- Safety backup always โ your current saves are snapshotted before every restore, and the restore aborts if that fails.
- Strictly newer only โ a restore only happens when the cloud is ahead of everything this machine has seen. Offline backups stay local and queued until an upload succeeds.
- Never under a live game โ if you're playing, you get a notification instead of a mid-session overwrite.
- Usernames remapped โ saves recorded under
C:\Users\alice\...restore correctly forbob, both in Ludusavi's manifest and the backed-up file tree.
gsg config shows everything; config lives at %APPDATA%\game-save-genie\Game Save Genie\config.yaml (Windows) or ~/.config/Game Save Genie/ (Linux).
| Key | Default | Meaning |
|---|---|---|
max_versions |
10 |
Versions kept per game, locally and in the cloud |
rclone_remote_name |
โ | rclone remote to upload through (set by the wizard) |
remote_root |
game-save-genie |
Folder/bucket on the remote |
storage_limit_gb |
5.0 |
Warn in gsg status at 80% (0 = off) |
backup_dir |
<data>/backups |
Local backup root |
ludusavi_path / rclone_path |
auto-download | Bring your own binaries |
Cloud layout: each save file is stored once under its SHA-256 at <remote>:<remote_root>/<game-id>/blobs/<hh>/<hash>, and each version is a small JSON manifest at <game-id>/manifests/<version-id>.json listing that version's files. The manifest is uploaded last, so a version only becomes visible once all its data is there. That is what makes uploads incremental โ an unchanged file is never re-sent. (Pre-0.3.0 versions are single zips and are still readable.)
Is this safe for my saves? That's the whole design brief. Every restore is preceded by a verified download and a safety backup of your current state; any failure aborts cleanly rather than half-applying. The restore pipeline was built failure-first โ see CHANGELOG.
Where do my saves live? In storage you own. Locally, each version is a plain zip of a Ludusavi backup tree that you can open with anything. In the cloud they are stored de-duplicated โ file contents under their SHA-256, plus a readable JSON manifest per version โ which is what keeps uploads incremental. No accounts, no servers of ours, no telemetry: gsg only ever talks to your configured remote and GitHub (to download the Ludusavi/rclone binaries).
What if I stop using it? Nothing expires and there is no subscription to lapse. Your local snapshots are plain zips of a Ludusavi backup tree, which Ludusavi can restore directly without gsg. The cloud copy is content-addressed, so rebuilding it by hand means following a manifest โ plain JSON listing each file's path and hash. gsg is MIT-licensed and self-hosted, so there is no vendor to be cut off by.
Linux / Steam Deck? Beta, and testers are gold. The full pipeline runs on Linux: backup/restore/pull (with Wine-prefix handling), the process watcher, notify-send notifications, Steam detection (native/Deck/Flatpak paths), and gsg auto --install sets up a systemd user service (headless boxes: loginctl enable-linger $USER). What it needs now is real-world mileage โ file an issue with anything you hit; see CONTRIBUTING.
Emulator saves? Games Ludusavi doesn't know? Covered since 0.4.0 โ gsg add --path backs up any folder or file (RetroArch, PCSX2, Dolphin, memory cards, save states). Repeat --path as needed.
src/game_save_genie/
cli.py # Typer CLI โ all commands and orchestration
ludusavi.py # Ludusavi wrapper (scan/backup/restore)
cloud.py # rclone wrapper: upload/download/list/prune
watcher.py # process watcher (start/close/periodic/idle callbacks)
sync.py # pure restore-decision policy (unit-tested)
remap.py # cross-machine path remapping
archive.py # safe extraction, snapshot zipping, hashing
database.py # SQLite version + sync-state tracking
health.py # shared save-health status from local backup and upload evidence
config.py # config + tracked-games persistence
launcher.py # Steam/Epic/Xbox detection
notify.py # file logging + Windows toasts
models.py # Pydantic models
Development: pip install -e ".[dev]", then pytest, ruff check src tests, mypy src tests (strict). CI runs all three on Windows and Linux.
MIT. Built on the shoulders of Ludusavi and rclone โ go star them too.