Settings Reference¶
Koharu's Settings screen currently exposes six main areas:
AppearanceEnginesAPI KeysKeybindsRuntimeAbout
This page documents the current settings surface as implemented in the app.
Appearance¶
The Appearance tab currently includes:
- theme:
Light,Dark, orSystem - UI language from the bundled translation list
Rendering Font, which is used when Koharu renders translated text onto the page
Theme, language, and rendering-font changes apply immediately in the frontend.
Engines¶
The Engines tab selects the backend used for each pipeline stage:
DetectorBubble DetectorFont DetectorSegmenterOCRTranslatorInpainterRenderer
These values are stored in the shared app config and save immediately when changed.
API Keys¶
The API Keys tab currently covers these built-in providers:
OpenAIGeminiClaudeDeepSeekDeepLGoogle Cloud TranslationCaiyunOpenAI Compatible
Each provider appears as an accordion with a status dot:
- green — ready (key saved and discovery succeeded)
- amber — missing required configuration (API key or, for
OpenAI Compatible, a base URL) - red — discovery failed against the configured endpoint
- grey — no configuration yet
Current behavior:
- provider API keys are not written to
config.toml - on macOS and Windows, provider API keys are stored through the system keyring
- on Linux, provider API keys are stored in Koharu's local filesystem credential store under the app data directory with owner-only file permissions
- provider base URLs are stored in the app config
OpenAI Compatiblerequires a customBase URL; models are discovered dynamically by callingGET /v1/modelsagainst that URL- machine-translation providers (
DeepL,Google Cloud Translation,Caiyun) only need an API key;Caiyunsupports a limited set of target languages - clearing a key removes it from credential storage
The API response intentionally redacts saved keys rather than returning the raw secret.
The Linux filesystem credential store relies on local filesystem permissions rather than OS-level encryption.
Keybinds¶
The Keybinds tab lets you rebind tool-switch and brush-size shortcuts plus the undo and redo bindings.
Current behavior:
- defaults are
V/M/B/E/Rfor the Select / Block / Brush / Eraser / Repair Brush tools - defaults are
[and]for the brush size step - defaults are
Ctrl + ZandCtrl + Shift + Z(Cmd + ZandCmd + Shift + Zon macOS) for undo and redo - the canvas zoom (
Ctrl+ wheel), pan (Ctrl+ drag), select-all (Ctrl + A), and the legacyCtrl + Yredo fallback are not rebindable - conflicts are highlighted in the editor; you can reset to defaults from the same screen
Keybind preferences are stored in the frontend preferences layer, not in config.toml.
For the full default list, see Keyboard Shortcuts.
Runtime¶
The Runtime tab groups restart-required settings that affect the shared local runtime:
Data PathHTTP Connect TimeoutHTTP Read TimeoutHTTP Max Retries
Current behavior:
Data Pathcontrols where Koharu stores runtime packages, downloaded models, page manifests, and image blobsHTTP Connect Timeoutsets how long Koharu waits while establishing HTTP connectionsHTTP Read Timeoutsets how long Koharu waits while reading HTTP responsesHTTP Max Retriescontrols automatic retries for transient HTTP failures- these HTTP values are used by the shared runtime HTTP client for downloads and provider-backed requests
- applying changes saves the config and restarts the desktop app because the runtime client is built at startup
About¶
The About tab currently shows:
- the current app version
- whether a newer GitHub release exists
- the author link
- the repository link
In packaged app mode, the version check compares the local app version against the latest GitHub release for mayocream/koharu.
Persistence model¶
The current settings behavior is split across storage layers:
config.tomlstores shared app config such asdata,http,pipeline, and providerbaseUrl- provider API keys are stored separately from
config.tomlthrough the platform credential store described above - theme, language, and rendering-font preferences are stored in the frontend preferences layer
That means clearing frontend preferences is not the same as clearing saved provider API keys or shared runtime config.