Retrieves the Steam CDN URLs for CS:GO Item Images from their market_hash_name or properties.
Can retrieve CDN images for:
- Stickers
- Characters
- Graffiti (without tint)
- Weapons (and doppler phases)
- Music Kits
- Tools (Crate Keys, Cases, Stattrak Swap Tool, etc...)
- Status Icons (Pins, ESports Trophies, Map Contribution Tokens, Service Medals, etc...)
Steam hosts all of the CS:GO resource images on their CDN, but unfortunately finding the URL for them was difficult in the past and would require scraping the market or inventories.
This library allows you to retrieve the needed CDN URLs given the sticker name, which can save you lots in bandwidth and prevents you from having to scrape it or host it yourself.
Most of the graphical resources for CSGO are stored in VPK files which include the sticker, music kit, tools, and status icon images.
The root of a VPK contains a dir file (pak01_dir.vpk) that specifies where files are located over multiple packages. If you look in
the install directory of CS:GO, you'll see pak01_003.vpk, pak01_004.vpk, etc... where these files are located.
Thankfully, Valve was kind enough (as of writing this) to include all of the relevant images in a packages
which are only ~13GB.
This library, using DepotDownloader, gets all require VPK files from the public branch of CS2. It will only download the VPK files that have changed since the last update, and will only download the relevant VPK files for the options you have enabled.
It then Extracts the real images from the VPK files and stores them in a data directory via the command line interface of Source 2 Viewer.
When trying to retrieve a CDN image URL for a given item, the library takes the SHA1 hash of the image and the VPK path that links to it to generate the corresponding URL.
import SteamUser from 'steam-user';
import CSGOCdn from './index.js';
const user = new SteamUser();
const cdn = new CSGOCdn(
user,
{
logLevel: 'debug'
}
);
cdn.on('ready', () => {
console.log(cdn.getItemNameURL('M4A4 | 龍王 (Dragon King) (Field-Tested)'));
console.log(cdn.getItemNameURL('★ Karambit | Gamma Doppler (Factory New)', cdn.phase.emerald));
});client- node-steam-user Clientoptions- Options{ directory: 'data', // relative data directory for VPK files updateInterval: 30000, // seconds between update checks, -1 to disable auto-updates logLevel: 'info', // logging level, (error, warn, info, verbose, debug, silly) stickers: true, // whether to obtain the vpk for stickers patches: true, // whether to obtain the vpk for patches graffiti: true, // whether to obtain the vpk for graffiti musicKits: true, // whether to obtain the vpk for music kits cases: true, // whether to obtain the vpk for cases tools: true, // whether to obtain the vpk for tools statusIcons: true, // whether to obtain the vpk for status icons }
marketHashName- The market hash name of an item (ex. "Sticker | Robo" or "AWP | Redline (Field-Tested)")phase- Optional weapon phase for doppler skins from thephaseenum property
Note: If the item is a weapon, you can omit the wear (ex. AWP | Redline)
Ensure that you have enabled the relevant VPK downloading for the item category by using the options in the constructor.
Returns the 'large' version of the image.
stickerName- Name of the sticker path fromitems_game.txt(ex. cluj2015/sig_olofmeister_gold)large- Whether to obtain the large version of the image
statusIconName- Name of the Status Icon fromitems_game.txt(ex. cologne_prediction_gold)large- Whether to obtain the large version of the image
stickerName- Name of the patch path fromitems_game.txt(ex. case01/patch_phoenix)large- Whether to obtain the large version of the image
defindex- Definition index of the item (ex. 7 for AK-47)paintindex- Paint index of the item (ex. 490 for Frontside Misty)
Parsed items_game.txt file as a dictionary
Parsed csgo_english file as a dictionary. Also contains all inverted keys, such that the values are also keys themselves for O(1) retrieval.
Parsed items_game_cdn.txt file as a dictionary
Doppler phase enum used to specify the phase of a knife
cdn.getItemNameURL('★ Karambit | Gamma Doppler (Factory New)', cdn.phase.emerald);
cdn.getItemNameURL('★ Huntsman Knife | Doppler (Factory New)', cdn.phase.blackpearl);
cdn.getItemNameURL('★ Huntsman Knife | Doppler (Factory New)', cdn.phase.phase1);
cdn.getItemNameURL('★ Flip Knife | Doppler (Minimal Wear)', cdn.phase.ruby);
cdn.getItemNameURL('★ Flip Knife | Doppler (Minimal Wear)', cdn.phase.sapphire);Emitted when csgo-cdn is ready, this must be emitted before using the object