OpenAI TTS API
This extension provides an OpenAI compatible API for multiple TTS models including Kokoro TTS and RVC.
Used as extension in TTS Webui
Installation
pip install git+https://github.com/rsxdalv/extension_openai_tts_api@main
Requirements
Models require individual installation of their extensions.
# Kokoro TTS
pip install git+https://github.com/rsxdalv/extension_kokoro@main
# RVC
pip install git+https://github.com/rsxdalv/extension_rvc@main
# Chatterbox
pip install git+https://github.com/rsxdalv/extension_chatterbox@main
Usage
Authentication
You can optionally protect the API with an API key.
- Environment variable (priority): set
OPENAI_API_KEYbefore starting the server/extension. - UI setting: in the extension's Gradio UI, set "API Key (OpenAI-compatible)". This is saved to your config and used when the env var is not set.
- If neither is set, the API is open and does not require authentication.
Clients should send the header Authorization: Bearer <YOUR_API_KEY>.
Kokoro TTS
import asyncio
from openai import AsyncOpenAI
from openai.helpers import LocalAudioPlayer
openai = AsyncOpenAI()
async def main() -> None:
async with openai.audio.speech.with_streaming_response.create(
model="hexgrad/Kokoro-82M",
voice="af_heart",
input="Today is a wonderful day to build something people love!",
) as response:
await LocalAudioPlayer().play(response)
if __name__ == "__main__":
asyncio.run(main())
RVC
import asyncio
from openai import AsyncOpenAI
from openai.helpers import LocalAudioPlayer
openai = AsyncOpenAI()
async def main() -> None:
async with openai.audio.speech.with_streaming_response.create(
model="hexgrad/Kokoro-82M",
voice="af_heart",
input="Today is a wonderful day to build something people love!",
extra_body={
"params": {
"use_gpu": True,
"rvc_params": {
"pitch_up_key": "0",
"index_path": "CaitArcane\\added_IVF65_Flat_nprobe_1_CaitArcane_v2",
"pitch_collection_method": "harvest",
"model_path": "CaitArcane\\CaitArcane",
"index_rate": 0.66,
"filter_radius": 3,
"resample_sr": 0,
"rms_mix_rate": 1,
"protect": 0.33,
},
},
},
) as response:
await LocalAudioPlayer().play(response)
if __name__ == "__main__":
asyncio.run(main())
Chatterbox
from openai import OpenAI
client = OpenAI(api_key="sk-1234567890", base_url="http://localhost:7778/v1")
with client.audio.speech.with_streaming_response.create(
model="chatterbox",
# voice="random",
voice="voices/irohazaka.wav",
input="Today is a wonderful day to build something people love!",
# speed=1.0, # not implemented
extra_body={
"params": {
"exaggeration": 0.5,
"cfg_weight": 0.5,
"temperature": 0.8,
},
},
) as response:
audio = response.read()
with open("audio.mp3", "wb") as f:
f.write(audio)
Metadata
Release files for tts-webui-extension.openai-tts-api 1.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tts_webui_extension_openai_tts_api-1.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / tts_webui_extension_openai_tts_api-1.5.0-py3-none-any.whl
| Download URL | tts_webui_extension_openai_tts_api-1.5.0-py3-none-any.whl |
|---|---|
| Size | 56.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a39c401a267f74429224f2671767d7f1d9706ee1d964cc6a8060d774686c284
|
|
BLAKE2b-256 checksum How to use checksums |
4cd6f507a57ec7c9b2120d70a521759850781c067f6b6f7ae27f5458ce1ec551
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.20
|