Skip to main content

Overview

Graphics mods allow content creators to modify Dolphin’s internal graphics pipeline and rendering behavior. These modifications can skip rendering effects, scale textures, replace shaders, and more.

Graphics Mod Structure

Graphics mods are defined using JSON metadata files placed in:
Dolphin User Directory/Load/GraphicMods/GAMEID/metadata.json

Basic Metadata Format

Every graphics mod requires metadata with title, author, and description:
{
  "meta": {
    "title": "Bloom Removal",
    "author": "Dolphin Team",
    "description": "Skips drawing bloom effects. May be preferable when using a bloom solution from Dolphin's post processing shaders or a third party tool."
  },
  "features": [
    {
      "group": "Bloom",
      "action": "skip"
    }
  ]
}

Target Groups

Targets identify specific textures or draw calls to modify. Define groups before referencing them in features:
{
  "groups": [
    {
      "name": "Goop",
      "targets": [
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_32x32_1"
        },
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_64x64_1"
        },
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_128x128_1"
        }
      ]
    }
  ]
}

Target Types

Embedded Frame Buffer textures created during rendering:
{
  "type": "efb",
  "texture_filename": "efb1_n000007_160x120_6"
}
Game textures identified by hash:
{
  "type": "texture",
  "texture_filename": "tex1_512x512_m_afdbe7efg332229e_14"
}
Trigger on specific draw calls:
{
  "texture_filename": "tex1_512x512_m_afdbe7efg332229e_14",
  "type": "draw_started"
}
Trigger when a texture is created:
{
  "texture_filename": "tex1_512x512_m_afdbe7efg332229e_14",
  "type": "create_texture"
}

Available Actions

Skip Action

Skip rendering for targeted elements (HUD removal, effect removal):
{
  "features": [
    {
      "group": "HUD",
      "action": "skip"
    }
  ]
}

Scale Action

Rescale textures independently on each axis:
{
  "features": [
    {
      "group": "Goop",
      "action": "scale",
      "action_data": {
        "X": 1.0,
        "Y": 1.0,
        "Z": 1.0
      }
    }
  ]
}
Scale values of 1.0 render textures at their native resolution regardless of internal resolution setting.

Complete Example

{
  "meta": {
    "title": "Native Resolution Goop",
    "author": "Techjar",
    "description": "Scales goop maps to draw at their native resolution, regardless of internal resolution. Results in goop having more rounded off edges rather than looking very blocky at higher resolutions."
  },
  "groups": [
    {
      "name": "Goop",
      "targets": [
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_64x64_1"
        },
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_128x128_1"
        },
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_256x256_1"
        },
        {
          "type": "efb",
          "texture_filename": "efb1_n000000_512x512_1"
        }
      ]
    }
  ],
  "features": [
    {
      "group": "Goop",
      "action": "scale",
      "action_data": {
        "X": 1.0,
        "Y": 1.0,
        "Z": 1.0
      }
    }
  ]
}

Finding Texture Hashes

1

Enable Texture Dumping

Go to Graphics Settings > Advanced > Enable “Dump Textures”
2

Play the Game

Run the game and trigger the effects you want to modify
3

Locate Dumps

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

Use Filenames

The dumped texture filenames can be used directly as texture_filename values

Game-Specific vs Universal Mods

Game-specific mods are placed in folders named after Game IDs:
  • SMNE01 - New Super Mario Bros. Wii (NTSC)
  • GZ2E01 - The Legend of Zelda: Twilight Princess (GC, NTSC)
Universal mods work across regions using partial IDs:
  • SMN - New Super Mario Bros. Wii (All regions)
  • GZ2 - Twilight Princess GC (All regions)
Graphics mods can cause visual glitches if targets are incorrectly identified. Always test thoroughly.

Custom Pipelines

Replace pixel shaders with custom GLSL code

Dynamic Input Textures

Generate controller button prompts dynamically