Skip to content

Reward Portrait Extraction

koliva8245 edited this page Jun 2, 2026 · 1 revision

Overview

The reward portraits are not found in the game data. They are dynamically downloaded when Heroes of the Storm is running. The default paths where they are downloaded to are:

Windows: C:\ProgramData\Blizzard Entertainment\Battle.net\Cache
macOS: /Users/<username>/Blizzard/Battle.net/Cache

The image files (.wafl files) are located two directory levels down, in subdirectories based on the file name. All file names are a SHA-256 hash of the files themselves. The first directory is the first two characters and the next directory is the next two characters.

These image files are not the individual reward portraits but the texture sheets containing multiple portraits.

To extract the reward portraits from the texture sheets, the rewardportraitdata.json file will be used.

Getting Started

Two things are needed: the texture sheet files in the Battle.net cache, and the rewardportraitdata.json file. The reward portrait data file can be obtained with the -e, --extractor option.

Extracting the reward portraits from the texture sheets requires manually matching the texture sheets to the proper texture sheet image name found in the rewardportraitdata.json file.

Note

Before beginning, to ensure that the latest and correct texture sheets are being found, either rename the cache folder or completely delete it. Then start Heroes of the Storm and wait on the main menu for it to download all files. To confirm all files are downloaded, go to the portrait collection.

To start the portrait extraction, begin with the Auto-Extract section; otherwise, go to Manual Extraction.

Auto-Extract

The portrait extract-auto command works by reading from the config-files/portrait-auto-extract.xml file (or from another file set by the --xml-config option). This file contains a collection of the portrait texture sheet image names along with the original texture sheet file name (the hash name). The Zero element is the name of the first portrait icon in the texture sheet (slot 0). It's used to help confirm the correct texture sheet.

Note

The hash file names are from the US region and might be different for other regions.

Run the command and wait for it to finish.

Depending on the output messages, the command may not have extracted all images from the texture sheets. If not all images were extracted, that means manual extraction is required for the rest.

Manual Extraction

Depending on whether the auto-extract was performed successfully or not, this step may take anywhere from a little to a long time to complete.

First run the portrait battlenet-cache command. This will copy the necessary files from the Battle.net cache to an output directory and convert them to the proper file extension.

The output directory will be known as the texture sheet directory. The original files in the Battle.net cache will not be used from this point on.

Run the portrait extract command. Do not add the -i, --texture-sheet-image and -c, --cache-texture-sheet-image options.

After entering the textureSheet.image from the rewardportraitdata.json file, a table of the Slot, Name, and Id will be displayed for the entered textureSheet.image. If no names appear, then that data file has had its gamestrings extracted.

It will then prompt for the texture sheet image file path, which is a file name in the texture sheet directory. To find this file, use the previously displayed table to assist in visually matching the correct file in the texture sheet directory.

Once found and entered, the reward portraits will be extracted.

Clone this wiki locally