> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/dolphin-emu/dolphin/llms.txt
> Use this file to discover all available pages before exploring further.

# Graphics Mods

> Create and use graphics modifications to enhance games

## 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:

```json theme={null}
{
  "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:

```json theme={null}
{
  "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

<AccordionGroup>
  <Accordion title="EFB Targets">
    Embedded Frame Buffer textures created during rendering:

    ```json theme={null}
    {
      "type": "efb",
      "texture_filename": "efb1_n000007_160x120_6"
    }
    ```
  </Accordion>

  <Accordion title="Texture Targets">
    Game textures identified by hash:

    ```json theme={null}
    {
      "type": "texture",
      "texture_filename": "tex1_512x512_m_afdbe7efg332229e_14"
    }
    ```
  </Accordion>

  <Accordion title="Draw Started Targets">
    Trigger on specific draw calls:

    ```json theme={null}
    {
      "texture_filename": "tex1_512x512_m_afdbe7efg332229e_14",
      "type": "draw_started"
    }
    ```
  </Accordion>

  <Accordion title="Create Texture Targets">
    Trigger when a texture is created:

    ```json theme={null}
    {
      "texture_filename": "tex1_512x512_m_afdbe7efg332229e_14",
      "type": "create_texture"
    }
    ```
  </Accordion>
</AccordionGroup>

## Available Actions

### Skip Action

Skip rendering for targeted elements (HUD removal, effect removal):

```json theme={null}
{
  "features": [
    {
      "group": "HUD",
      "action": "skip"
    }
  ]
}
```

### Scale Action

Rescale textures independently on each axis:

```json theme={null}
{
  "features": [
    {
      "group": "Goop",
      "action": "scale",
      "action_data": {
        "X": 1.0,
        "Y": 1.0,
        "Z": 1.0
      }
    }
  ]
}
```

<Note>
  Scale values of 1.0 render textures at their native resolution regardless of internal resolution setting.
</Note>

## Complete Example

<CodeGroup>
  ```json Super Mario Sunshine - Native Resolution Goop theme={null}
  {
    "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
        }
      }
    ]
  }
  ```

  ```json Sonic Colors - Bloom Definitions theme={null}
  {
    "meta": {
      "title": "Bloom Texture Definitions",
      "author": "Silent Hell"
    },
    "groups": [
      {
        "name": "Bloom",
        "targets": [
          {
            "type": "efb",
            "texture_filename": "efb1_n000007_160x120_6"
          },
          {
            "type": "efb",
            "texture_filename": "efb1_n000009_80x60_6"
          },
          {
            "type": "efb",
            "texture_filename": "efb1_n000011_40x30_6"
          },
          {
            "type": "efb",
            "texture_filename": "efb1_n000013_20x15_6"
          }
        ]
      }
    ]
  }
  ```

  ```json Universal HUD Removal theme={null}
  {
    "meta": {
      "title": "Remove HUD",
      "author": "Dolphin Team",
      "description": "Skips drawing elements designated as the HUD. Can be used for taking screenshots or increasing immersion."
    },
    "features": [
      {
        "group": "HUD",
        "action": "skip"
      }
    ]
  }
  ```
</CodeGroup>

## Finding Texture Hashes

<Steps>
  <Step title="Enable Texture Dumping">
    Go to Graphics Settings > Advanced > Enable "Dump Textures"
  </Step>

  <Step title="Play the Game">
    Run the game and trigger the effects you want to modify
  </Step>

  <Step title="Locate Dumps">
    Find dumped textures in:

    ```
    User/Dump/Textures/GAMEID/
    ```
  </Step>

  <Step title="Use Filenames">
    The dumped texture filenames can be used directly as `texture_filename` values
  </Step>
</Steps>

## 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)

<Warning>
  Graphics mods can cause visual glitches if targets are incorrectly identified. Always test thoroughly.
</Warning>

## Related Topics

<CardGroup cols={2}>
  <Card title="Custom Pipelines" icon="code" href="/advanced/custom-pipelines">
    Replace pixel shaders with custom GLSL code
  </Card>

  <Card title="Dynamic Input Textures" icon="gamepad" href="/advanced/dynamic-input-textures">
    Generate controller button prompts dynamically
  </Card>
</CardGroup>
