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 | Actions Reset |
|---|---|---|---|---|
| tts_webui_extension_openai_tts_api-1.5.0-py3-none-any.whl | Python 3 | none | any | Details for tts_webui_extension_openai_tts_api-1.5.0-py3-none-any.whl |
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
|
Security for tts-webui-extension.openai-tts-api 1.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.