Summary
Some user-relevant runtime settings can currently be changed only by editing config.py.
It would be useful to make these settings configurable without modifying the Python source, either through a validated external configuration file layered over the built-in defaults or by extending the existing database and Settings UI coverage.
Why this matters
Packaged builds
config.py is bundled into the packaged application. Settings that are not exposed through the Settings UI or persisted in writher.db therefore cannot be changed by users of a downloaded build.
The clearest examples are:
DEVICE = "cpu"
COMPUTE_TYPE = "int8"
A packaged user currently has no way to select CUDA or change the compute type through WritHer, even when compatible GPU runtime libraries are available.
MODEL_SIZE is already configurable and persisted, so users can select the Whisper model but not the device or compute type on which it runs.
Source installations
Users running from source must edit config.py to change these settings. Their machine-specific preferences then become a source modification that must be preserved or reapplied when updating WritHer.
Existing persistence mechanism
WritHer already has a clean override mechanism: _load_settings() reads persisted values from writher.db and applies them over the defaults in config.py.
This currently covers settings such as recording mode, hotkeys, microphone, Whisper model, recognition language, assistant provider and clipboard behavior. Extending the same pattern would be consistent with the existing design.
Settings currently relevant to this request
At minimum:
SAMPLE_RATE and other advanced runtime settings could also be considered, although they may not all warrant controls in the Settings UI.
Possible directions
Either of the following would address the use case.
Option 1: external override file
Load a validated user configuration file from WritHer’s writable data directory, for example:
%APPDATA%\WritHer\config.local.toml
The file could contain supported advanced settings that do not need dedicated UI controls. config.py would remain the source of built-in defaults.
Invalid or unsupported values should be ignored with a clear entry in writher.log, rather than preventing the application from starting.
Option 2: extend the database and Settings UI
Persist the remaining user-relevant runtime values through the existing settings table.
At minimum, users could select:
- Device:
cpu or cuda
- Compute type: compatible values such as
int8, float16 or float32
These settings could be marked as requiring an application restart.
The project could implement either approach or combine them: common settings in the UI and advanced settings in an external override file.
Expected behavior
Users should be able to select the inference device and compute type without modifying or rebuilding WritHer’s source code. Their preferences should survive application updates.
This change would not install or guarantee the presence of the required CUDA libraries. It would make the device selectable when a compatible CUDA runtime is already installed and supported.
Benefit
- Packaged users can configure supported GPU execution.
- Machine-specific preferences no longer require a source fork.
- Built-in defaults remain unchanged.
- Advanced settings can be exposed without expanding
config.py into a user-maintained file.
Summary
Some user-relevant runtime settings can currently be changed only by editing
config.py.It would be useful to make these settings configurable without modifying the Python source, either through a validated external configuration file layered over the built-in defaults or by extending the existing database and Settings UI coverage.
Why this matters
Packaged builds
config.pyis bundled into the packaged application. Settings that are not exposed through the Settings UI or persisted inwrither.dbtherefore cannot be changed by users of a downloaded build.The clearest examples are:
A packaged user currently has no way to select CUDA or change the compute type through WritHer, even when compatible GPU runtime libraries are available.
MODEL_SIZEis already configurable and persisted, so users can select the Whisper model but not the device or compute type on which it runs.Source installations
Users running from source must edit
config.pyto change these settings. Their machine-specific preferences then become a source modification that must be preserved or reapplied when updating WritHer.Existing persistence mechanism
WritHer already has a clean override mechanism:
_load_settings()reads persisted values fromwrither.dband applies them over the defaults inconfig.py.This currently covers settings such as recording mode, hotkeys, microphone, Whisper model, recognition language, assistant provider and clipboard behavior. Extending the same pattern would be consistent with the existing design.
Settings currently relevant to this request
At minimum:
DEVICECOMPUTE_TYPESAMPLE_RATEand other advanced runtime settings could also be considered, although they may not all warrant controls in the Settings UI.Possible directions
Either of the following would address the use case.
Option 1: external override file
Load a validated user configuration file from WritHer’s writable data directory, for example:
The file could contain supported advanced settings that do not need dedicated UI controls.
config.pywould remain the source of built-in defaults.Invalid or unsupported values should be ignored with a clear entry in
writher.log, rather than preventing the application from starting.Option 2: extend the database and Settings UI
Persist the remaining user-relevant runtime values through the existing settings table.
At minimum, users could select:
cpuorcudaint8,float16orfloat32These settings could be marked as requiring an application restart.
The project could implement either approach or combine them: common settings in the UI and advanced settings in an external override file.
Expected behavior
Users should be able to select the inference device and compute type without modifying or rebuilding WritHer’s source code. Their preferences should survive application updates.
This change would not install or guarantee the presence of the required CUDA libraries. It would make the device selectable when a compatible CUDA runtime is already installed and supported.
Benefit
config.pyinto a user-maintained file.