From 64fe3810b506e5735619d9147ade6f7072aeb15b Mon Sep 17 00:00:00 2001 From: R0m1k3 Date: Tue, 19 May 2026 12:56:21 +0200 Subject: [PATCH] Fix Edge TTS voice fallback and Gemini voice validation - Edge TTS fallback list now includes fr-FR-RemyMultilingualNeural - Removed 'Neural not in voice' check that rejected Gemini voices (fr-FR-Standard-A etc) before falling back - these are valid voices and Edge-tts handles them properly - Improved is_male check to match 'Remy' not 'Remi' --- ffmpeg-service/main.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ffmpeg-service/main.py b/ffmpeg-service/main.py index 9efd966..de65b42 100644 --- a/ffmpeg-service/main.py +++ b/ffmpeg-service/main.py @@ -325,17 +325,19 @@ async def generate_tts_with_subs( providing millisecond-accurate subtitle timing. """ # Determine gender of requested voice to choose appropriate fallbacks - is_male = any(name in voice for name in ["Remi", "Henri", "Paul"]) + is_male = any(name in voice for name in ["Remy", "Henri", "Paul"]) if is_male: fallback_voices = [ voice, + "fr-FR-RemyMultilingualNeural", "fr-FR-HenriNeural", "fr-FR-PaulNeural", ] else: fallback_voices = [ voice, + "fr-FR-VivienneMultilingualNeural", "fr-FR-VivienneNeural", "fr-FR-DeniseNeural", ] @@ -920,8 +922,9 @@ async def process_reel(request: ReelRequest, x_api_key: str = Header(None)): voice = "fr-FR-RemyMultilingualNeural" elif voice == "female": voice = "fr-FR-VivienneMultilingualNeural" - elif not voice or "Neural" not in voice: + elif not voice: voice = "fr-FR-VivienneMultilingualNeural" + # Note: Gemini voices (fr-FR-Standard-A etc.) are valid Edge voices too print(f"🔊 Using voice: {voice}") if tts_clean_text: @@ -1320,8 +1323,10 @@ async def preview_tts(request: ReelRequest, x_api_key: str = Header(None)): voice = "fr-FR-RemyMultilingualNeural" elif voice == "female": voice = "fr-FR-VivienneMultilingualNeural" - elif not voice or "Neural" not in voice: + elif not voice: voice = "fr-FR-VivienneMultilingualNeural" + # Note: Gemini voices (fr-FR-Standard-A etc.) are valid Edge voices too, + # so we don't check for "Neural" - let edge_tts handle voice resolution engine = request.tts_engine or "edge"