Replaces the single-game selection dialog with MultiProfileDialog for importing multiple games from a launcher. Adds support for batch selection, removal, and analysis of launcher games, and updates MultiProfileDialog to handle launcher-specific data structures. |
||
|---|---|---|
| .github | ||
| cloud_utils | ||
| dialogs | ||
| emulator_utils | ||
| gui_components | ||
| icons | ||
| images | ||
| launcher_utils | ||
| .gitignore | ||
| backup_runner.py | ||
| cancellation_utils.py | ||
| cloud_settings_manager.py | ||
| CODE_OF_CONDUCT.md | ||
| config.py | ||
| CONTRIBUTING.md | ||
| core_logic.py | ||
| game_saver_cli.py | ||
| google199856043abfffd4.html | ||
| gui_handlers.py | ||
| gui_utils.py | ||
| icon.ico | ||
| icon.png | ||
| LICENSE | ||
| main.py | ||
| minecraft_utils.py | ||
| privacy.html | ||
| PRIVACY.md | ||
| README.md | ||
| requirements.txt | ||
| save_path_finder.py | ||
| save_path_finder_linux.py | ||
| SaveState-OneFile-Linux.spec | ||
| SaveState-OneFile.spec | ||
| SaveState_gui.py | ||
| SaveStateTools.pyw | ||
| SECURITY.md | ||
| settings_manager.py | ||
| shortcut_utils.py | ||
| splash.png | ||
| steam_utils.py | ||
| TERMS.md | ||
| utils.py | ||
SaveState
A user-friendly GUI application for Windows and Linux to easily back up and restore video game save files. Perfect for games without cloud saves, managing multiple save locations, or syncing your progress across devices.
About this Project
SaveState aims to prevent the frustration of losing your precious game progress due to corruption, accidental deletion, or system changes.
This tool offers a modern graphical interface for creating compressed backups of your game save files, managing multiple game profiles, syncing to the cloud, and restoring them whenever needed.
SaveState features automatic detection of Steam games, support for all major launchers via drag & drop, deep emulator integration, and now cloud synchronization with Google Drive.
✨ Key Features
☁️ Cloud Save (Google Drive Integration)
Sync your saves across devices with seamless Google Drive integration:
- Upload, download, and sync your backups to the cloud
- Smart Sync Status shows which files are synced, local-only, or need attention
- Configurable auto-sync with bandwidth limits and storage quotas
🛡️ Digitally Signed & Verified
SaveState is officially signed via SignPath — no more "Unknown Publisher" warnings or SmartScreen blocks on Windows. Install with confidence.
🎮 Universal Launcher Support
Works with any PC game launcher — not just Steam! Drag and drop executables or shortcuts from:
- Steam, Epic Games, GOG Galaxy, Battle.net, Ubisoft Connect, EA App, and more
🕹️ Deep RetroArch Integration
Full support for RetroArch with a streamlined setup:
- Detects your RetroArch installation and cores
- Guided setup to select a core and identify game/save files
- Intelligent path resolution for saves (standard, XDG, Flatpak, Snap layouts)
⚙️ Per-Profile Backup Settings
Fine-tune backup behavior for each game individually:
- Override global settings for max backups, compression mode, max source size, and disk space checks
🐧 Linux AppImage & Portable Mode
- AppImage: Single file, no dependencies — just download, make executable, and run
- Portable Mode: Store all configs in your backup folder for USB drive usage
📦 Core Backup Features
- One-click backup & restore with compressed
.ziparchives - Automatic rotation with configurable backup limits per profile
- Direct restore from ZIP — restore saves even without a profile
- Data Safety: Automatic configuration backups protect against corruption
- Inline profile editing via right-click context menu
- Minimize to tray for silent background auto-backups
🎯 Smart Save Detection
The detection engine is intelligent and thorough:
- Deep Scan recursively searches candidate directories when standard scan fails
- Fuzzy Matching handles abbreviated titles and naming variations
- Steam Awareness avoids false positives in Steam Userdata folders
Visuals
Drag & Drop from Any Launcher:

