fix: Add new paths to config, fix Uvicorn logging, and update Storage settings

This commit is contained in:
mARTin-B78 2026-06-22 21:36:59 +02:00
parent c26dabe296
commit 6ffba2d588
4 changed files with 26 additions and 2 deletions

View File

@ -37,8 +37,8 @@ _SETTINGS_KEYS = {
"client_voice_bindings", "client_voice_bindings",
"llm_url", "llm_model", "llm_url", "llm_model",
# Browser-persistent UI state # Browser-persistent UI state
"engine_local_urls", "engine_container_names", "custom_engine_cards",
"refine_llm_url", "conv_llm_url", "seed_finder_text", "refine_llm_url", "conv_llm_url", "seed_finder_text",
"seed_finder_dir", "pt_dir",
} }
# ── TTS stability defaults ──────────────────────────────────────────────────── # ── TTS stability defaults ────────────────────────────────────────────────────
@ -276,6 +276,8 @@ def _load_settings() -> dict:
"refine_llm_url": "", "refine_llm_url": "",
"conv_llm_url": "", "conv_llm_url": "",
"seed_finder_text": "", "seed_finder_text": "",
"seed_finder_dir": "",
"pt_dir": "",
} }
if CONFIG_FILE.exists(): if CONFIG_FILE.exists():
try: try:

View File

@ -30,6 +30,8 @@ app.add_middleware(GZipMiddleware, minimum_size=1024)
_buf_handler = _BufferHandler() _buf_handler = _BufferHandler()
_buf_handler.setLevel(logging.DEBUG) _buf_handler.setLevel(logging.DEBUG)
logging.getLogger().addHandler(_buf_handler) logging.getLogger().addHandler(_buf_handler)
logging.getLogger("uvicorn.error").addHandler(_buf_handler)
logging.getLogger("uvicorn.access").addHandler(_buf_handler)
# ── File log handler (rotates at 5 MB, keeps 3 files) ──────────────────────── # ── File log handler (rotates at 5 MB, keeps 3 files) ────────────────────────
@ -48,6 +50,8 @@ try:
datefmt="%Y-%m-%d %H:%M:%S", datefmt="%Y-%m-%d %H:%M:%S",
)) ))
logging.getLogger().addHandler(_file_handler) logging.getLogger().addHandler(_file_handler)
logging.getLogger("uvicorn.error").addHandler(_file_handler)
logging.getLogger("uvicorn.access").addHandler(_file_handler)
except Exception as _log_err: except Exception as _log_err:
logger.warning("Could not set up file logging at %s: %s", _LOG_DIR, _log_err) logger.warning("Could not set up file logging at %s: %s", _LOG_DIR, _log_err)

View File

@ -343,7 +343,9 @@ const SETTINGS_FIELD_HELP = {
's-tts-key': ['TTS API key', 'Optional. For local OpenAI-compatible servers, sk-local or empty usually works.'], 's-tts-key': ['TTS API key', 'Optional. For local OpenAI-compatible servers, sk-local or empty usually works.'],
's-vd-key': ['Voice Design API key', 'Optional. Use only if your Voice Design backend requires Authorization.'], 's-vd-key': ['Voice Design API key', 'Optional. Use only if your Voice Design backend requires Authorization.'],
's-whisper-key': ['Whisper API key', 'Optional. Needed for cloud STT, usually empty for local Whisper-compatible containers.'], 's-whisper-key': ['Whisper API key', 'Optional. Needed for cloud STT, usually empty for local Whisper-compatible containers.'],
's-seed-finder-text': ['Seed Finder text', 'Custom test sentence used when opening the Seed Finder. Leave empty to use language defaults.'] 's-seed-finder-text': ['Seed Finder text', 'Custom test sentence used when opening the Seed Finder. Leave empty to use language defaults.'],
's-seed-finder-dir': ['Seed Finder Sample Files', 'Container path for seed finder sample storage.'],
's-pt-dir': ['PT Files', 'Container path for .pt embedding storage.']
}; };
@ -460,6 +462,10 @@ async function loadSettings() {
$('s-vd-key').value = s.voice_design_api_key || ''; $('s-vd-key').value = s.voice_design_api_key || '';
$('s-voices-scan-dir').value = s.voices_scan_dir || ''; $('s-voices-scan-dir').value = s.voices_scan_dir || '';
$('s-output-dir').value = s.output_dir || ''; $('s-output-dir').value = s.output_dir || '';
const seedFinderDirEl = $('s-seed-finder-dir');
if (seedFinderDirEl) seedFinderDirEl.value = s.seed_finder_dir || '';
const ptDirEl = $('s-pt-dir');
if (ptDirEl) ptDirEl.value = s.pt_dir || '';
const seedTextEl = $('s-seed-finder-text'); const seedTextEl = $('s-seed-finder-text');
if (seedTextEl) seedTextEl.value = s.seed_finder_text || ''; if (seedTextEl) seedTextEl.value = s.seed_finder_text || '';
const themeEl = $('s-theme-select'); const themeEl = $('s-theme-select');
@ -560,6 +566,8 @@ document.addEventListener('click', async e => { if (!e.target.closest('.s-save-b
voice_design_api_key: $('s-vd-key').value, voice_design_api_key: $('s-vd-key').value,
voices_scan_dir: $('s-voices-scan-dir').value, voices_scan_dir: $('s-voices-scan-dir').value,
output_dir: $('s-output-dir').value, output_dir: $('s-output-dir').value,
seed_finder_dir: $('s-seed-finder-dir')?.value || '',
pt_dir: $('s-pt-dir')?.value || '',
stt_language: $('s-stt-language')?.value || '', stt_language: $('s-stt-language')?.value || '',
stt_preferred_backend: $('s-stt-preferred-backend')?.value || '', stt_preferred_backend: $('s-stt-preferred-backend')?.value || '',
auto_refine: $('s-auto-refine')?.value || 'off', auto_refine: $('s-auto-refine')?.value || 'off',

View File

@ -422,6 +422,16 @@
<input type="text" id="s-output-dir" placeholder="/voices/active_voices"> <input type="text" id="s-output-dir" placeholder="/voices/active_voices">
<span class="s-hint">New cloned/exported voices are saved here.</span> <span class="s-hint">New cloned/exported voices are saved here.</span>
</div> </div>
<div class="s-field">
<label>Seed Finder Sample Files</label>
<input type="text" id="s-seed-finder-dir" placeholder="/voices/seed_finder">
<span class="s-hint">Directory containing generated seed finder samples.</span>
</div>
<div class="s-field">
<label>PT Files</label>
<input type="text" id="s-pt-dir" placeholder="/voices/pt_files">
<span class="s-hint">Directory for saved embedding models (.pt files).</span>
</div>
</div> </div>
<div class="s-page-actions"> <div class="s-page-actions">
<button class="btn-primary s-save-btn">Save settings</button> <button class="btn-primary s-save-btn">Save settings</button>