Skip to content

Custom Presets

oxGorou edited this page May 29, 2026 · 2 revisions

Custom Presets

The Custom Preset Editor lets you build your own ryzenadj argument sets from named, bounded parameters. Saved presets are stored in custom.json alongside config.ini and appear everywhere in the app alongside the built-in presets.

Full path on a standard install:

/opt/uxtu4linux/src/Assets/custom.json

Using the Editor

Open the editor from the main menu: Custom Preset

If you have existing presets, a picker appears first. Select one to edit it, or choose Create new preset to start from scratch.

Navigation

Key Action
1 2 3 4 Switch between sections (Temp / Power / VRM / iGPU)
/ Move between fields
Space Toggle a field on or off
/ Decrease / increase the value
S Save the preset
L Load a saved preset
D Delete a saved preset
Esc Go back (prompts to discard if unsaved changes exist)

A field must be enabled (shown with [✓]) to be included in the ryzenadj command. Disabled fields are ignored entirely.

You cannot save a preset with no fields enabled.

Sections and Parameters

[1] Temp - APU Temperature Tuning

Field ryzenadj flag Unit Default Range Description
APU Temp Limit --tctl-temp °C 95 10–105 Temperature limit at which the APU starts soft throttling
Skin Temp Limit --skin-temp-limit °C 45 8–105 Laptop chassis temperature limit at which the APU starts throttling

[2] Power - APU Power Tuning

Field ryzenadj flag Unit Default Range Description
STAPM Power Limit --stapm-limit W 28 5->300 Long-term skin-temperature-aware power limit
Slow Power Limit --slow-limit W 28 5->300 Slow boost duration power limit
Slow Boost Duration --slow-time s 128 2->1024 How long the APU stays in the slow boost window
Fast Power Limit --fast-limit W 28 5->300 Fast boost duration power limit
Fast Boost Duration --stapm-time s 64 2->1024 How long the APU stays in the fast boost window

All W values are automatically multiplied by 1000 (converted to mW) before being sent to ryzenadj.

[3] VRM - APU VRM Tuning

Field ryzenadj flag Unit Default Range Description
CPU TDC Limit --vrm-current A 64 8->300 CPU sustained current limit (Thermal Design Current)
CPU EDC Limit --vrmmax-current A 64 8->300 CPU peak current limit (Electrical Design Current)
SoC TDC Limit --vrmsoc-current A 64 8->300 SoC sustained current limit
SoC EDC Limit --vrmsocmax-current A 64 8->300 SoC peak current limit
GFX TDC Limit --vrmgfx-current A 64 8->300 iGPU sustained current limit
GFX EDC Limit --vrmgfxmax_current A 64 8->300 iGPU peak current limit

All A values are automatically multiplied by 1000 (converted to mA) before being sent to ryzenadj.

Some flags may not be supported on all APU families. Unsupported flags are silently skipped by ryzenadj.

[4] iGPU - iGPU Clock Tuning

Field ryzenadj flag Unit Default Range Description
Max iGPU Clock --max-gfxclk MHz 1000 200->4000 Hard ceiling on iGPU boost clock
Min iGPU Clock --min-gfxclk MHz 200 200->4000 Floor frequency for the iGPU

iGPU clock changes require a system reboot or sleep/wake cycle to revert to firmware defaults.


custom.json Format

The file is a JSON array. Each entry is an object with a name key and one key per parameter.

[
  {
    "name": "my_preset",
    "tctl_temp":        { "enabled": true,  "value": 90 },
    "skin_temp_limit":  { "enabled": true,  "value": 45 },
    "stapm_limit":      { "enabled": true,  "value": 25 },
    "slow_limit":       { "enabled": true,  "value": 25 },
    "slow_time":        { "enabled": false, "value": 128 },
    "fast_limit":       { "enabled": true,  "value": 30 },
    "stapm_time":       { "enabled": false, "value": 64 },
    "vrm_current":      { "enabled": true,  "value": 50 },
    "vrmmax_current":   { "enabled": true,  "value": 60 },
    "vrmsoc_current":   { "enabled": false, "value": 64 },
    "vrmsocmax_current":{ "enabled": false, "value": 64 },
    "vrmgfx_current":   { "enabled": false, "value": 64 },
    "vrmgfxmax_current":{ "enabled": false, "value": 64 },
    "max_gfxclk":       { "enabled": false, "value": 1000 },
    "min_gfxclk":       { "enabled": false, "value": 200 }
  }
]

Fields:

Key Type Description
name string Internal identifier. The app displays this as <name> and stores it in config.ini as <name>_custom_preset
<param>.enabled boolean Whether this parameter is included in the ryzenadj command
<param>.value integer Value in the unit shown in the editor (W, A, °C, or MHz not mW/mA)

Values are clamped to their defined range on load, so out-of-range values in the file are silently corrected.


How Presets Are Applied

When a custom preset is selected, the app builds a ryzenadj argument string from all enabled fields and passes it to the daemon. The conversion to mW/mA happens at build time, the stored values in JSON are always in the human-readable unit (W, A).

Example: a preset with stapm_limit = 25 (W) produces --stapm-limit=25000 in the ryzenadj command.


Behaviour When a Preset Is Deleted

  • If the deleted preset is the active one in Power Management, the app automatically resets [User] mode to Balance and applies it.
  • If the deleted preset is referenced in either Automations slot, that slot is cleared to (None).
  • If both Automations slots end up empty after the deletion, the override is automatically disabled.
  • The daemon is notified of all changes immediately, no restart required.

Resetting

Delete the file to clear all custom presets:

rm /opt/uxtu4linux/src/Assets/custom_presets.json

An empty file is recreated automatically on the next launch.

Clone this wiki locally