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
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
Super Mario Sunshine - Native Resolution Goop
Sonic Colors - Bloom Definitions
Universal HUD Removal
{
"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
Enable Texture Dumping
Go to Graphics Settings > Advanced > Enable “Dump Textures”
Play the Game
Run the game and trigger the effects you want to modify
Locate Dumps
Find dumped textures in: User/Dump/Textures/GAMEID/
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