Skip to content

murolem/steam-depot-diff

Repository files navigation

steam-depot-diff

A CLI diff utility for Steam depots.

Depots

Depots are packages shipped with each game (app) release. For example, a game might have 32-bit and 64-bit versions as its depots.

A depot can have many manifests. A manifest describes a version of a depot.

To find depots for a game, head to the game's SteamDB page > Depots (on Side panel) > pick a depot > Manifests (on side panel). Use the copy button on the manifest you want (preferably with DepotDownloader format) to copy it.

To create a diff, two manifests are needed. The base manifest is the version that will be at the bottom and the top manifest is the version that will be layed on top.

Requirements

Git (in PATH)

Usage

Note

This is a CLI utility, so to interact with the it you will need to use a terminal.

Grab the latest release matching your OS.

Assuming the name of the binary is depot-diff.

If on Linux, grant the execute permission first:

chmod +x ./depot-diff

To see available commands, run:

./depot-diff --help

Example output for the latest version:

usage: Steam Depot Differ [-h] [--version] [--branch BRANCH]
                          [--dd-args DD_ARGS] [--depots-path DEPOTS_PATH]
                          [--dd-path DD_PATH] [--redownload-dd]
                          [--diff-path DIFF_PATH] [--commit-diff] [--relogin]
                          [--creds-path CREDS_PATH]
                          app_or_depot_string_top depot_or_depot_string_base
                          [manifest_top] [manifest_base]

Downloads app depots and diffs changes between them.

positional arguments:
  app_or_depot_string_top
                        Application ID or TOP depot string. 
                        
                        If used as application ID, other positional arguments must be provided. 
                        Example: 722730
                        
                        If used as a depot string, a string enclosed in quotes containing information about the TOP app & depot & manifest must be provided in this singular argument.
                        TOP meaning the depot will be applied on TOP of another depot. 
                        BASE string is expected as the next positional argument.
                        This is useful for when copying depot strings straight from SteamDB.
                        
                        Examples:
                        NOTE: If using Steam console format and a branch depot, the branch MUST be specified with --branch
                        +-----------------+----------------------------------------------------------------------------------------------------------------------------------+
                        | Format          | Command                                                                                                                          |
                        +=================+==================================================================================================================================+
                        | Steam console   | ./depot-diff "download_depot 329130 329133 1446294067501623196" "download_depot 329130 329133 5541496194205663540"               |
                        |                 |                              ^app   ^depot ^manifest from                                     ^manifest to                       |
                        +-----------------+----------------------------------------------------------------------------------------------------------------------------------+
                        | DepotDownloader | ./depot-diff "-app 329130 -depot 329133 -manifest 1446294067501623196" "-app 329130 -depot 329133 -manifest 5541496194205663540" |
                        |                 |                    ^app          ^depot           ^manifest from                                            ^manifest to         |
                        +-----------------+----------------------------------------------------------------------------------------------------------------------------------+
  depot_or_depot_string_base
                        Depot ID or BASE depot string.
                        
                        If used as a depot ID, other positional arguments must be provided.
                        Example: 799601
                        
                        If used as a depot string, a string enclosed in quotes containing information about the BASE app & depot & manifest must be provided in this singular argument.
                        BASE meaning the other depot will be applied on TOP of this one. 
                        See first positional argument help for examples.
  manifest_top          Manifest ID of manifest to diff with. Example: 5090889475431819364 (default: None)
  manifest_base         Manifest ID of manifest to base the diff at. Example: 4892202388027804689 (default: None)

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

DEPOTS:
  --branch BRANCH       Download from specified branch if available. Public by default. Takes precedence over branch specified in depot string, if any. (default: None)
  --dd-args DD_ARGS     Additional args to pass to DepotDownloader for each depot download. (default: None)
  --depots-path DEPOTS_PATH
                        Directory path for storing depots. (default: depot-diff/depots)

DEPOT DOWNLOADER:
  --dd-path DD_PATH     DepotDownloader binary directory. Created and downloaded automatically from the official repo if missing. (default: depot-diff/DepotDownloader)
  --redownload-dd       Deletes existing DepotDownloader binary (if any) and downloads it again. (default: False)

DIFF:
  --diff-path DIFF_PATH
                        Directory path for diff process. This is where the diff will happen and can be viewed. (default: depot-diff/diff)
  --commit-diff         Commits the diff. May be preferred if viewing the commited changes vs uncommited is more convenient. (default: False)

CREDENTIALS:
  --relogin             Removes any saved Steam credentials. Useful if entered wrong. (default: False)
  --creds-path CREDS_PATH
                        Path to the file containing credentials. (default: depot-diff/your-credentials (DO NOT SHARE))

Source code: https://github.com/murolem/steam-depot-diff

Depot downloading

Using plain format

Let's take https://steamdb.info/depot/799603/manifests/

Format:

./depot-diff app depot manifest_top manifest_base

Example:

./depot-diff 799600 799603 2424067790439047639 2424067790439047639

If we want a particular branch, a --branch argument can be provided. For example, taking https://steamdb.info/depot/1022982/manifests/

Result:

./depot-diff 1022980 1022982 4145694655358607165 7534689703142416349  --branch arena_mode

Using Steam console format

Let's take https://steamdb.info/depot/1022982/manifests/

Warning

Steam console format does not support branches, so to specify a branch use --branch argument.

When using custom formats, each formatted string must be enclosed in quotes.

Format:

./depot-diff "download_depot app depot manifest-top" "download_depot app depot manifest-base"

Example using the copy button on SteamDB with Steam console as chosen format. First let's copy the first manifest (top) and add it to the command, enclosed in quotes:

./depot-diff "download_depot 1022980 1022982 4145694655358607165"

Then let's copy the second manifest (base) and add it to the end, also enclosed in quotes. Additionaly, let's manually specify the branch since the format doesn't support it.

Result:

./depot-diff "download_depot 1022980 1022982 4145694655358607165" "download_depot 1022980 1022982 7534689703142416349" --branch arena_mode

Using DepotDownloader format

Let's take https://steamdb.info/depot/1022982/manifests/

When using custom formats, each formatted string must be enclosed in quotes.

Format:

./depot-diff "-app app -depot depot -manifest manifest-top" "-app app -depot depot -manifest manifest-base"

Example using the copy button on SteamDB with DepotDownloader as chosen format. First let's copy the first manifest (top) and add it to the command, enclosed in quotes:

./depot-diff "-app 1022980 -depot 1022982 -manifest 4145694655358607165 -beta arena_mode"

Then let's copy the second manifest (base) and add it to the end, also enclosed in quotes.

Result:

./depot-diff "-app 1022980 -depot 1022982 -manifest 4145694655358607165 -beta arena_mode" "-app 1022980 -depot 1022982 -manifest 7534689703142416349 -beta arena_mode"

Diffing

The diff is automatically created after depots are downloaded.

To view the diff, use any tool that supports Git diffing. Something like VS Code will do.

See --help for options such as enabling commiting the top depot changes.

Development

Requirements

Python 3.9+

Setup

Note

All commands are only tested on Linux.

Install dependencies

pip install -r requirements.txt

Running

To run the script, run:

python ./main.py

Building

To build for current platform, run:

pyinstaller -F main.py --add-data VERSION:.

About

A CLI diff utility for Steam depots.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages