# How to Configure RenoDX: Complete Guide to Settings, Presets, and Devkit Setup

> Learn how to configure RenoDX with our complete guide. Master ReShade INI settings, presets, and devkit setup for live shader development. Optimize your visual experience now.

- Repository: [Carlos Lopez/renodx](https://github.com/clshortfuse/renodx)
- Tags: how-to-guide
- Published: 2026-09-06

---

**RenoDX configuration happens through ReShade INI files, an in-game overlay, and optional MCP-based devkit tools for live shader development.**

This guide covers all configuration paths for the `clshortfuse/renodx` toolkit—from basic overlay tweaks to advanced preset management and live shader inspection workflows.

## Where RenoDX Configuration Lives

All settings persist in ReShade's configuration system. RenoDX uses a **global name prefix** (`renodx`) to organize its INI sections and keys.

```cpp
// From src/utils/settings.hpp
static std::string global_name = "renodx";

```

This prefix appears in:
- The main INI section `[renodx]`
- Preset sections `[renodx-preset1]`, `[renodx-preset2]`, `[renodx-preset3]`
- Runtime key lookups via `reshade::set_config_value`

The INI file location depends on your ReShade installation, typically `<ReShade-config-folder>/renodx.ini`.

## The Settings Overlay

RenoDX exposes its configuration through a ReShade-native overlay. Access it with your configured ReShade hotkey (default: `Home` or `Insert`).

### How Settings Work

Each configurable value is a **`Setting` struct** defined in [`src/utils/settings.hpp`](https://github.com/clshortfuse/renodx/blob/main/src/utils/settings.hpp). A setting binds together:
- **`.key`** – the INI key name (e.g., `debug_showFPS`)
- **`.binding`** – pointer to the live variable
- **`.default_value`** – fallback when no INI entry exists
- **`.label`** – display name in the overlay
- **`.section`** – grouping category in the UI
- **`.min` / `.max`** – value clamping range
- **`.format`** – printf-style display format

The `OnRegisterOverlay` function builds the UI from all registered settings. Changes trigger `SaveSettings()` automatically; the `.Write()` method calls `reshade::set_config_value` to persist.

```cpp
// Typical INI layout
[renodx]
debug_showFPS=1
debug_someFlag=0
render_scale=1.0

[renodx-preset1]
debug_showFPS=0
render_scale=1.5

```

## Working with Presets

RenoDX includes a **three-slot preset system** (plus preset 0, "Off").

### Using Presets in the UI

- Move the **"Preset" slider** to switch between active configurations
- Modify any setting—the **Save** button appears to commit changes to the current preset
- Click the **reset icon** (↺) on any setting to restore its default value

### Preset Storage Mechanics

Presets map to INI sections by index:

| Preset Slider Position | INI Section |
|------------------------|-------------|
| 0 (Off) | `[renodx]` only |
| 1 | `[renodx-preset1]` |
| 2 | `[renodx-preset2]` |
| 3 | `[renodx-preset3]` |

When you switch presets, `LoadSettings()` reads values from the corresponding section. Preset 0 always refers to the global `[renodx]` section with no preset-specific overrides.

### Programmatic Preset Control

```cpp
// Load a specific preset by name
renodx::utils::settings::LoadSettings("my_custom_preset");

// Reset all non-global settings to defaults
renodx::utils::settings::ResetSettings();

```

## Adding Custom Settings

Extend the overlay with your own configuration options using the `Setting` struct or helper macros.

### Full Setting Definition

```cpp
static Setting my_speed_setting{
    .key = "my_speed",
    .binding = &my_speed_variable,      // float* that receives updates
    .default_value = 1.0f,
    .label = "Speed multiplier",
    .section = "Gameplay",
    .min = 0.1f,
    .max = 5.0f,
    .format = "%.2f"
};
settings->push_back(&my_speed_setting);

```

### Integer Toggle Example

```cpp
static Setting my_toggle{
    .key = "my_toggle",
    .binding = &my_toggle_var,
    .default_value = 0,
    .value_type = renodx::utils::settings::SettingValueType::INTEGER,
    .labels = {"Off", "On"},            // String labels for 0 and 1
    .section = "Gameplay",
    .max = 1,
    .format = "%s"
};
settings->push_back(&my_toggle);

```

### Debug Setting Macro

For quick debug flags without full struct setup:

```cpp
// Adds a debug float called "debug_myFlag", auto-bound to MyFlag variable
auto* debug_setting = AddDebugSetting(my_injection, MyFlag);
settings->push_back(debug_setting);

```

All custom settings automatically appear in the overlay, save to INI, and respect preset boundaries.

## Runtime Setting Updates

Modify settings programmatically without the overlay:

```cpp
// Update "debug_showFPS" to 0 (off) at runtime
renodx::utils::settings::UpdateSetting("debug_showFPS", 0.0f);

```

This updates both the bound variable and persists to INI via the same `Write()` path.

## Devkit and MCP Configuration

For live shader development, RenoDX provides a **devkit addon** and **MCP bridge** that operate outside the standard overlay system.

### Building the Devkit Components

```powershell
cmake --preset clang-x64
cmake --build --preset clang-x64-debug --target devkit mcp_bridge

```

This produces `renodx-devkit-addon.dll` and `renodx-mcp-bridge.exe` in your build output.

### Configuring the MCP Bridge

Connect your editor or AI assistant to the bridge. Example VS Code configuration in [`.vscode/mcp.json`](https://github.com/clshortfuse/renodx/blob/main/.vscode/mcp.json):

```json
{
  "servers": {
    "renodx": {
      "command": "C:\\Mods\\renodx\\build\\Debug\\renodx-mcp-bridge.exe",
      "args": []
    }
  }
}

```

### Essential MCP Commands

| Command | Purpose |
|---------|---------|
| `devkit_set_live_shader_path <path>` | Point to editable HLSL folder (e.g., `src/games/<game>/`) |
| `devkit_set_resource_clone <hash> true` | Enable HDR-preserving resource cloning |
| `devkit_list_draws` | Enumerate current frame draw calls |
| `devkit_get_shader <hash>` | Retrieve shader source for inspection |
| `devkit_analyze_resource <hash>` | Analyze texture/buffer properties |

Full command reference and workflow patterns are documented in [[`docs/DEVKIT_MCP.md`](https://github.com/clshortfuse/renodx/blob/main/docs/DEVKIT_MCP.md)](https://github.com/clshortfuse/renodx/blob/main/docs/DEVKIT_MCP.md).

## Key Configuration Files

| Path | Role |
|------|------|
| [`src/utils/settings.hpp`](https://github.com/clshortfuse/renodx/blob/main/src/utils/settings.hpp) | Core `Setting` struct, overlay registration, preset logic |
| [`docs/DEVKIT_MCP.md`](https://github.com/clshortfuse/renodx/blob/main/docs/DEVKIT_MCP.md) | Complete MCP command reference and setup guide |
| [`CMakePresets.json`](https://github.com/clshortfuse/renodx/blob/main/CMakePresets.json) | Build configurations for devkit/bridge compilation |
| `scripts/setup-dev-env.ps1` | Environment bootstrap (tools, dependencies) |

## Summary

- **RenoDX configuration** centers on ReShade INI files with the `renodx` global name prefix
- **Three presets** (1-3) store alternate configurations in `[renodx-presetX]` sections
- **Custom settings** use the `Setting` struct or `AddDebugSetting` macro for automatic UI integration
- **Runtime control** via `UpdateSetting()`, `LoadSettings()`, and `ResetSettings()`
- **Devkit workflow** requires building the addon and MCP bridge, then configuring paths through MCP commands per [`DEVKIT_MCP.md`](https://github.com/clshortfuse/renodx/blob/main/DEVKIT_MCP.md)

## Frequently Asked Questions

### Where is the RenoDX INI file located?

The file name and location depend on your ReShade installation. Typically it's [`renodx.ini`](https://github.com/clshortfuse/renodx/blob/main/renodx.ini) in your ReShade configuration folder, alongside other addon configs. Check ReShade's "Settings" tab for the active config path.

### How many presets does RenoDX support?

RenoDX exposes **three active presets** (1-3) plus preset 0 which represents "no preset"—reading directly from the global `[renodx]` section without preset-specific overrides.

### Can I create settings that don't appear in the overlay?

No—all `Setting` objects registered in the `settings` vector appear in the overlay by design. For hidden/internal values, manage them as plain C++ variables without binding them to the settings system.

### Do I need the devkit for basic RenoDX configuration?

No. The devkit and MCP bridge are **only required for live shader development**—editing HLSL source, inspecting draw calls, and resource analysis. Standard gameplay configuration works entirely through the ReShade overlay and INI files.