# SFS-SELECT

a small tool to manage Steam Family Sharing
http://steamcommunity.com/groups/familysharing/discussions/0/540736965953254153/
(c) 2014-2018 by PsyBlade - all rights reserved

## ABOUT

When you get the same game from multiple sources steam selects which one to use. With often less than optimal results (i.e. chosing an much used source over a rarely used one). This makes an manual selection method desireable.

Despite customer complaints since fall 2013 this has not yet implemented by Valve. sfs-select tries to offer that possibility.

It allows you to temporatrily disable single sharing sources. That way you can disable a "in use" library in favor of unused ones. Additionally it can tweak the way steam uses to assign games to the active sources.

It has both a GUI (for casual use) and a CLI (scripting, desktop shortcuts, ...) mode. The full sourcecode (python 3) is included for everyone who is cautious, curious or wants to help.

## IMPORTANT

1. I have no idea what valve thinks of sfs-select, but since it's posted in their forum since spring 2014 it would be extremely easy to voice their oppinion.
2. sfs-select only allows you to reorder or temporarily disable a PC authorisation. It can not do anything else to them e.g. copy them to other PCs or create new ones.

## DOWNLOAD

Use a -full file for new installs. To update to a newer version simply copy the new files over the old ones. Updates form recent enough versions can be done with the smaller -update downloads too.

Be sure to read the included readme for further instructions.

## PRINCIPAL MODE OF OPERATION

The steam client stores a list of accounts which authorized this client (aka "machine"). It asks the server for permission to show and play games from these accounts. This list is stored in a plain text file called config/config.vdf. If you remove accounts from this list the cteam client will never ask for (and thus never recieve) permission to show that account. If you put an previosly deleted account back into the file it will work again. If you change the order it influences how source libraries are assigned to individual games. Those three things are everything sfs-select actually does.

If you want to you can even edit that file by hand instead. Information on how to do so is in manual-editing.txt. (Please refrain from adding random accounts that did not actually autorize you. The server won't grant permission anyway.)

## INSTALL

1. copy the sfs-select FOLDER into your steam folder
2. make a backup of Steam/config/config.vdf (thats the only steam file this tool edits)
3. if it complains about missing dlls you might need to install the Microsoft Visual C++ 2015 Redistributable Package (x86) e.g. https://www.microsoft.com/en-us/download/details.aspx?id=48145 but you probably have at least one game that has already installed it

## GUI USAGE

1. Stop Steam
2. run sfs-select/windows/sfs-select.exe
3. toggle checkboxes / change priority numbers
4. click OK
5. start Steam

## BASIC CLI USAGE

1. open command prompt
2. "cd" into sfs-select folder
3. "cd" into the windows folders
4. run "sfs-select.exe --list" to make sure it finds the steam config
5. run "sfs-select.exe --help" to get more up to date usage hints
6. Stop Steam
7. run sfs-select with whatever options you see fit
8. start Steam

### CLI HINTS

- --help prints a more complete parameter expalnation
- --list prints a list of the people you can get games from
- --enable / --disable manages individual shares
- --enable-others / --disable-others manages all other shares at once
- --high-priority / --low-priority manages source assignment priority
- you can use either the name or id to manage a share
- there are short (-e) and long (--enable) names for the same options
- you can manage multiple users at once by listing multiple
- you can list multiple options (even the same one if you want)

### EXAMPLES

sfs-select.exe
  start the gui
sfs-select.exe --list
  get a list of all lenders
sfs-select.exe --disable PsyBlade
  disable lending games from PsyBlade
sfs-select.exe --enable PsyBlade --disable Foo
  re-enable lending games from PsyBlade and disable from Foo
sfs-select.exe --enable Foo Bar --disable-others
  enable lending games from Foo and Bar, disable from everybody else
sfs-select.exe --high-priority blub
  to prefer blubs games when possible
sfs-select.exe --high-priority blah blub
  to place blah on highest, blub on second highest priority
sfs-select.exe --low-priority blub
  to place blub on lowest priority

## ADVANCED USAGE

- to create shortcuts on you Desktop that switch to your favorite settings
- use the CLI arguments in them to specify your wishes
- ! take care to stop steam before using them !

## NOTE ON PRIORITY CHANGES

sfs-select can change the priority order in which accounts are scanned for games. In general a game with multiple sources will be available from the sharing partner who comes first in the priority list. But because of how Steam does this it does not always work as expected.

In the Steam client you see individual games listed but thats not how steam handles that internally. Your account does not have any games assinged to it, instead it only has packages. A package can contain a single game or many of them. Basically it is a single item you put in the shopping cart or a single key you activated. When Steam starts it simply looks up which games belong to your packages and adds them to a the list of your games. A game can be in a lot of different packages: BatmanAAGotY for example came (among others) as a single Steam purchase, Batman+JustCause Steam bundle or a retail CDkey.

A full list of packages containing BatmanAAGotY can be seen at http://steamdb.info/app/35140/subs/ When assigning the game to a shared library Steam looks on this list. Starting with the lowest package id it scans all your sharing partners for that package. The first package that has at least one active partner wins. Unless you disable all of those partners you can only get the game from someone with that exact package. Of the active partners with this package Steam selects the one that comes first in the priority list.

In my case Batman+JustCause wins over the version retail. Since only one of my friends got that package BatmanAA gets assigned to him, no matter what priority the others with the retail version have.

Finding out who has which package is bit tricky. First you need the appid of the game you are want. Look at its store or commuinty page. The number in the url is the appid. For Batman its 35140. Now open a command line and cd to the folder where you installed sfs and run "sfs-select.exe --locate-source 35140" It will print a list of sharing partners with packages containing Batman. They are shown in the order in which steam trys to assign the game to them. Thus the topmost partner with sharing "on" will get it assigned to him. Note that the files sfs-select parses to find that info are only updated when that person logs in at your computer. Thus it can be severly out of date.

By default both CLI and GUI sort by priority. High priority == listed first == low number.

## FUTURE

If there is demand I can work out any kinks. I'm open to suggestions too.

## REQUIREMENTS OF PYTHON VERSION

(you don't need this for the exe version)

- python3
- python3-psutil
- python3-pyqt5