from fastapi import FastAPI, Response from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel from kokoro import KPipeline import soundfile as sf import numpy as np import io app = FastAPI() app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) pipe = KPipeline(lang_code='e') class Req(BaseModel): input: str voice: str = "ef_dora" speed: float = 1.0 INDEX_HTML = """Kokoro TTS

Kokoro TTS (espanol)





Listo.


""" @app.get("/", response_class=None) def index(): from fastapi.responses import HTMLResponse return HTMLResponse(INDEX_HTML) @app.post("/v1/audio/speech") def speech(r: Req): parts = [a for _, _, a in pipe(r.input[:1000], voice=r.voice, speed=r.speed)] wav = np.concatenate(parts) if len(parts) > 1 else parts[0] buf = io.BytesIO() sf.write(buf, wav, 24000, format="WAV") return Response(content=buf.getvalue(), media_type="audio/wav")