A .NET 9 command-line tool to discover and download Steam library artworks (capsules, heroes, logos, headers) for a given app. It uses SteamKit2 to fetch app product info anonymously and constructs direct CDN URLs.
- No API key or login needed
- Supports fetching a single artwork, listing available artworks, and batch downloads from CSV
You can install the dotnet tool:
# Example (when published)
dotnet tool install -g SteamFetch
# Then run
steam_fetch --helpTop-level syntax:
steam_fetch [command] [options]Available commands:
available— List available artworks (types, variants, languages) for an appsingle— Fetch a single artwork for an appbatch— Process a CSV of multiple app/artwork specs and download each
Use --help on any command to see details, e.g. steam_fetch single --help.
List available artworks (types, variants, languages) for an app and show their URLs.
steam_fetch available <appid> [--filter-type <TYPE>]<appid>: Steam App ID (e.g., 570 for Dota 2)--filter-type: Optional type filter (e.g.,library_capsule,library_hero,library_logo,library_header)
Example:
steam_fetch available 570
steam_fetch available 570 --filter-type library_capsuleOutput shows a table with columns: Type, Variant, Language, URL. The URL is clickable in supported terminals, and the display text is shortened (relative path) when possible.
Notes:
- Non-image metadata entries under
library_logosuch aslogo_positionare filtered out.
Fetch a single artwork by type, variant, and language. Either prints the URL or downloads the file if an output path is provided.
steam_fetch single <appid> <type> <variant> <language> [-o|--output <OUTPUT>]<appid>: Steam App ID<type>: Artwork type (e.g.,library_capsule,library_hero,library_logo,library_header)<variant>: Artwork variant (commonlyimageorimage2x)<language>: Language key (e.g.,english,schinese,tchinese,japanese)-o|--output <OUTPUT>: File path or directory to save the image. If omitted, the URL is printed.
Examples:
# Print URL only
steam_fetch single 570 library_capsule image2x english
# Download into current directory, inferring filename from URL
steam_fetch single 570 library_capsule image2x english -o ./
# Download to a specific file
steam_fetch single 570 library_hero image english -o ./art/dota2-hero-en.jpgTips:
- If
--outputpoints to a directory (or ends with/or\), the filename is inferred from the URL. - Some combinations (e.g.,
library_logo/logo_position) are metadata and not image URLs; the tool will warn you.
Process multiple downloads from a CSV. The CSV must have exactly 4 columns per row:
AppId,BaseSpec,FallbackSpec,OutputPath
AppId— Steam App ID (unsigned integer)BaseSpec— The primary spec to try firstFallbackSpec— A secondary spec to try if the base spec isn’t found. May be emptyOutputPath— File or directory path to save the result
Spec syntax for BaseSpec/FallbackSpec:
<type>:<variant>[:<language>]
- Language defaults to
englishwhen omitted - Common
variantexamples:image,image2x
Examples of CSV rows (comma-delimited):
570,library_capsule:image2x:english,,./out/
730,library_hero:image,library_capsule:image2x,./out/
440,library_logo:image2x:english,,./logos/
Usage:
# From a file
steam_fetch batch apps.csv
# From stdin
cat apps.csv | steam_fetch batch
# With a custom delimiter (e.g., semicolon)
steam_fetch batch apps.csv --delimiter ';'Behavior:
- The tool enforces exactly 4 columns per row; invalid rows are skipped with a warning
FallbackSpecmay be empty. If the base spec returns no artwork, the fallback spec is tried- If
OutputPathis a directory (or ends with/or\), the filename is inferred from the URL - A live table is displayed showing progress and results; clickable file links are shown when downloads succeed
What values can you use for <type>, <variant>, and <language>? Use available to list them for a specific appid:
steam_fetch available 570That output is your authoritative reference. Typical values include:
- Types:
library_capsule,library_hero,library_logo,library_header - Variants:
image,image2x(varies per type) - Languages: Steam language keys like
english,schinese,tchinese,japanese,spanish, etc.
If a combination isn’t found, single and batch will report no artwork or try the fallback.