Feat: natürlichere EL-Stimme — multilingual_v2 + voice_settings (niedrige Stability/Style)

Flash v2.5 (Tempo-Modell) + fehlende voice_settings klangen roboterhaft. Jetzt eleven_multilingual_v2
+ stability 0.4 / similarity 0.8 / style 0.35 / speaker_boost → ausdrucksstärker. Alles env-überschreibbar.
Hinweis: multilingual_v2 = 1 Credit/Zeichen (Flash war 0.5).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-06-28 10:08:51 +02:00
parent d07fe1de66
commit 799a0c72e9
+16 -2
View File
@@ -71,8 +71,13 @@ def active_ref() -> str:
# ElevenLabs (Premium-Cloud-TTS): saubere, native deutsche Stimmen (Voice Library). Key wird zur
# Laufzeit gelesen (env ODER ~/.hermes/.env), damit Nachtragen ohne Code-Deploy reicht. Default-
# Modell = Flash v2.5 (multilingual, 0,5 Credit/Zeichen → schont das Free-Tier-Kontingent).
ELEVEN_MODEL = os.environ.get("VOICE_ELEVENLABS_MODEL", "eleven_flash_v2_5")
# multilingual_v2 = natürlichstes Modell (statt Flash, das auf Tempo optimiert/flacher ist).
ELEVEN_MODEL = os.environ.get("VOICE_ELEVENLABS_MODEL", "eleven_multilingual_v2")
ELEVEN_DEFAULT_VOICE = os.environ.get("VOICE_ELEVENLABS_VOICE", "21m00Tcm4TlvDq8ikWAM")
# Stimm-Settings: niedrige Stability = ausdrucksstärker/lebendiger (hohe = monoton/roboterhaft).
ELEVEN_STABILITY = float(os.environ.get("VOICE_ELEVENLABS_STABILITY", "0.4"))
ELEVEN_SIMILARITY = float(os.environ.get("VOICE_ELEVENLABS_SIMILARITY", "0.8"))
ELEVEN_STYLE = float(os.environ.get("VOICE_ELEVENLABS_STYLE", "0.35"))
HERMES_ENV = Path.home() / ".hermes" / ".env"
# Edge-TTS: native deutsche Azure-Neural-Stimmen, gratis & ohne Key (kein Cloning → kein Akzent).
EDGE_DEFAULT = os.environ.get("VOICE_EDGE_VOICE", "de-DE-KatjaNeural")
@@ -227,7 +232,16 @@ def elevenlabs_tts(text: str, voice: str) -> bytes:
if not key:
raise HTTPException(503, "ELEVENLABS_API_KEY nicht gesetzt (in ~/.hermes/.env eintragen).")
vid = voice or ELEVEN_DEFAULT_VOICE
body = json.dumps({"text": text, "model_id": ELEVEN_MODEL}).encode("utf-8")
body = json.dumps({
"text": text,
"model_id": ELEVEN_MODEL,
"voice_settings": {
"stability": ELEVEN_STABILITY,
"similarity_boost": ELEVEN_SIMILARITY,
"style": ELEVEN_STYLE,
"use_speaker_boost": True,
},
}).encode("utf-8")
req = urllib.request.Request(
f"https://api.elevenlabs.io/v1/text-to-speech/{vid}",
data=body,