feat: add OpenAI-compatible Chatterbox TTS service
This commit is contained in:
commit
38a2a48f28
9 changed files with 620 additions and 0 deletions
54
README.md
Normal file
54
README.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# Chatterbox TTS
|
||||
|
||||
An OpenAI-compatible, CUDA-backed FastAPI wrapper for
|
||||
[ResembleAI Chatterbox](https://huggingface.co/ResembleAI/chatterbox).
|
||||
|
||||
The deployed service is available on the DimensionLab local network at
|
||||
`https://chatterbox.dimensionlab.net`.
|
||||
|
||||
## API
|
||||
|
||||
`POST /v1/audio/speech` accepts the familiar OpenAI speech fields:
|
||||
|
||||
```json
|
||||
{
|
||||
"model": "chatterbox",
|
||||
"input": "Hello from Chatterbox.",
|
||||
"voice": "reference.wav",
|
||||
"response_format": "wav",
|
||||
"speed": 1.0
|
||||
}
|
||||
```
|
||||
|
||||
The response is WAV audio. `voice` is a relative path below the service's
|
||||
local `voices/` directory; absolute paths, traversal, symlink escapes, and
|
||||
unreadable files are rejected. Reference clips are operational data and are
|
||||
intentionally not part of this repository.
|
||||
|
||||
Other endpoints:
|
||||
|
||||
- `GET /health`
|
||||
- `GET /v1/models`
|
||||
|
||||
## Runtime behavior
|
||||
|
||||
- Uses the English Chatterbox model on CUDA.
|
||||
- Serializes synthesis through one GPU lock.
|
||||
- Unloads the model after 300 seconds of inactivity.
|
||||
- Caps text input at 2,000 characters.
|
||||
- Listens locally on `127.0.0.1:8881`; Caddy provides the HTTPS route.
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
.venv/bin/pip install -r requirements.txt
|
||||
PYTHONPATH=. .venv/bin/pytest -q tests/test_app.py
|
||||
```
|
||||
|
||||
The CUDA smoke test requires a valid local reference clip at
|
||||
`voices/reference.wav`:
|
||||
|
||||
```bash
|
||||
PYTHONPATH=. .venv/bin/pytest -q tests/test_synthesis.py
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue