From 799a0c72e947f7e19231f1848289adb5af48fafd Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Sun, 28 Jun 2026 10:08:51 +0200 Subject: [PATCH] =?UTF-8?q?Feat:=20nat=C3=BCrlichere=20EL-Stimme=20?= =?UTF-8?q?=E2=80=94=20multilingual=5Fv2=20+=20voice=5Fsettings=20(niedrig?= =?UTF-8?q?e=20Stability/Style)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- voice_service/app.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/voice_service/app.py b/voice_service/app.py index d079f9f..6138e8e 100644 --- a/voice_service/app.py +++ b/voice_service/app.py @@ -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,