Is there a way to set a custom Steam Download speed?
As of October 7th, 2020, you can now specify an exact speed simply by inputting the amount you desire. Go to Steam → Settings → Downloads and in the "Download Restrictions" part of the window, check the "Limit Bandwidth to" checkbox and input the amount you wish (in KB/s). 4500 KB/s would equate to 4.5 MB/s.
I found (and slightly redacted) this solution on SuperUser, which was copied verbatim from Reddit, whence it was sourced from the Steam community:
Go into your Steam directory, and open the config directory [C:\Program Files (x86)\Steam\config by default.]
Go into the config directory and open the "config.vdf" file.
Find the
DownloadThrottleKbps
setting, and set it to the desired speed (take the amount in Mb/s you want to set it to, and multiply it by 8000 - e.g. 4.5 Mb/s makes36000
).Save the file, open Steam, and verify that it is working.
Make sure to set the "config.vdf" file to 'Read-only'. Steam changes the file on start-up and exiting (when set to be run as administrator).
Note that the file contains more settings, so customizing other settings might require the file to have the 'Read-only' flag disabled.
Works with the New Steam Library update
Based on the answer by Joachim, I created a little Python script that sets the DownloadThrottleKbps in the config.vdf file, so you don't need to redo it manually everytime the setting gets overwritten. Recommended use: create a shortcut to the script with the bandwidth in Kbit/s as first the argument.
Example: To set a bandwidth limit of 4.5MB/s, in the shortcut's properties, edit the Target of the shortcut as: C:\path\to\bandwidth-limit-script.py 36000
Note 1: Close Steam before running this.
Note 2: I hardcoded the path to C:\Program Files (x86)\Steam\config\config.vdf, so change that line of code if you've installed Steam to a custom location.
Note 3: I used f-strings so you need Python 3.6 or higher.
# Set Steam download bandwidth limit (for Windows)
import argparse
from time import sleep
# Config
configpath = "C:\\Program Files (x86)\\Steam\\config\\config.vdf"
throttlestr = "DownloadThrottleKbps"
# Make the user at least see error messages when launched from a shortcut
# Please don't judge me for my lazy exceptions XD
try:
# Parse bandwidth argument
parser = argparse.ArgumentParser(description='Set Steam download bandwidth limit in Windows.')
parser.add_argument('bandwidth', metavar='bandwidth', type=int, nargs=1,
help='Bandwidth limit in Kbit/s. 0 = no limit.\n\
Recommended use: create a shortcut to the script with bandwidth as first the argument.')
args = parser.parse_args()
bandwidth = args.bandwidth[0]
except:
input('Press Enter to exit')
exit()
try:
# Open config file
with open(configpath, 'r') as f:
contents = f.readlines()
# Find DownloadThrottleKbps line
for n in range(len(contents)): # Loop over lines of config
if throttlestr in contents[n]: # Check for 'DownloadThrottleKbps'
contents[n] = f'\t\t\t\t"{throttlestr}"\t\t"{bandwidth}"\n' # Replace line
break # Exit loop
# Write new config to file file
with open(configpath, 'w') as f:
f.writelines(contents)
except:
input(f'Error during file access of {configpath}\nPress Enter to exit')
exit()
print(f'Steam bandwidth limit was set to {bandwidth} Kbit/s')
sleep(1)