Cross-platform backup suite for Nuclear Throne saves with local and cloud (Google Drive) storage
- ✅ Local backups with configurable retention
- ☁️ Cloud backups to Google Drive (or any rclone remote)
- 🔄 Automatic pruning to manage storage
- 🎮 Integrated game launch workflow
- 💾 Cloud save restore with undo capability
- 🔒 Safe operations with locking and validation
- 🖥️ Cross-platform (Windows & macOS)
Nuclear Throne lol
PowerShell 7+
Windows: Direct Download
MacOS: Direct Download
pwsh (PowerShell 7), not powershell.exe (Windows PowerShell 5.1) or set PowerShell 7 as default program to open .ps1 files
OR
Windows:
winget install Microsoft.PowerShellmacOS:
brew install powershell/tap/powershell- rclone - The setup script will install this for you
Clone the repo or go to Code > Download ZIP
From the repository folder, run:
pwsh setup/setup.ps1The setup script will:
- ✅ Check your PowerShell version
- ✅ Detect your operating system
- ✅ Install rclone (if missing)
- ⚙️ Configure rclone for Google Drive
- 📁 Create backup directories
- ✅ Verify everything is ready
For convenience
When the setup script runs rclone config, follow these steps:
rcloneRemote in your config.json (default: "NTBackups")
1. Type: n (New remote)
e/n/d/r/c/s/q> n
2. Enter: NTBackups (or match whatever is in your config.json)
name> NTBackups
3. Type: 24 (Google Drive)
Storage> 24
4. Press Enter (leave empty for default)
client_id>
5. Press Enter (leave empty for default)
client_secret>
6. Type: 1 (Full access - recommended)
scope> 1
7. Press Enter (leave empty)
service_account_file>
8. Type: n (No)
Edit advanced config? y/n> n
9. Type: y (Yes)
Use web browser to automatically authenticate? y/n> y
🌐 10. Your browser will open - Sign in to your Google account and allow access.
11. Type: n (No, unless you specifically want Team Drive)
Configure this as a Shared Drive (Team Drive)? y/n> n
12. Type: y (Yes)
Keep this "NTBackups" remote? y/e/d> y
13. Type: q (Quit)
e/n/d/r/c/s/q> q
✅ Done! The setup will verify your connection.
Edit config.json to customize settings:
{
"localKeep": 5, // Number of local backups to keep
"cloudKeep": 10, // Number of cloud backups to keep
"downloadKeep": 5, // Downloaded backup retention
"mountKeep": 5, // Mount backup retention
"rcloneRemote": "NTBackups", // Your rclone remote name (must match what you created)
"rcloneFolder": "NTSaveBackups", // Folder within the remote (will be created automatically)
"pauseOnError": true // Wait for keypress on errors
}rcloneRemote= Your rclone remote name (e.g., "NTBackups")rcloneFolder= Folder name within that remote (e.g., "NTSaveBackups")- Full path =
NTBackups:NTSaveBackups(creates a "NTSaveBackups" folder in your Google Drive)
Creates local backup, uploads to cloud, then launches the game:
pwsh scripts/backup-and-run.ps1Create local backup only:
pwsh scripts/backup-local.ps1Upload to cloud (after local backup):
pwsh scripts/upload-cloud.ps1Prune old cloud backups:
pwsh scripts/prune-cloud.ps1Download and restore cloud save:
pwsh scripts/mount-save.ps1This will:
- Download the newest cloud backup
- Backup your current save to
backups/mount/ - Replace your active save with the cloud backup
Undo cloud restore (revert to previous save):
pwsh scripts/undo-mount.ps1Restores the save that was backed up before mounting a cloud save.
nt-save-suite/
├── config.json # Configuration file
├── .lock # Lock file (auto-managed)
├── setup/
│ └── setup.ps1 # Setup wizard
├── scripts/
│ ├── utils.ps1 # Shared utilities
│ ├── backup-local.ps1 # Local backup creation
│ ├── upload-cloud.ps1 # Cloud upload
│ ├── prune-cloud.ps1 # Cloud pruning
│ ├── backup-and-run.ps1 # Full backup + launch
│ ├── mount-save.ps1 # Cloud restore
│ └── undo-mount.ps1 # Restore previous save
└── backups/
├── local/ # Local backups
├── mount/ # Pre-mount backups
└── download/ # Downloaded cloud backups
- Windows:
%LOCALAPPDATA%\nuclearthrone\nuclearthrone.sav - macOS:
~/Library/Application Support/com.vlambeer.nuclearthrone/nuclearthrone.sav
Scripts use a .lock file to prevent concurrent operations. If a script crashes and leaves the lock file behind, manually delete it:
Remove-Item .lockAll backups use ISO timestamp format:
nuclearthrone_2026-02-13_14-30-45.sav
- Local and cloud backups are automatically pruned to configured limits
- Newest files are kept based on creation/modification time
- Pruning happens after each backup/upload operation
The remote name in your rclone config doesn't match what's in config.json.
Check what remotes you have:
rclone listremotesThen update config.json to match. For example, if you see NTBackups:, change:
"rcloneRemote": "NTBackups"Windows:
%APPDATA%\rclone\rclone.conf
(Usually: C:\Users\YourName\AppData\Roaming\rclone\rclone.conf)
macOS/Linux:
~/.config/rclone/rclone.conf
View your config:
rclone config fileYou have two options:
Option 1: Configure separately on each machine (Recommended)
Run rclone config on both machines using the same Google account. Each machine will have its own authentication but access the same Google Drive.
Option 2: Copy the config file
-
On your first machine, find the config:
rclone config file
-
Copy
rclone.confto the same location on your second machine -
Make sure config.json has the same
rcloneRemotename on both machines
cloudKeep backups total (not per machine).
You're using Windows PowerShell 5.1 (the default on Windows). You need PowerShell 7+.
Install it:
winget install Microsoft.PowerShellThen run with pwsh (not powershell.exe):
pwsh setup/setup.ps1Don't right-click and "Run with PowerShell". Instead, open a terminal and run:
pwsh setup/setup.ps1Another operation may be running, or a previous operation crashed. Manually delete .lock:
Remove-Item .lock -ForceEnsure you've played Nuclear Throne at least once. The save file is created after first launch.
Install rclone and ensure it's in your PATH:
- rclone downloads
- Add to PATH or use full path to rclone executable
Configure your rclone remote:
rclone configVerify connection:
rclone lsd NTBackups:Mount and undo operations will fail if Nuclear Throne is running. Close the game first.
| Setting | Description | Default |
|---|---|---|
localKeep |
Local backups to retain | 5 |
cloudKeep |
Cloud backups to retain | 10 |
downloadKeep |
Downloaded backups to retain | 5 |
mountKeep |
Mount backups to retain | 5 |
rcloneRemote |
rclone remote name | "NTBackups" |
rcloneFolder |
Folder within the remote | "NTSaveBackups" |
pauseOnError |
Wait for keypress on error | true |
Create your own automation by importing the utility library:
# Import utilities
. "scripts/utils.ps1"
try {
Lock-Operation
# Your custom logic here
$config = Get-Config
$savePath = Get-SavePath
# Use utility functions...
} finally {
Unlock-Operation
}Windows Task Scheduler:
pwsh -File "C:\path\to\ntbackupper\scripts\backup-local.ps1"macOS cron/launchd:
/usr/local/bin/pwsh /path/to/ntbackupper/scripts/backup-local.ps1To use different cloud providers:
- Configure additional rclone remotes
- Create separate config files (e.g.,
config-onedrive.json) - Modify scripts to accept config path parameter
- ✅ Lock file prevents concurrent operations
- ✅ Game running detection for mount/undo operations
- ✅ Save file validation (existence + non-zero size)
- ✅ Upload verification after cloud sync
- ✅ Automatic backup before mounting cloud saves
- ✅ Configurable error pause for debugging
This project is licensed under the MIT License - see the LICENSE file for details.
Nuclear Throne is a trademark of Vlambeer. This project is not affiliated with or endorsed by Vlambeer.
For issues or questions:
- Run setup to validate configuration:
pwsh setup/setup.ps1 - Check lock file status:
Test-Path .lock - Verify rclone connection:
rclone lsd <your-remote>: - Review script output for specific error messages