Supported Emulators
SaveState automatically detects save data locations for a wide range of emulators:
| RetroArch ★ | Ryujinx | Yuzu | Rpcs3 |
| Dolphin ★ | DuckStation | PPSSPP | Citra |
| Azahar | mGBA | Snes9x | DeSmuME |
| Cemu | Flycast | ShadPs4 | SameBoy |
| PCSX2 * | Xenia | Eden (yuzu) | melonDS |
| Gopher64 | Citron | Vita3K | Mednafen/Mednaffe |
★ Enhanced integration with guided setup
* PlayStation 2 memory card functionality in SaveState utilizes and adapts code from the mymcplusplus project, which is based on mymc+ by Florian Märkl and the original mymc by Ross Ridge. The mymcplusplus source code is distributed under the GNU General Public License v3.0. SaveState, including these derived components, is also licensed under GPLv3.
How Save Search Works (Heuristics)
The following diagram illustrates the main steps that SaveState follows when attempting to locate a game's save folder:
Getting Started
Get SaveState up and running on your system.
Prerequisites
- Operating System: Windows (tested on Windows 10/11). Relies on Windows-specific libraries for shortcut handling.
- Operating System: Linux (tested on Ubuntu 24.x LTS)
- Python: Version 3.10 or higher recommended. (3.13 work fine)
- Pip: Python package installer (usually included with Python).
Installation
Option 1: Download Release (Recommended)
Windows
- Go to the Releases Page
- Download
SaveState_vX.X.X_Win.zip - Extract and run — no installation required!
Linux (AppImage)
- Go to the Releases Page
- Download
SaveState.tar.gz - Extract the
.AppImagefile - Make it executable:
chmod +x SaveState*.AppImage - Run it — no dependencies needed!
Option 2: Running from Source (for development or advanced users)
- Ensure you have Python 3.10+ and Git installed.
- Clone the repository:
git clone [https://github.com/Matteo842/SaveState.git](https://github.com/Matteo842/SaveState.git) - Navigate into the project directory:
cd SaveState - (Recommended) Create and activate a virtual environment:
python -m venv venv # On Windows .\venv\Scripts\activate # On Linux/macOS source venv/bin/activate - Install the required dependencies (see Dependencies section below):
(Note: You need to create thepip install -r requirements.txtrequirements.txtfile first!) - Run the application:
python main.py
Usage
- Launch
SaveState.exeor runpython main.py. - Configure Settings (Recommended on first launch): Click the Settings button. Set your desired Base Backup Path where all backups will be stored in subfolders named after your profiles. Adjust other settings like max backups, Maximum source size, etc.
- Add Profiles:
- Manually: Click New Manual Profile, enter a name, and provide the full path to the game's save folder.
- Steam: Click Manage Steam Games. Select a detected game and click Configure Selected Profile. The app will try to guess the save path; confirm or provide it manually.
- Minecraft: Click the Minecraft button. Select a world from the list and click OK. A profile will be created using the world name and its folder path.
- Drag & Drop: Drag a game's
.lnkshortcut file from your Desktop or elsewhere onto the main application window. The app will suggest a profile name and start searching for the save path; you'll be prompted to confirm or enter it manually. - Multi Profile: drop a
foldercontaining multiple games on the main window. You can visualize all the profile of the folder and delete the profile you don't need. Then you can add all the profile to the list.
- Manage Profiles:
- Select a profile in the list.
- Click Run Backup to back it up.
- Click Restore from Backup to restore from a previous backup.
- Click Manage Backup to view and delete specific backup archives for that profile.
- Click the Shortcut Icon button to create a shortcut on your Desktop for quick backups of that profile.
- Click Delete Profile to remove the profile entry (this does not delete existing backup files).
- Other Actions:
- Use Open Backup Folder to quickly open the base backup location in Explorer.
- Double Click on a profile to open the save path in Explorer.
- Toggle the Log Console visibility using the terminal icon button.
- Toggle the Theme using the sun/moon icon button.
Dependencies
This project relies on the following Python packages:
-
Required:
PySide6: For the graphical user interface (Qt for Python).winshell: Used for reading.lnkshortcut files and finding special Windows folders like the Desktop.pywin32: A dependency forwinshell(and used directly for creating shortcuts via COM). (Note: Installation might sometimes require specific steps or precompiled binaries depending on your Python setup).
-
Optional (for enhanced features):
vdf: Used to parse Valve's VDF/ACF files to get more accurate Steam game names and library information. If not installed, Steam detection will still work but might use less precise names.nbtlib: Used to read Minecraft'slevel.datNBT files to get the actual world names. If not installed, the world's folder name will be used as the profile name instead.thefuzz: It uses Levenshtein Distance to calculate the differences between sequences.
You can install all dependencies using pip. It is recommended to create a requirements.txt file with the following content:
PySide6
winshell
pywin32
vdf
nbtlib
thefuzz
And then run:
pip install -r requirements.txt
Development
No time to fate, save your state!
🔐 Code Signing & Security
This project is supported by the SignPath Foundation for free code signing.
The artifact is signed by SignPath.io using a certificate from the SignPath Foundation.
Legal
License
Distributed under the GNU General Public License v3.0. See the LICENSEfile for more information.





