# genesis/narration.py """ Narration Module for GENESIS-AI Generates audio narration from text using ElevenLabs, with gTTS fallback. """ import os import requests from gtts import gTTS ELEVEN_LABS_API_KEY = os.getenv("ELEVEN_LABS_API_KEY") ELEVEN_TTS_URL = "https://api.elevenlabs.io/v1/text-to-speech" def narrate_text_elevenlabs(text, voice="Rachel"): """Generate narration using ElevenLabs API.""" headers = { "xi-api-key": ELEVEN_LABS_API_KEY, "Content-Type": "application/json" } payload = {"text": text, "voice_settings": {"stability": 0.75, "similarity_boost": 0.75}} try: r = requests.post(f"{ELEVEN_TTS_URL}/{voice}", json=payload, headers=headers) r.raise_for_status() output_path = "narration.mp3" with open(output_path, "wb") as f: f.write(r.content) return output_path except Exception as e: return {"error": str(e)} def narrate_text_gtts(text, lang="en"): """Fallback narration with gTTS.""" try: tts = gTTS(text=text, lang=lang) output_path = "narration_fallback.mp3" tts.save(output_path) return output_path except Exception as e: return {"error": str(e)} def narrate_text(text): """Try ElevenLabs first, else fallback.""" if ELEVEN_LABS_API_KEY: result = narrate_text_elevenlabs(text) if isinstance(result, str): return result return narrate_text_gtts(text)