fix(tts): ask GPT-SoVITS again before refusing an import

The voices page keeps the node's status for a minute. On a fresh install
the first status said the storage place (models/gpt_sovits) was missing,
so "Import character" refused with "存放位置不能写入" until the cached
answer expired, although the folder existed by then. Before refusing, the
import asks for the status once more. (Anomalous_TTS now also creates the
folder when it starts.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DemonGatanjieu
2026-10-09 15:12:21 +08:00
co-authored by Claude Opus 5.5
parent 888e7c8dc4
commit e4d351a44e
2 changed files with 6 additions and 5 deletions
+3
View File
@@ -2,6 +2,9 @@
## Unreleased
### 🎙️ Importing a character right after installing (装好就能导入角色)
- The first "Import character" on a fresh install no longer says the storage place cannot be written to: the voices page asks GPT-SoVITS again before refusing, instead of trusting what it heard up to a minute earlier.
### 🧭 New layout (新布局)
- **Icon rail (左侧图标栏)**: every page now has one place on the left: Home, Models, Gallery, Workflows, Combos, Prompts, then Voices and Audio for the audio side, then scan, Model Check, Node Assistant and the toolbox, with settings at the bottom. It replaces the tabs at the top, the image/audio switch and the tool bar under the folder list.
- **Folder list opens and closes per page (列表按页面收放)**: click the current page's icon again, or the button at the top left, to hide or show its list; each page remembers your choice. Pages without a list (Home, Gallery) give the space to the content. In a narrow or docked window the list starts closed and opens as a drawer against the rail, over a dimmed page; picking a folder or character, pressing the dimmed page or Esc closes it.
+3 -5
View File
@@ -72,12 +72,10 @@ export async function openTtsImport({ files = [], target = null, onDone } = {})
await anomalousAlert(t('ttsSetupRemote'));
return;
}
// New characters always go to the storage place (changed in GPT-SoVITS settings).
// New characters go to the storage place. The status is kept a minute (a fresh install's folder may be there by now): ask again before refusing.
if (!target && !status.libraries.find(lib => lib.storage)?.writable) status = await loadGptSovitsStatus({ force: true }).catch(() => status) || status;
const home = status.libraries.find(lib => lib.storage);
if (!target && !home?.writable) {
await anomalousAlert(t('ttsImportNoLibrary', { path: status.storage }));
return;
}
if (!target && !home?.writable) return anomalousAlert(t('ttsImportNoLibrary', { path: status.storage }));
activeScope?.dispose();
const scope = createViewScope();