Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/azahar-emu/azahar/llms.txt

Use this file to discover all available pages before exploring further.

Azahar can replace a game’s original textures at runtime with higher-resolution versions supplied by a texture pack. This allows community artists to dramatically improve the visual quality of 3DS games without modifying the game files themselves. The replacement happens transparently: the game runs normally and Azahar swaps in the custom texture whenever the matching original is requested by the renderer.

Supported file formats

The texture engine (video_core/custom_textures/custom_tex_manager.h) supports three file formats for replacement textures:
FormatExtensionNotes
PNG.pngUncompressed, widely supported, best for pack authoring
DDS.ddsSupports block-compressed formats (BC1, BC3, BC5, BC7)
KTX.ktxKhronos texture container, supports ASTC compression
Compressed formats (DDS/KTX) use less GPU memory and load faster but require additional tooling to create.

Texture file naming

Each replacement texture file must be named using the hash of the original texture it replaces. The standard naming pattern is:
tex1_<width>x<height>_<hash>_<format>.png
For example:
tex1_512x256_3F8A2C1D4B6E7890_14.png
  • <width> and <height> are the texture dimensions in pixels.
  • <hash> is a 64-bit hexadecimal identifier derived from the original texture data.
  • <format> is the numeric GPU texture format index.
Pack authors may also use a pack.json configuration file inside the pack folder to map custom filenames to texture hashes, which allows more human-readable filenames.

Where to place texture packs

Texture files must be placed in Azahar’s load directory, under a subfolder named after the game’s Title ID:
<user data folder>/load/textures/<TitleID>/
The Title ID is a 16-character uppercase hexadecimal string (e.g., 0004000000030800 for The Legend of Zelda: Ocarina of Time 3D). You can find a game’s Title ID in Azahar’s game list by right-clicking the title and selecting Properties. A typical pack layout looks like this:
load/
└── textures/
    └── 0004000000030800/
        ├── pack.json
        ├── tex1_512x256_3F8A2C1D_14.png
        └── tex1_128x128_A1B2C3D4_14.png

Enabling custom textures

1

Open Graphics settings

Select EmulationConfiguration, then navigate to the Graphics tab.
2

Enable the option

Check Use Custom Textures. This tells the renderer to look in the load directory for replacement textures when each texture is requested.
3

Optionally enable preloading

Check Preload Custom Textures to load all replacement textures into memory before the game starts. This eliminates in-game pop-in at the cost of longer startup times and higher RAM usage.
4

Launch the game

Start the game normally. Azahar will substitute custom textures as they are encountered.
Preloading large texture packs can consume several gigabytes of RAM. Azahar will abort preloading automatically if available memory runs low, falling back to on-demand loading.

Dumping original textures

To create your own texture pack or to identify the correct hash for a texture you want to replace, use the built-in texture dumper:
1

Enable texture dumping

In EmulationConfigurationGraphics, check Dump Textures.
2

Play the game

Run the game and navigate to the areas or menus that contain the textures you want to replace. Every texture the renderer encounters is saved to disk.
3

Locate the dumped files

Dumped textures are written to:
<user data folder>/dump/textures/<TitleID>/
Each file is named with the standard tex1_<width>x<height>_<hash>_<format>.png pattern, giving you the exact filenames needed for replacements.
4

Disable texture dumping

Turn off Dump Textures once you have captured what you need, as continuous dumping affects performance.

Finding community texture packs

Community-created texture packs for many popular 3DS titles are shared on forums and wikis dedicated to 3DS emulation. When downloading a pack, verify that it targets the correct game region and was created for Azahar or its upstream Citra emulator, as the hash format used by other emulators may differ.
A pack.json file in the texture folder can set options like skip_mipmap, flip_png_files, and use_new_hash. If a pack you downloaded does not load correctly, check whether its pack.json settings match what Azahar expects.

Build docs developers (and LLMs) love