From 93f88e624233802507137f363000378cd7c7738f Mon Sep 17 00:00:00 2001 From: Alejandro-Cuautli <147084865+Alejandro-Cuautli@users.noreply.github.com> Date: Mon, 21 Sep 2026 07:04:00 +0200 Subject: [PATCH] =?UTF-8?q?fix(ui):=20no=20pisar=20idioma/par=C3=A1metros?= =?UTF-8?q?=20guardados=20al=20auto-cargar=20un=20preset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit applyPreset() ya distinguía isUserInteraction (para decidir si persistir el estado con debouncedSaveState), pero igual aplicaba language/exaggeration/ cfg_weight/temperature/speed_factor/seed del preset sin importar el flag. Todos los presets incluidos son demos en inglés. loadInitialUiState() carga primero el idioma/parámetros guardados por el usuario desde generation_defaults (correcto), pero si el cuadro de texto está vacío, restaura en silencio el último preset usado (isUserInteraction=false) -- eso pisaba de vuelta esos mismos valores con los del preset en cada carga de página. Un usuario que siempre trabaja en español y borra el texto para escribir uno nuevo (flujo normal) veía el idioma volver a inglés en cada sesión, sin haber tocado nada. Ahora el override de esos parámetros solo ocurre cuando isUserInteraction es true, es decir, cuando el usuario hace clic en un botón de preset a propósito -- ahí sí tiene sentido adoptar también el idioma/tono de ese ejemplo. La restauración silenciosa al cargar la página solo repone el texto de ejemplo y el resaltado visual del botón, sin tocar los parámetros que el usuario ya había guardado. Co-Authored-By: Claude Sonnet 5 --- ui/script.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/ui/script.js b/ui/script.js index 68dd0e9..908d39e 100644 --- a/ui/script.js +++ b/ui/script.js @@ -875,17 +875,27 @@ document.addEventListener('DOMContentLoaded', async function () { if (charCount) charCount.textContent = textArea.value.length; } const genParams = presetData.params || presetData; - if (temperatureSlider && genParams.temperature !== undefined) temperatureSlider.value = genParams.temperature; - if (exaggerationSlider && genParams.exaggeration !== undefined) exaggerationSlider.value = genParams.exaggeration; - if (cfgWeightSlider && genParams.cfg_weight !== undefined) cfgWeightSlider.value = genParams.cfg_weight; - if (speedFactorSlider && genParams.speed_factor !== undefined) speedFactorSlider.value = genParams.speed_factor; - if (seedInput && genParams.seed !== undefined) seedInput.value = genParams.seed; - if (languageSelect && genParams.language !== undefined) languageSelect.value = genParams.language; - if (temperatureValueDisplay && temperatureSlider) temperatureValueDisplay.textContent = temperatureSlider.value; - if (exaggerationValueDisplay && exaggerationSlider) exaggerationValueDisplay.textContent = exaggerationSlider.value; - if (cfgWeightValueDisplay && cfgWeightSlider) cfgWeightValueDisplay.textContent = cfgWeightSlider.value; - if (speedFactorValueDisplay && speedFactorSlider) speedFactorValueDisplay.textContent = speedFactorSlider.value; - updateSpeedFactorWarning(); + // Los presets solo traen ejemplos en inglés (texto y parámetros pensados + // para esa demo). Al restaurar el preset guardado en silencio al cargar + // la página (isUserInteraction=false, textArea vacío -- ver + // loadInitialUiState), esto pisaba el idioma/exaggeration/cfg_weight/etc. + // que el usuario había guardado como default (p.ej. "es"), forzándolo de + // vuelta a los valores del preset en cada carga. Cuando el usuario elige + // un preset a propósito (isUserInteraction=true, click real) sí tiene + // sentido aplicar también sus parámetros de ejemplo. + if (isUserInteraction) { + if (temperatureSlider && genParams.temperature !== undefined) temperatureSlider.value = genParams.temperature; + if (exaggerationSlider && genParams.exaggeration !== undefined) exaggerationSlider.value = genParams.exaggeration; + if (cfgWeightSlider && genParams.cfg_weight !== undefined) cfgWeightSlider.value = genParams.cfg_weight; + if (speedFactorSlider && genParams.speed_factor !== undefined) speedFactorSlider.value = genParams.speed_factor; + if (seedInput && genParams.seed !== undefined) seedInput.value = genParams.seed; + if (languageSelect && genParams.language !== undefined) languageSelect.value = genParams.language; + if (temperatureValueDisplay && temperatureSlider) temperatureValueDisplay.textContent = temperatureSlider.value; + if (exaggerationValueDisplay && exaggerationSlider) exaggerationValueDisplay.textContent = exaggerationSlider.value; + if (cfgWeightValueDisplay && cfgWeightSlider) cfgWeightValueDisplay.textContent = cfgWeightSlider.value; + if (speedFactorValueDisplay && speedFactorSlider) speedFactorValueDisplay.textContent = speedFactorSlider.value; + updateSpeedFactorWarning(); + } if (genParams.voice_id && predefinedVoiceSelect) { const voiceExists = Array.from(predefinedVoiceSelect.options).some(opt => opt.value === genParams.voice_id);