Skip to main content

Overview

Resource Packs provide a standardized way to package, distribute, and manage custom textures for games. They use ZIP archives with metadata to enable easy installation, priority management, and removal.

Specification Version

This documentation covers Resource Pack Specification v2, which adds compression support. Version 1 packs are also supported.

Pack Structure

resource-pack.zip
├── manifest.json
├── logo.png (optional)
└── textures/
    └── GAMEID/
        ├── texture1.png
        ├── texture2.png
        └── ...

Game ID Directories

The GAMEID folder name determines which games use the pack:
  • Full Game ID: SMNE01 (New Super Mario Bros. Wii, NTSC)
  • Region-agnostic: SMN (New Super Mario Bros. Wii, all regions)
  • Multiple directories: Create multiple GAMEID folders for multi-game packs

Manifest File

Required Fields

name
string
required
Display name of your texture pack
id
string
required
Alphanumeric identifier (used for internal tracking)
version
string
required
Version string (any format)

Optional Fields

description
string
Description of what the pack does
authors
array
List of author names
website
string
URL to pack website (must include protocol: https://)
compressed
boolean
v2 only: Allows ZIP compression (default: false)
If set to true, future versions that load textures directly from packs may not support your pack.

Example Manifest

{
  "name": "My Texture Pack!",
  "id": "my-texture-pack-by-doe",
  "version": "2",
  "authors": ["John Doe", "Jane Doe"],
  "website": "https://example.com/my-texture-pack",
  "description": "A cool texture pack made by me!",
  "compressed": true
}
Manifests missing required fields will not load. Validate your JSON before packaging.

Logo Image

Requirements

  • Format: PNG only
  • Dimensions: Maximum 256×256 pixels
  • Alpha channel: Supported (transparency allowed)
  • Location: logo.png in ZIP root

Usage

The logo displays in Dolphin’s Resource Pack manager, helping users identify your pack visually.

Texture Files

Naming Convention

Texture filenames must match Dolphin’s dumped texture names:
tex1_256x256_m_a1b2c3d4e5f67890_14.png
efb1_n000007_160x120_6.png

Finding Texture Names

1

Enable Texture Dumping

Graphics Settings > Advanced > “Dump Textures”
2

Play Game

Run the game and trigger the textures you want to replace
3

Locate Dumps

Find textures in:
User/Dump/Textures/GAMEID/
4

Use Exact Names

Custom textures must use the exact same filenames as dumped textures

Supported Formats

  • PNG: Primary format, supports transparency
  • DDS: DirectDraw Surface (advanced)

Compression

Version 1 Behavior

v1 packs must be uncompressed (store-only mode) or they will fail to load.
Create uncompressed ZIPs using:
  • 7-Zip: Select “Store” compression level
  • Command line: zip -0 -r pack.zip *

Version 2 Behavior

With "compressed": true in manifest, standard ZIP compression is allowed:
# Standard compression
zip -r pack.zip manifest.json logo.png textures/

# Or with 7-Zip GUI
# Select "Normal" or "Maximum" compression

Installation

User Installation

  1. Copy ZIP file to:
    Dolphin User Directory/ResourcePacks/
    
  2. Open Dolphin Resource Pack Manager
  3. Enable the pack

Installation Location

Windows:
C:\Users\<username>\Documents\Dolphin Emulator\ResourcePacks\
macOS:
~/Library/Application Support/Dolphin/ResourcePacks/
Linux:
~/.local/share/dolphin-emu/ResourcePacks/

Activation Process

When a resource pack is activated:
  1. Dolphin copies textures from pack.zip/textures/ to:
    User/Load/Textures/GAMEID/
    
  2. Higher priority packs overwrite files from lower priority packs
  3. Textures remain in place until pack is deactivated

Priority System

Resource packs have user-defined priority order in the manager:
  • Higher position = Higher priority
  • Conflicts resolved by taking the higher-priority pack’s file
  • Change order by dragging packs in the manager
Activate “Load Custom Textures” in Graphics Settings > Advanced for packs to take effect.

Deactivation Process

When a resource pack is deactivated:
  1. Dolphin removes the pack’s texture files from Load/Textures/
  2. If a lower-priority pack provides the same texture, it remains (was already overwritten)
  3. If no other pack provides a texture, it’s deleted
Always deactivate packs through the Resource Pack Manager. Manual file deletion can leave orphaned files.

Conflict Resolution

When multiple packs provide the same texture:
  1. Higher priority pack wins
  2. Lower priority files are not copied (overwritten)
  3. Changing priority re-copies files in new order

Example

Pack A (Priority 1): texture1.png, texture2.png
Pack B (Priority 2): texture2.png, texture3.png

Result:
  texture1.png → from Pack A
  texture2.png → from Pack B (higher priority)
  texture3.png → from Pack B

Legacy Migration

If you have pre-resource-pack custom textures:
  1. Dolphin detects them on first run with Resource Pack feature
  2. Creates legacy.zip containing all unassigned custom textures
  3. legacy.zip appears as a resource pack in the manager
  4. Manage like any other pack

Creating a Pack

1

Prepare Textures

Create or obtain replacement texture files (PNG format)
2

Organize Structure

Create folder structure:
MyPack/
├── manifest.json
├── logo.png
└── textures/
    └── GAMEID/
        └── [texture files]
3

Write Manifest

Create manifest.json with required fields:
  • name
  • id
  • version
4

Create Logo (Optional)

Design a 256×256 PNG logo
5

Create ZIP

For v1 (uncompressed):
zip -0 -r MyPack.zip manifest.json logo.png textures/
For v2 (compressed):
zip -r MyPack.zip manifest.json logo.png textures/
Add "compressed": true to manifest
6

Test

Copy to ResourcePacks/ folder and enable in Dolphin

Distribution

Best Practices

  • Compress with v2: Use "compressed": true for smaller downloads
  • Include readme: Add installation instructions for users
  • Version properly: Increment version for updates
  • Host reliably: Use stable hosting for website URL
  • License clearly: Include license information for textures

File Size Tips

  • Optimize PNGs with tools like pngcrush or optipng
  • Use appropriate texture resolution (don’t over-scale)
  • Remove unused textures from pack
  • Test compressed vs uncompressed trade-offs

Troubleshooting

  • Verify all required manifest fields present
  • Check JSON syntax (use validator)
  • Ensure ZIP isn’t corrupted
  • For v1: Verify ZIP is uncompressed (store-only)
  • Enable “Load Custom Textures” in Graphics Settings
  • Verify pack is activated (checked) in Resource Pack Manager
  • Check texture filenames match dumped names exactly
  • Ensure Game ID folder name is correct
  • Check pack priority order in manager
  • Higher packs override lower packs
  • Deactivate conflicting packs to test
  • Deactivate pack first (uncheck in manager)
  • Wait for deactivation to complete
  • Then delete ZIP file
  • Manually clean Load/Textures/ if needed

Dynamic Input Textures

Create controller-aware button prompt textures

Graphics Mods

Modify rendering behavior beyond textures