OpenAI TTS compatible proxy/router. Routes /v1/audio/speech to pluggable TTS providers.
- Route validates
model+inputviatts_request_base(zod), then delegates toTtsProvider. - Providers optionally define a
request_schema(extends base) for their own fields. - All provider-specific params go into
SpeechParams.extraasRecord<string, unknown>. - Errors follow OpenAI JSON format, produced via
OpenAiErrororopenai_error_from_zod().
Coding conventions
docs/dev/coding/ts.md and docs/dev/coding/clean-code.ts
OpenAI TTS API spec
docs/dev/openai-tts-api-spec.md
Provider interface
src/types/provider.ts
Request schemas
src/types/schema.ts
Route handler
src/routes/audio.ts
Provider registry
src/providers/registry.ts
Test patterns
tests/routes/audio.test.ts (EchoProvider / MinimalProvider)
Available scripts
package.json scripts: test, test:watch, typecheck, dev, lint, lint:fix
- Pnpm, ESM,
.jsimport extensions (NodeNext). - Zod v4:
ZodError.issues(not.errors). - Express 5 catches async route rejections automatically.
- File encoding: always write files as UTF-8 without BOM (
utf8NoBOM). Do NOT write UTF-8 with BOM or UTF-16.