steam-vault
v1.0.3
Published
CLI tool to back up Steam screenshots to Microsoft OneDrive
Readme
SteamVault
If you take a lot of Steam screenshots, they're probably just sitting on your PC with no backup. One bad drive and they're gone.
SteamVault is a small CLI tool that automatically backs them up to OneDrive (more providers coming soon). Screenshots are sorted by game, duplicates are removed, and everything shows up nicely organized in your Photos library.

Features
- Automatically organizes screenshots into folders by game name
- Skips duplicates won't upload the same screenshot twice
- Screenshots show up correctly sorted in OneDrive Photos
- Auto-detects your Steam library on Windows
- Dry-run mode to preview before uploading
- Fast, uploads up to 5 files in parallel
Prerequisites
- Windows (requires
%APPDATA%and the Windows registry for Steam path detection) - Microsoft account with OneDrive access
- Node.js ≥ 20 – required for the npm version (includes auto-update notifications).
Alternatively: download the standalone.exe, no Node.js required, but no auto-updates. - Steam installed with at least one screenshot taken
Installation
npm install -g steam-vaultQuick Start
- Run
steamvaultin your terminal. - On first launch you'll be prompted to authenticate with Microsoft using a device code - open the URL shown in your browser and enter the code.
- SteamVault tries to auto-detect your screenshot directory. If it can't find it, you'll be prompted to enter the path manually. It should point to the
760/remotefolder inside your Steamuserdatadirectory, e.g.C:/Program Files (x86)/Steam/userdata/12345678/760/remote. - Select Backup Screenshots from the main menu.
CLI Flags
| Flag | Description |
| ----------- | ------------------------------------------------------ |
| --debug | Disable console clearing for easier debugging |
| --dry-run | Show what would be uploaded without actually uploading |
| --version | Print the version number and exit |
| --help | Show help |
Configuration
SteamVault stores its config at:
%APPDATA%/SteamVault/steamvault.config.json| Key | Description |
| --------------------- | ----------------------------------------------------------------------- |
| screenshotDirectory | Path to the Steam 760/remote screenshots folder |
| oneDriveBaseFolder | Name of the top-level folder in OneDrive (default: SteamVault) |
| oneDriveRootPath | OneDrive API root path (default: special/photos - your Photos folder) |
| entraClientId | Microsoft Entra application (client) ID |
| gameTitleCache | Path to the game title cache file |
| screenshotHashes | Path to the screenshot hash file |
| msalCache | Path to the MSAL authentication token cache |
| logDirPath | Directory for log files |
| backupPath | Temporary directory for EXIF backup copies |
Path values support the %APPDATA% placeholder, which is resolved at runtime.
Authentication
SteamVault uses the Microsoft device code flow:
- On first run the app displays a URL and a one-time code.
- Open the URL in any browser, sign in with your Microsoft account, and enter the code.
- Tokens are cached locally at
%APPDATA%/SteamVault/msal.cache.json- subsequent runs authenticate silently.
To log out, select Account => Logout from the main menu. This clears the token cache.
How It Works
Scan screenshot folders
↓
Resolve game titles (Steam API + cache)
↓
Hash each file (SHA-256)
↓
Skip already-uploaded duplicates
↓
Write EXIF metadata (DateTimeOriginal)
↓
Upload to OneDrive (up to 5 concurrent)
↓
Persist hash file to OneDriveOneDrive Structure
Screenshots are uploaded to your OneDrive Photos folder by default:
OneDrive/
└── Photos/
└── SteamVault/
├── Counter-Strike 2/
│ ├── 20240115120000_1.jpg
│ └── 20240115120001_1.jpg
├── Half-Life 2/
│ └── 20240201143000_1.jpg
└── screenshot.hashes.jsonThe base folder and root path are configurable in settings.
Troubleshooting
No screenshots found
- Make sure your screenshot directory is set correctly. Go to Settings => Set Screenshot Directory.
- The directory should point to the
760/remotefolder
inside your Steamuserdatadirectory (e.g.C:/Program Files (x86)/Steam/userdata/12345678/760/remote).
Authentication failure
- Check your internet connection.
- Try logging out (Account => Logout) and logging back in.
- If the device code expires, restart the app to get a new code.
APPDATA not set
- SteamVault requires the
%APPDATA%environment variable. This is set by default on Windows. If missing, set it manually or run from a standard Windows terminal.
"Unknown Game (appId)" folders
- Some Steam games get removed, split, or re-released over time (e.g. GTA V => Legacy Edition + Enhanced Edition). When that happens, the Steam Store API no longer returns a title for the original app ID.
- Your screenshots are still backed up normally, they just end up in a folder called
Unknown Game (12345)instead of the actual game name. - This is purely cosmetic. You can rename the folder in OneDrive at any time.
Windows SmartScreen warning when running the .exe
- Windows may flag the standalone
.exeas potentially dangerous because it is not code-signed. This is a false positive. - Click "More info" => "Run anyway" to proceed.
- Alternatively, install via
npm install -g steam-vaultto avoid this entirely.
Upload failures
- Uploads are retried up to 3 times automatically.
- Check the log files at
%APPDATA%/SteamVault/logsfor detailed error information. - Ensure your OneDrive has sufficient storage space.
Roadmap
- Additional cloud providers - support for Google Drive, Dropbox, and others beyond OneDrive
- Remote hash sync - compare remote and local hash files for portability across machines
- Partial backup - upload screenshots from selected games only
- Steam background recordings - back up video recordings in addition to screenshots
- Configurable upload concurrency - adjust the number of parallel uploads
- Multi-user support - handle multiple Steam user profiles
- Scriptable CLI - additional flags for non-interactive automation
Development
# Install dependencies
npm install
# Run in development mode (enables --debug flag)
npm run dev
# Lint
npm run lint
npm run lint:fix
# Type check
npm run typecheck
# Run tests
npm test
# Build standalone executable (requires Bun)
npm run buildDisclaimer
This project is not affiliated with, endorsed by, or associated with Valve Corporation or Steam. "Steam" is a trademark of Valve Corporation. All trademarks are the property of their respective owners.
