English speech-to-text and text-to-speech behind one OpenAI-compatible endpoint, running on a single small server. Point any OpenAI SDK at it and your existing code works unchanged.
Running live on the server this page is served from. Free to use while in beta โ a shared key is already filled in, limited to twenty requests a minute per visitor and two at a time.
Both endpoints are byte-for-byte OpenAI's. Change the base URL and existing SDK code keeps working โ no wrapper, no rewrite.
Models run on this server, not behind someone else's API. No third party sees your audio or your text, because there is no third party.
No signup, no card, no quota beyond a fair-use rate limit. Metered keys and paid plans come later โ for now it costs nothing to build against.
Base URL https://voice.devops-monk.com ยท every request needs
Authorization: Bearer <key>
/v1/audio/speechText to speech| Field | Type | Default | Notes |
|---|---|---|---|
model | string | required | tts-1 or kokoro |
input | string | required | The text to speak |
voice | string | af_heart | Any Kokoro English voice |
response_format | string | mp3 | mp3, wav, opus, flac |
speed | number | 1.0 | 0.25 to 4.0 |
/v1/audio/transcriptionsSpeech to text| Field | Type | Default | Notes |
|---|---|---|---|
file | file | required | wav, mp3, m4a, ogg, flac, webm โ max 25 MB |
model | string | required | whisper-1 โ English, Whisper small Q8_0 |
response_format | string | json | json, text, verbose_json, srt, vtt |
temperature | number | 0 | 0 to 1. Raise only if output is repetitive |
/v1/modelsWhat is routable# speak
curl https://voice.devops-monk.com/v1/audio/speech \
-H "Authorization: Bearer $KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"tts-1","voice":"af_heart","input":"Hello."}' \
--output hello.mp3
# transcribe
curl https://voice.devops-monk.com/v1/audio/transcriptions \
-H "Authorization: Bearer $KEY" \
-F file=@meeting.m4a -F model=whisper-1
# the official OpenAI SDK works unchanged
from openai import OpenAI
client = OpenAI(base_url="https://voice.devops-monk.com/v1", api_key=KEY)
client.audio.speech.create(model="tts-1", voice="af_heart",
input="Hello.").stream_to_file("hello.mp3")
with open("meeting.m4a", "rb") as f:
print(client.audio.transcriptions.create(model="whisper-1", file=f).text)
Four containers, one compose file. No GPU required.
git clone https://github.com/devops-monk/voice-api /opt/voice-api
cd /opt/voice-api && cp .env.example .env
./scripts/deploy.sh
Whisper small Q8_0, English. Measured at 0.66ร real time on four shared vCPUs.
The same weights the Lector desktop app offers as its quality option.
Auth, virtual keys, budgets and rate limits. Routing lives in one config file.