- Category
- AI Tools
- Rank
- No. 1406Tools index
Previous survey · No. 1413 ·
- Pricing
- Open Source
- Type
- TOOL
- Builder
- moeru-ai
- GitHub
- 106 stars
- Latest release
- v0.1.19
- Date
About
Self-hosted text-to-speech proxy service, all-in-one for multiple TTS providers, OpenAI-compatible API.
What it does
Unspeech gives applications one speech-generation contract while routing each request to a chosen vendor. A provider-prefixed model selects the destination, and the incoming bearer credential is translated into that vendor’s authentication format. Existing OpenAI clients can point at the service.
Why it's ranked here
The project solves a narrow integration problem with unusually broad provider coverage. Its dispatch layer recognizes ten speech backends and several aliases, while preserving a familiar client contract. The catch is uneven capability: only one backend receives the documented WebSocket streaming path.
What's good
Provider selection stays explicit in the model value, so switching services does not require a new client integration. The code handles speech and voice requests across the same backend set. Structured API errors distinguish bad requests, authentication, permissions, quotas, upstream failures, and availability problems.
Tradeoffs
Streaming works only with Volcengine, despite the wider provider list for ordinary speech and voice requests. Unspeech still depends on external speech vendors and their credentials. The supplied setup builds from source with Go, while the repository text documents no packaged binary, container image, or local synthesis engine.
How to use it well
Use it when one application must compare or switch among hosted speech vendors without rewriting its OpenAI-style client layer. Keep provider credentials in the request workflow and encode the provider in each model choice. Choose another project when the requirement is local speech generation rather than online services.
Technical notes+
README.md documents POST /v1/audio/speech on port 5933, provider-prefixed model values, bearer-header translation, and a source build requiring Go 1.24 or newer. go.mod declares Go 1.25.0 and an Echo HTTP stack with Gorilla WebSocket support. pkg/backend/backend.go dispatches Speech and Voices across OpenAI, StepFun, Deepgram, ElevenLabs, Fish Audio, Koemotion, Microsoft, Volcengine, Alibaba, and MiniMax, including aliases. SpeechStream accepts a JSON text start frame, emits JSON error events, truncates WebSocket close reasons to 123 bytes, and permits only the Volcengine backend. pkg/apierrors/apierrors.go and pkg/jsonapi/error.go implement structured status, code, detail, source, metadata, and caller information. pkg/utils/json_test.go and pkg/utils/string_test.go show Go tests using Testify.
Observed
- License
- AGPL-3.0
- Primary language
- Go
- Install surface
- Source build with the Go toolchain
- Interface
- HTTP API compatible with OpenAI speech clients, plus WebSocket streaming for Volcengine
- Provider coverage
- Dispatch code includes ten hosted speech backends
- Testing
- Go unit tests are present for JSON-path and string-conversion utilities
Read from README.md, go.mod, package.json, pkg/ho/ho.go, pkg/utils/mo.go, pkg/logs/attrs.go, pkg/utils/json.go, pkg/utils/string.go, pkg/jsonapi/error.go, pkg/backend/backend.go, pkg/utils/json_test.go, pkg/apierrors/errors.go, pkg/jsonapi/response.go, pkg/utils/string_test.go, pkg/apierrors/apierrors.go.
What it can do
Convert text to speech
Text string → Audio file
Proxy requests to multiple TTS providers
TTS API request → Audio response from selected provider
Provide OpenAI-compatible TTS API
OpenAI-formatted API request → Audio file in OpenAI response format
Self-host TTS service
Server configuration → Running TTS proxy service
Aggregate multiple TTS providers
Provider configurations → Unified TTS service endpoint
Route TTS requests to different providers
TTS request with provider preference → Audio from specified TTS provider
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
