From af00d3323d8963b467d7b9d39600c0e413787360 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 11 Jun 2026 21:04:13 +0200 Subject: [PATCH] feat: Voice-Auswahl aus ElevenLabs-Account in den TTS-Einstellungen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dropdown mit den Account-Stimmen (GET /tts-settings/voices/available) plus Warnung, wenn die gespeicherte Voice-ID nicht im Account existiert — so fällt eine ungültige Stimme (Ursache der fehlenden sv-Audios) sofort auf statt still fehlzuschlagen. Co-Authored-By: Claude Fable 5 --- src/pages/Settings.jsx | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/pages/Settings.jsx b/src/pages/Settings.jsx index aaa8af4..a45261e 100644 --- a/src/pages/Settings.jsx +++ b/src/pages/Settings.jsx @@ -66,6 +66,7 @@ function PipelineSettings() { export default function Settings() { const [rows, setRows] = useState({}); // language → settings + const [voices, setVoices] = useState(null); // null = lädt/nicht verfügbar const [saving, setSaving] = useState(null); const [msg, setMsg] = useState(null); const [error, setError] = useState(null); @@ -78,7 +79,10 @@ export default function Settings() { setRows(map); } catch (e) { setError(e.message); } } - useEffect(() => { load(); }, []); + useEffect(() => { + load(); + apiFetch('/tts-settings/voices/available').then(setVoices).catch(() => setVoices(null)); + }, []); function update(lang, patch) { setRows(r => ({ ...r, [lang]: { ...(r[lang] || { language: lang }), ...patch } })); @@ -132,8 +136,25 @@ export default function Settings() {