xtts / app.py
5trix's picture
Update app.py
0aad7d0 verified
Raw History Blame Contribute Delete
1.46 kB
from fastapi import FastAPI, HTTPException, Header
from fastapi.responses import FileResponse
from pydantic import BaseModel
import torch, uuid, os
from TTS.api import TTS
app = FastAPI(title="XTTS v2 API")
print("Loading model...")
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2",
gpu=torch.cuda.is_available())
print("Model ready!")
API_KEY = os.environ.get("API_KEY", "changeme")
class TTSRequest(BaseModel):
text: str
language: str = "en"
speaker: str = "Damien Black"
@app.get("/")
def root():
return {"status": "running"}
@app.get("/debug-key")
def debug_key():
return {
"key_length": len(API_KEY),
"key_preview": API_KEY[:4] + "...",
"is_default": API_KEY == "changeme"
}
@app.post("/tts")
def generate(req: TTSRequest, x_api_key: str = Header(None)):
if x_api_key != API_KEY:
raise HTTPException(status_code=401, detail="Invalid API key")
output = f"/tmp/{uuid.uuid4()}.wav"
tts.tts_to_file(
text=req.text,
speaker=req.speaker,
language=req.language,
file_path=output
)
return FileResponse(output, media_type="audio/wav", filename="output.wav")
@app.post("/debug-auth")
def debug_auth(x_api_key: str = Header(None)):
return {
"received": x_api_key,
"expected_preview": API_KEY[:4] + "...",
"length_received": len(x_api_key) if x_api_key else 0,
"matches": x_api_key == API_KEY
}