each Steam game you have which uses Steam Cloud saves has a specific quota for storage, this quota varies quite a bit, but some games have quite a lot of quota:
- BeamNG.drive: 953.67 MiB
- Disco Elysium: 93.13 GiB
- Euro Truck Simulator 2: 93.13 GiB
- Severed Steel: 93.13 GiB
- Star Wars Jedi Knight: Jedi Academy: 9.31 GiB
- Valheim: 93.13 GiB
chances are you don't have more than a few dozen megabytes of saves in any of these⦠so what if you could use the rest for nearly-free, general cloud storage?
Steam Cloud Drive
huh turns out this is trivially easy to take advantage of, you can just put a file into the saves folder for a game and it'll sync it
anyway i now have several gigabytes of old photos backed up in disco elysium's saves folder. if i could be bothered i'd write a script to sum all the available space across all my games and write data to it, but it's almost 4am and valve would probably ban me for it anyway
I was curious this morning and did some data gathering:
- You can get Steam's full app list from the
ISteamApps/GetAppListweb API - Further, using the
steamPython library, you can request full product info, which includes the quota information - Finally, written to disk, you end up with 437.4 MB of data about all Steam's apps
so what does this data tell us? (all values at the time of writing, obviously; this will change as games are added to the platform)
- The absolute maximum Steam Cloud storage for a given user who owns every item on Steam (so, Valve employees and possibly some journalists with blanket access) is 191,986,735,934,656 bytes, or approximately 192 terabytes
- The average Steam Cloud quota for all items on Steam is 6,961,085,421 bytes, or approximately 7 gigabytes
- The average Steam Cloud quota for all items on Steam which don't have a quota of 0 (which may be a misconfiguration or mean more complex rules are in play) is 7,453,769,302 bytes, or approximately 7.5 gigabytes
I don't currently have a script to load data for owned games, so let's extrapolate using the averages, shall we?
I own 480 games on Steam, according to my community profile š°, 480 times 7,453,769,302 bytes is 3,577,809,264,960 bytes, so roughly 3.5 terabytes
here's my code to retrieve all the product data, requires the result of the GetAppList request saved to data/applist.json and steam installed from pip:
#!/usr/bin/env python3
import json
from steam.client import SteamClient
import sys
def main() -> int:
client = SteamClient()
client.anonymous_login()
with open('data/applist.json') as applist_file:
json_appdata = json.loads(applist_file.read())
appids = [app['appid'] for app in json_appdata['applist']['apps']]
product_data = client.get_product_info(apps=appids, timeout=None)
with open('data/product_info.json', 'w') as product_info_file:
product_info = json.dumps(product_data)
product_info_file.write(product_info)
if __name__ == '__main__':
sys.exit(main())
and finally, I used these jq incantations to compute the values above:
cat data/product_info.json | jq "[.apps[].ufs.quota | select(. != null and . != \"\") | tonumber] | add"
cat data/product_info.json | jq "[.apps[].ufs.quota | select(. != null and . != \"\") | tonumber] | add / length"
cat data/product_info.json | jq "[.apps[].ufs.quota | select(. != null and . != \"\" and . != \"0\") | tonumber] | add / length"
