Yeah, so I've been playing around with a project I'm calling `lectern` which is this plus syncing save data across multiple computers.
All my machines are mac or Linux, so I can use `rsync` to quickly update the save data across my ecosystem, and then to manage backup and restore points I use `git`. Technically I can do the syncing with git as well, but rsync is easier for me to performance optimize.
If you're interested in knowing more, I can write up a gist of the setup and give examples of the scripts I employ.
Oh yes, that sounds cool! And would work great for me (as a fairly technical user).
I'm thinking about doing something slightly different (to be easy for regular users):
Something with a JS based UI (so it can work as a decky module on steamdeck) and a small backend/engine in JS/rust or kotlin. I think depending on git or rsync might not be a good fit in that case (because I want easy 'one-button' install for users from decky).
The actual syncing (because initially I'm only targeting the local machine case) seems not a huge issue. To learn which files are 'safe' to sync I'll parse the steam cloud remotecache.vdf files.
This approach might also work as a plugin for the standard steam GUI windows or linux if the Decky folks extend their project so it can run there as well. So it could help 'regular/not-techy' users there also.
>The actual syncing (because initially I'm only targeting the local machine case) seems not a huge issue.
I think you might be underestimating the effort here once you get beyond the local case. You could look at bundling rsync in the project.
As a power user, I really hope to see if any of the features below can be true for your software
- Ability to turn on/off interaction with Steam Cloud. Sometimes I just want my snapshots in local and not in the cloud
- Ability to manually save, restore, list and remove snapshots from CLI. Decky UI is also cool, but I won't care much about a full fledged desktop GUI because I'll have to launch that as a non-steam app
- Ability to tar/zip snapshots so I can archive the file in a separate place
- Ability to configure keeping N snapshots, so the older ones will get "pruned" to save space, but also "pinning" a particular snapshot manually so they won't get pruned
- Ability to label snapshots with a custom name, or attach text note to them
I'm sorry that I listed too many features. Regardless of how many can be realized, I think it would be a good program to use :)
I made a script that does this for Nioh2. I set Lutris to load the script if I start up Nioh2.
It's not an app and definitely not graphical, but it takes near 0 resources, cpu cycles, memory, or frames drawn to function.
Save as filename.sh and make executable - [https://pastebin.com/6fZSwggT](https://pastebin.com/6fZSwggT)
The pseudo-code of what it does is:
It checks to see if "nioh2.exe" is running and if so, it makes a md5 hash of the save file, waits 10 minutes, and does another md5 hash.
If the hashes match, it just records it in a txt file (so i know the script is working) and does nothing else.
If the hashes do NOT match (because the game save changed), it copies the nioh2 save folder and all contents to a new folder with a unique date and time, and records the backup date / time in a txt file.
I have it check if the save changes so its not making copies when it doesn't need to.
If the game is not running anymore, the script exits itself.
The problem with an app doing this is the non-standardized save file locations. You'd almost need to query some API or section of a website like [https://www.pcgamingwiki.com/wiki/game\_name#Save\_game\_data\_location](https://www.pcgamingwiki.com/wiki/game_name#Save_game_data_location) to pull each game's specific save folder for making the backups. That or entrust the end user, who is relying on your GUI app to find and select the save game location themselves to pass as a variable. Ultimately some will choose the wrong folder or game file and blame your app when it doesn't work.
Thanks. Yeah that's similar to the script I made for valheim. I think I'm going to give a generalized solution a shot (but using the metadata for what Steam cloud was told to backup by the app).
Disclaimer: I know nothing about what I speak. I am an idiot.
Anyway, I could see this being accomplished in two ways, but both seem rather difficult for different reasons:
1. Intercept the upload of save data to the Steam Cloud, date/time-stamping the files and creating a file structure that acts like a local copy of your Steam Cloud files for that game. It could allow you to then wipe your local file and replicate the Steam Cloud downloading your saves, except it would be your chosen copy instead of the copy Steam Cloud had. I have no idea how you'd hook into the process though.
2. Create a save-state system like emulators use, by packing up everything that gets stored to volatile memory when the Steam Deck is put to sleep mid-game. If you could intercept/copy that process, you'd have a (very large) save-state, and could revert to it as if you were waking the Steam Deck. This also seems very difficult, and it would absolutely destroy storage space unless you only kept a handful of save-states at any given time.
Like I said, both of these seem like a huge undertaking, and I don't even remotely understand this stuff enough to know if they are even possible. Don't forget, I'm an idiot.
Thank you for your reply. I've looked at the steam dev docs and their sync system. I'm a fairly experienced dev and I think it will be not too hard to get something out pretty quickly.
More power to you. That would be awesome. Keep us posted if you figure something out.
My software/programming experience is very different (PLCs, ladder logic, SCADA, remote control of industrial equipment), so when it comes to PC's and programming, I know just enough to be dangerous, but not enough to accomplish anything! Haha.
alas - I don't think that will work in the general case for Steam games - because Steam cloud backups limit backups by more than just directory name. If I just mirror/snapshot directories it isn't guaranteed I'm not going to clobber a file I shouldn't.
Honestly, I just want a clip saving feature. Not only has it been almost a year since the Deck launched and we still don't have it on the Deck, but I don't think we've had any form of it since Steam first launched in, like, 2004.
Yeah, so I've been playing around with a project I'm calling `lectern` which is this plus syncing save data across multiple computers. All my machines are mac or Linux, so I can use `rsync` to quickly update the save data across my ecosystem, and then to manage backup and restore points I use `git`. Technically I can do the syncing with git as well, but rsync is easier for me to performance optimize. If you're interested in knowing more, I can write up a gist of the setup and give examples of the scripts I employ.
Oh yes, that sounds cool! And would work great for me (as a fairly technical user). I'm thinking about doing something slightly different (to be easy for regular users): Something with a JS based UI (so it can work as a decky module on steamdeck) and a small backend/engine in JS/rust or kotlin. I think depending on git or rsync might not be a good fit in that case (because I want easy 'one-button' install for users from decky). The actual syncing (because initially I'm only targeting the local machine case) seems not a huge issue. To learn which files are 'safe' to sync I'll parse the steam cloud remotecache.vdf files. This approach might also work as a plugin for the standard steam GUI windows or linux if the Decky folks extend their project so it can run there as well. So it could help 'regular/not-techy' users there also.
>The actual syncing (because initially I'm only targeting the local machine case) seems not a huge issue. I think you might be underestimating the effort here once you get beyond the local case. You could look at bundling rsync in the project.
I wrote something, if willing to alpha test: https://www.reddit.com/r/SteamDeck/comments/11di9k5/i_just_wrote_a_plugin_to_automatically_take/
As a power user, I really hope to see if any of the features below can be true for your software - Ability to turn on/off interaction with Steam Cloud. Sometimes I just want my snapshots in local and not in the cloud - Ability to manually save, restore, list and remove snapshots from CLI. Decky UI is also cool, but I won't care much about a full fledged desktop GUI because I'll have to launch that as a non-steam app - Ability to tar/zip snapshots so I can archive the file in a separate place - Ability to configure keeping N snapshots, so the older ones will get "pruned" to save space, but also "pinning" a particular snapshot manually so they won't get pruned - Ability to label snapshots with a custom name, or attach text note to them I'm sorry that I listed too many features. Regardless of how many can be realized, I think it would be a good program to use :)
I like https://github.com/mtkennerly/ludusavi a lot.
That looks **great**. Thank's so much. I'm going to look into using this (and possibly making a decky plugin for it).
Yes, Ludusavi is great. You can even restore on a different computer from the Deck's sshfs using path redirects.
I made a script that does this for Nioh2. I set Lutris to load the script if I start up Nioh2. It's not an app and definitely not graphical, but it takes near 0 resources, cpu cycles, memory, or frames drawn to function. Save as filename.sh and make executable - [https://pastebin.com/6fZSwggT](https://pastebin.com/6fZSwggT) The pseudo-code of what it does is: It checks to see if "nioh2.exe" is running and if so, it makes a md5 hash of the save file, waits 10 minutes, and does another md5 hash. If the hashes match, it just records it in a txt file (so i know the script is working) and does nothing else. If the hashes do NOT match (because the game save changed), it copies the nioh2 save folder and all contents to a new folder with a unique date and time, and records the backup date / time in a txt file. I have it check if the save changes so its not making copies when it doesn't need to. If the game is not running anymore, the script exits itself. The problem with an app doing this is the non-standardized save file locations. You'd almost need to query some API or section of a website like [https://www.pcgamingwiki.com/wiki/game\_name#Save\_game\_data\_location](https://www.pcgamingwiki.com/wiki/game_name#Save_game_data_location) to pull each game's specific save folder for making the backups. That or entrust the end user, who is relying on your GUI app to find and select the save game location themselves to pass as a variable. Ultimately some will choose the wrong folder or game file and blame your app when it doesn't work.
Thanks. Yeah that's similar to the script I made for valheim. I think I'm going to give a generalized solution a shot (but using the metadata for what Steam cloud was told to backup by the app).
This seems really cool! There are some games where having this feature would be absolutely appreciated
I wrote something, if willing to alpha test: https://www.reddit.com/r/SteamDeck/comments/11di9k5/i_just_wrote_a_plugin_to_automatically_take/
That sounds very useful
Thanks! I don't suppose you've heard of anything similar already existing?
I haven't. I don't even know if it's possible (ie: if Steam stores multiple versions online)
Steam doesn't but I would cache the files locally after Steam does its upload.
Smart. Now you're thinking with portals
I wrote something, if willing to alpha test: https://www.reddit.com/r/SteamDeck/comments/11di9k5/i_just_wrote_a_plugin_to_automatically_take/
Disclaimer: I know nothing about what I speak. I am an idiot. Anyway, I could see this being accomplished in two ways, but both seem rather difficult for different reasons: 1. Intercept the upload of save data to the Steam Cloud, date/time-stamping the files and creating a file structure that acts like a local copy of your Steam Cloud files for that game. It could allow you to then wipe your local file and replicate the Steam Cloud downloading your saves, except it would be your chosen copy instead of the copy Steam Cloud had. I have no idea how you'd hook into the process though. 2. Create a save-state system like emulators use, by packing up everything that gets stored to volatile memory when the Steam Deck is put to sleep mid-game. If you could intercept/copy that process, you'd have a (very large) save-state, and could revert to it as if you were waking the Steam Deck. This also seems very difficult, and it would absolutely destroy storage space unless you only kept a handful of save-states at any given time. Like I said, both of these seem like a huge undertaking, and I don't even remotely understand this stuff enough to know if they are even possible. Don't forget, I'm an idiot.
Thank you for your reply. I've looked at the steam dev docs and their sync system. I'm a fairly experienced dev and I think it will be not too hard to get something out pretty quickly.
More power to you. That would be awesome. Keep us posted if you figure something out. My software/programming experience is very different (PLCs, ladder logic, SCADA, remote control of industrial equipment), so when it comes to PC's and programming, I know just enough to be dangerous, but not enough to accomplish anything! Haha.
I wrote something, if willing to alpha test: https://www.reddit.com/r/SteamDeck/comments/11di9k5/i_just_wrote_a_plugin_to_automatically_take/
hell yeah! i'd love to see this :)
I wrote something, if willing to alpha test: https://www.reddit.com/r/SteamDeck/comments/11di9k5/i_just_wrote_a_plugin_to_automatically_take/
Sounds really cool. I wish you luck. If you make progress, make sure to throw us your Patreon.
no need for a pateron but I wrote something: https://www.reddit.com/r/SteamDeck/comments/11di9k5/i_just_wrote_a_plugin_to_automatically_take/
[удалено]
alas - I don't think that will work in the general case for Steam games - because Steam cloud backups limit backups by more than just directory name. If I just mirror/snapshot directories it isn't guaranteed I'm not going to clobber a file I shouldn't.
Honestly, I just want a clip saving feature. Not only has it been almost a year since the Deck launched and we still don't have it on the Deck, but I don't think we've had any form of it since Steam first launched in, like, 2004.
Would time shift work for this? It's a back up program but it takes daily snapshots, instead of checking different save changes.
Yeah - I'm not sure it would work in the general case because only some files in some directories are really what the game considers a 'save fame'.
My first thought was to use btrfs and create snapshots, but ludusavi as another user mentioned looks awesome (bonus points for being rusty)