fix: gültige Default-Voice für Schwedisch (voice_not_found behoben)

Die geseedete sv-Voice 'XXCqsM8I9KhqA7jLGj1U' existiert bei ElevenLabs
nicht — jede schwedische Audio-Generierung schlug mit voice_not_found
fehl (de/en haben eigene, gültige Account-Voices).

- Seed + Migration: sv → Premade 'Charlotte' (XB0fDUnXU5powFXDhCwa,
  schwedischer Akzent, in jedem Account verfügbar); Bestandsdaten mit
  der defekten ID werden beim Boot automatisch korrigiert
- voices.js: Fallback auf Premade 'Sarah' statt der toten ID

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 21:04:10 +02:00
parent f5b69a9213
commit 96ae76f295
2 changed files with 13 additions and 3 deletions

View File

@@ -599,9 +599,16 @@ async function migrate() {
INSERT INTO tts_settings (language, voice_id) VALUES INSERT INTO tts_settings (language, voice_id) VALUES
('de', 'rKiu7lQ4c5P3az3745s3'), ('de', 'rKiu7lQ4c5P3az3745s3'),
('en', 'cVd39cx0VtXNC13y5Y7z'), ('en', 'cVd39cx0VtXNC13y5Y7z'),
('sv', 'XXCqsM8I9KhqA7jLGj1U') ('sv', 'XB0fDUnXU5powFXDhCwa')
ON CONFLICT (language) DO NOTHING ON CONFLICT (language) DO NOTHING
`).catch(() => {}); `).catch(() => {});
// Defekte sv-Seed-Voice ersetzen: 'XXCqsM8I9KhqA7jLGj1U' existiert bei ElevenLabs nicht
// (voice_not_found) — dadurch schlug jede schwedische Audio-Generierung fehl.
// 'XB0fDUnXU5powFXDhCwa' = Premade-Voice "Charlotte" (schwedischer Akzent), in jedem Account verfügbar.
await query(`
UPDATE tts_settings SET voice_id = 'XB0fDUnXU5powFXDhCwa'
WHERE language = 'sv' AND voice_id = 'XXCqsM8I9KhqA7jLGj1U'
`).catch(() => {});
// ── Content-Pipeline: Job-Tracking direkt auf der Picture-Zeile ────────────── // ── Content-Pipeline: Job-Tracking direkt auf der Picture-Zeile ──────────────
await query(`ALTER TABLE pictures ADD COLUMN IF NOT EXISTS pipeline_status TEXT NOT NULL DEFAULT 'none'`).catch(() => {}); await query(`ALTER TABLE pictures ADD COLUMN IF NOT EXISTS pipeline_status TEXT NOT NULL DEFAULT 'none'`).catch(() => {});

View File

@@ -1,12 +1,15 @@
// Default ElevenLabs voice per language (ISO 639-1 → voice_id). // Default ElevenLabs voice per language (ISO 639-1 → voice_id).
// Configure via env (ELEVENLABS_VOICE_DE/EN/SV). Falls back to a shared multilingual voice. // Configure via env (ELEVENLABS_VOICE_DE/EN/SV). Falls back to a shared multilingual voice.
const FALLBACK_VOICE = process.env.ELEVENLABS_VOICE_DEFAULT || 'XXCqsM8I9KhqA7jLGj1U'; // 'EXAVITQu4vr4xnSDxMaL' = ElevenLabs-Premade "Sarah" — existiert in jedem Account.
// (Der frühere Default 'XXCqsM8I9KhqA7jLGj1U' lieferte voice_not_found.)
const FALLBACK_VOICE = process.env.ELEVENLABS_VOICE_DEFAULT || 'EXAVITQu4vr4xnSDxMaL';
const VOICES = { const VOICES = {
de: process.env.ELEVENLABS_VOICE_DE || FALLBACK_VOICE, de: process.env.ELEVENLABS_VOICE_DE || FALLBACK_VOICE,
en: process.env.ELEVENLABS_VOICE_EN || FALLBACK_VOICE, en: process.env.ELEVENLABS_VOICE_EN || FALLBACK_VOICE,
sv: process.env.ELEVENLABS_VOICE_SV || FALLBACK_VOICE, // Premade "Charlotte" (schwedischer Akzent) als Default für Schwedisch
sv: process.env.ELEVENLABS_VOICE_SV || 'XB0fDUnXU5powFXDhCwa',
}; };
/** Returns the configured voice_id for a language code (default: fallback voice). */ /** Returns the configured voice_id for a language code (default: fallback voice). */