-
-
Notifications
You must be signed in to change notification settings - Fork 5
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
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.
| 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.
[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.
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.
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.
- If the deleted preset is the active one in Power Management, the app automatically resets
[User] modetoBalanceand 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.
Delete the file to clear all custom presets:
rm /opt/uxtu4linux/src/Assets/custom_presets.jsonAn empty file is recreated automatically on the next launch.