-
-
Notifications
You must be signed in to change notification settings - Fork 60
Troubleshooting Settings Startup GPU
This page covers three classes of problem that share a root cause in how Sucrose stores state outside its own JSON files: settings that appear to reset themselves, autostart that won't turn off (because it's a Task Scheduler task, not a registry Run key), and GPU/black-screen issues tied to the Windows per-app GPU-preference registry key. For renderer/runtime problems, see Troubleshooting-Common.
- Settings reset themselves or won't save
- A setting change doesn't persist
- Autostart won't turn off
- GPU preference & black-screen issues
- Where state actually lives (quick map)
Sucrose stores all of its configuration as small JSON files under %AppData%\Sucrose\Setting\, one file per category (General.json, Engine.json, Portal.json, Library.json, Backgroundog.json, Update.json, Hook.json, Cycling.json, System.json, Warehouse.json, Aurora.json, Objectionable.json, Kernel.json, Donate.json). There is no monolithic config file.
Every settings manager runs a self-healing check (ControlFile) when it loads a file. If a settings file is missing, empty, or invalid JSON, it is automatically reset to an empty document ({ "Properties": {} }). So if a file got truncated (for example by a power loss mid-write, or a bad hand-edit), Sucrose silently restores defaults for that category on next read. This is intentional and prevents a corrupt file from crashing the app — but it looks like "my settings disappeared." See Settings-Persistence.
Fix: if you have a backup, use Settings → System → Setting Backup → Import to restore your *.json files. See Backup-Restore-Reset.
The JSON shape is a single object with one Properties dictionary:
{
"Properties": {
"Culture": "EN",
"AppVisible": true,
"WallpaperVolume": 100
}
}When editing by hand, keep these rules in mind:
-
Enums are stored as their string name, not their integer. For example a
PerformanceTypevalue is written as"Close", not0. Use the member name. See Settings-All-Keys. -
Out-of-range numbers are silently clamped on read (not rewritten). If you put
WallpaperVolume: 250it is read back as100; the file is not corrected on disk. - Stray doubled braces (
{{/}}) are stripped defensively on read/write, but malformed JSON beyond that triggers the auto-reset above. - Close all Sucrose processes before editing (see Backup-Restore-Reset), because the app may rewrite the file.
If you change a value in the Portal (or by hand) and it reverts:
-
The write may have failed silently. All settings writes swallow exceptions (
catch { }). A file that is locked or permission-denied silently fails to persist — no error is shown. Causes include the file being open in another program, a read-only attribute, antivirus/controlled-folder-access locking%AppData%\Sucrose, or a roaming-profile sync conflict. See Settings-Persistence.-
Fix: close any program holding the file, clear the read-only attribute, and exclude
%AppData%\Sucrosefrom controlled-folder-access / aggressive AV scanning.
-
Fix: close any program holding the file, clear the read-only attribute, and exclude
-
Cross-process contention. Reads and writes are guarded by a named mutex keyed to the MD5 of each file path, so the many Sucrose processes don't corrupt each other. This is safe, but if a process hangs holding the mutex, writes can stall — fully exit Sucrose (all
Sucrose*processes) and retry. See Single-Instance-Mutexes. - It was clamped/normalized. As above, out-of-range values are clamped, and enums are normalized to their canonical member name on read — so the saved value may differ from what you typed. See Settings-All-Keys.
There are two different autostart mechanisms, and the right removal step depends on which one you used. The mode is the Application Startup option on the General settings page (RunStartup): 0=None, 1=Normal, 2=Priority, 3=Scheduler.
| Startup mode | Mechanism | Where it lives |
|---|---|---|
1=Normal |
Per-user Run key (Commandog Startup) |
HKCU\...\CurrentVersion\Run |
2=Priority |
Machine/priority startup (Commandog StartupM/StartupP) |
Run key / approved startup |
3=Scheduler |
Windows Task Scheduler (Commandog Scheduler) |
Scheduled task, not a registry Run key |
When you choose Scheduler, Sucrose creates a Windows Task Scheduler task:
-
Task name:
Autorun for Sucrose -
Description:
Sucrose Wallpaper Engine -
Folder: the
\Sucrose\task folder (or the root folder, depending on the creating command) - Trigger: logon trigger scoped to the current user
- Settings: does not stop on battery, no execution time limit
Because this is not a registry Run entry, disabling startup items in Task Manager's Startup tab will not remove it. To remove a stuck autostart:
- Set Application Startup to
Nonein Settings → General (preferred — this issues the CommandogSchedulerDelete command), or - Open Task Scheduler, find and delete the Autorun for Sucrose task (check both the root and the
\Sucrose\folder).
See Theme-Tray-Startup, Settings-General, Commandog-Dispatcher, and Automation-Examples.
Beyond the Windows DirectX GPU-preference key described below, Sucrose stores no settings in the registry. That one key is Windows' own per-app GPU setting.
-
Key:
HKEY_CURRENT_USER\Software\Microsoft\DirectX\UserGpuPreferences -
Format: a semicolon-delimited string per app path, e.g.
GpuPreference=<n>; -
Driven by: the
Engine.GraphicPreferencesetting (HighPerformanceby default). Sucrose writes this so its engine processes use the chosen adapter.
When a black screen or wrong-GPU rendering correlates with multi-GPU laptops (integrated + discrete):
- Toggle Hardware Acceleration in Settings → Wallpaper (default
true) and re-apply the wallpaper. See Troubleshooting-Common. - In Windows Settings → System → Display → Graphics, set the Sucrose engine executables (e.g.
Sucrose.Live.CefSharp.exe,Sucrose.Live.MpvPlayer.exe,Sucrose.Live.WebView.exe) to your preferred GPU. This edits the sameUserGpuPreferenceskey. - If the value is wrong, you can clear the relevant
GpuPreferenceentries under that registry key and let Sucrose re-write them.
See Data-Locations for the full registry/file map and Engine-Comparison for which engines are GPU-heavy.
flowchart LR
Portal["Portal / settings managers"] -->|writes| Settings["Settings JSON<br/>%AppData%/Sucrose/Setting/*.json<br/>(auto-reset if corrupt)"]
Cmd["Commandog Scheduler command"] -->|creates| Startup["Task Scheduler task<br/>'Autorun for Sucrose'<br/>(not a registry Run key)"]
Graphic["Engine.GraphicPreference"] -->|writes| GPU["HKCU DirectX<br/>UserGpuPreferences<br/>(Windows per-app GPU)"]
| State | Stored in | Notes |
|---|---|---|
| All app settings | %AppData%\Sucrose\Setting\*.json |
Auto-reset if corrupt; writes can fail silently if locked |
| Autostart (Scheduler mode) | Task Scheduler task Autorun for Sucrose
|
Not a registry Run key |
| Autostart (Normal/Priority) |
HKCU\...\Run / approved startup |
Via Commandog Startup commands |
| GPU preference | HKCU\Software\Microsoft\DirectX\UserGpuPreferences |
Windows' own per-app setting |
| Personal Access Token |
Objectionable.json (plaintext) |
Sensitive — see Privacy-Telemetry |
| Uninstall entry | HKCU\...\Uninstall\Sucrose |
Created by installer; removed by Sucrose.Undo.exe
|
See the full reference in Data-Locations and Settings-Persistence.
Getting Started
- Installation
- System Requirements
- Quick Start
- Portal Interface Tour
- Updating Sucrose
- Uninstalling Sucrose
Wallpaper Types
Using Sucrose
- Managing Library
- Using Store
- Customizing Wallpaper
- Multi-Monitor
- Wallpaper Cycling
- Choosing Engines
- Performance Rules
- Theme, Tray & Startup
- Discord Rich Presence
Settings Reference
- Settings Overview
- Settings: General
- Settings: Personal
- Settings: Performance
- Settings: Wallpaper
- Settings: System
- Settings: Other
- Settings: All Keys
Creating Wallpapers
- Create Overview
- Create: Step By Step
- Create: Package Format
- Create: Customization Controls
- Create: JS Bridge
- Create: Audio API
- Create: System API
- Create: Property Listener & Filters
- Create: Web Architecture
- Create: Compatibility
- Create: Example Wallpapers
- Create: Sharing & Publishing
Engine Reference
- Engines Overview
- Engine: MpvPlayer
- Engine: VlcPlayer
- Engine: WebView
- Engine: CefSharp
- Engine: Nebula
- Engine: Vexana
- Engine: Xavier
- Engine: Aurora
- Engine Comparison
Automation & Command Line
Architecture & Internals
- Architecture Overview
- Lifecycle
- Commandog Dispatcher
- Single-Instance Mutexes
- IPC
- Backgroundog Service
- Crash Reporting
- Update Internals
- Property Service
- Undo Internals
Data, Files & Diagnostics
Building & Contributing
- Building From Source
- Repository Layout
- Shared Item Projects
- Code Conventions
- Preprocessor Symbols
- Publish Pipeline
- Bundle Installer Internals
- Extending Sucrose
- Contributing
- Translating with Localizer
- Localization Coverage
- Security Policy
- Privacy & Telemetry
Help & Support