From 7810a6329a265ad7fd0bcbda0a9f2f48de19c176 Mon Sep 17 00:00:00 2001 From: Richard R Date: Sat, 21 Feb 2026 20:19:00 -0700 Subject: [PATCH] feat: add KittenTTS-FastAPI support and update documentation --- README.md | 3 +- .../tts-provider-guides/custom-openai.md | 2 + .../tts-provider-guides/kitten-tts-fastapi.md | 46 +++++++++++++++++++ docs-site/docs/configure/tts-providers.md | 5 +- docs-site/docs/docker-quick-start.md | 2 +- docs-site/docs/introduction.md | 3 +- docs-site/sidebars.ts | 1 + src/app/(public)/page.tsx | 6 +-- src/components/SettingsModal.tsx | 1 + 9 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 docs-site/docs/configure/tts-provider-guides/kitten-tts-fastapi.md diff --git a/README.md b/README.md index 5dcfc8f..824aac3 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ OpenReader is an open source, self-host-friendly text-to-speech document reader ## ✨ Highlights -- 🎯 **Multi-provider TTS** with OpenAI-compatible endpoints (OpenAI, DeepInfra, Kokoro, Orpheus, custom). +- 🎯 **Multi-provider TTS** with OpenAI-compatible endpoints (OpenAI, DeepInfra, Kokoro, KittenTTS-FastAPI, Orpheus, custom). - 📖 **Read-along playback** for PDF/EPUB with sentence-aware narration. - ⏱️ **Word-by-word highlighting** via optional `whisper.cpp` timestamps. - 🛜 **Sync + library import** to bring docs across devices and from server-mounted folders. @@ -38,6 +38,7 @@ OpenReader is an open source, self-host-friendly text-to-speech document reader | Configure object storage | [Object / Blob Storage](https://docs.openreader.richardr.dev/configure/object-blob-storage) | | Configure TTS providers | [TTS Providers](https://docs.openreader.richardr.dev/configure/tts-providers) | | Run Kokoro locally | [Kokoro-FastAPI](https://docs.openreader.richardr.dev/configure/tts-provider-guides/kokoro-fastapi) | +| Run KittenTTS locally | [KittenTTS-FastAPI](https://docs.openreader.richardr.dev/configure/tts-provider-guides/kitten-tts-fastapi) | | Get support or contribute | [Support and Contributing](https://docs.openreader.richardr.dev/about/support-and-contributing) | ## 🧭 Community diff --git a/docs-site/docs/configure/tts-provider-guides/custom-openai.md b/docs-site/docs/configure/tts-provider-guides/custom-openai.md index 6822333..132b44e 100644 --- a/docs-site/docs/configure/tts-provider-guides/custom-openai.md +++ b/docs-site/docs/configure/tts-provider-guides/custom-openai.md @@ -6,6 +6,8 @@ Use any custom OpenAI-compatible TTS service with OpenReader. Use this integration when your endpoint is not directly covered by built-in dropdown defaults. +Known compatible examples include Kokoro-FastAPI, KittenTTS-FastAPI, and Orpheus-FastAPI. + ## Provider - Provider: `Custom OpenAI-Like` diff --git a/docs-site/docs/configure/tts-provider-guides/kitten-tts-fastapi.md b/docs-site/docs/configure/tts-provider-guides/kitten-tts-fastapi.md new file mode 100644 index 0000000..d500e1c --- /dev/null +++ b/docs-site/docs/configure/tts-provider-guides/kitten-tts-fastapi.md @@ -0,0 +1,46 @@ +--- +title: KittenTTS-FastAPI +--- + +Use [KittenTTS-FastAPI](https://github.com/richardr1126/KittenTTS-FastAPI) as an OpenAI-compatible TTS backend for OpenReader. + +## Provider + +- Provider: `Custom OpenAI-Like` +- Typical model: `kitten-tts` +- `API_BASE`: required (usually your KittenTTS URL ending with `/v1`) +- `API_KEY`: set only if your deployment requires one + +## Run KittenTTS (CPU) + +```bash +docker run -it --rm \ + --name kittentts-fastapi \ + -e KITTEN_MODEL_REPO_ID="KittenML/kitten-tts-nano-0.8-fp32" \ + -p 8005:8005 \ + ghcr.io/richardr1126/kittentts-fastapi-cpu +``` + +## OpenReader setup + +1. Start your KittenTTS-FastAPI server. +2. In OpenReader Settings, choose provider `Custom OpenAI-Like`. +3. Set `API_BASE` to your KittenTTS base URL (typically ending with `/v1`). +4. Set `API_KEY` only if your deployment requires one. +5. Choose model `kitten-tts` (or another model exposed by your deployment). + +## Notes + +:::info OpenAI-compatible API +OpenReader expects OpenAI-compatible audio endpoints when using KittenTTS through `Custom OpenAI-Like`. +::: + +:::tip Endpoint shape +Use an `API_BASE` that points at the KittenTTS API root (typically ending with `/v1`). +::: + +## References + +- [richardr1126/KittenTTS-FastAPI](https://github.com/richardr1126/KittenTTS-FastAPI) +- [TTS Providers](../tts-providers) +- [TTS Environment Variables](../../reference/environment-variables#tts-provider-and-request-behavior) diff --git a/docs-site/docs/configure/tts-providers.md b/docs-site/docs/configure/tts-providers.md index 296a0b1..059ef80 100644 --- a/docs-site/docs/configure/tts-providers.md +++ b/docs-site/docs/configure/tts-providers.md @@ -8,7 +8,7 @@ import TabItem from '@theme/TabItem'; OpenReader supports OpenAI-compatible TTS providers through a common API shape. :::tip -If you are running a self-hosted TTS server (Kokoro/Orpheus/etc.), use **Custom OpenAI-Like** in Settings. +If you are running a self-hosted TTS server (Kokoro/KittenTTS/Orpheus/etc.), use **Custom OpenAI-Like** in Settings. ::: ## Quick Setup by Provider @@ -46,7 +46,7 @@ In Settings, provider options include: - `OpenAI` - `Deepinfra` -- `Custom OpenAI-Like` (Kokoro, Orpheus, and other OpenAI-compatible endpoints) +- `Custom OpenAI-Like` (Kokoro, KittenTTS-FastAPI, Orpheus, and other OpenAI-compatible endpoints) `API_BASE` guidance: @@ -67,6 +67,7 @@ TTS requests are sent from the Next.js server, not directly from the browser. `A ## Provider Guides - [Kokoro-FastAPI](./tts-provider-guides/kokoro-fastapi) +- [KittenTTS-FastAPI](./tts-provider-guides/kitten-tts-fastapi) - [Orpheus-FastAPI](./tts-provider-guides/orpheus-fastapi) - [DeepInfra](./tts-provider-guides/deepinfra) - [OpenAI](./tts-provider-guides/openai) diff --git a/docs-site/docs/docker-quick-start.md b/docs-site/docs/docker-quick-start.md index 0fd8902..b700e35 100644 --- a/docs-site/docs/docker-quick-start.md +++ b/docs-site/docs/docker-quick-start.md @@ -8,7 +8,7 @@ import TabItem from '@theme/TabItem'; ## Prerequisites - A recent Docker version installed -- A TTS API server that OpenReader can reach (Kokoro-FastAPI, Orpheus-FastAPI, DeepInfra, OpenAI, or equivalent) +- A TTS API server that OpenReader can reach (Kokoro-FastAPI, KittenTTS-FastAPI, Orpheus-FastAPI, DeepInfra, OpenAI, or equivalent) :::note If you have suitable hardware, you can run Kokoro locally with Docker. See [Kokoro-FastAPI](./configure/tts-provider-guides/kokoro-fastapi). diff --git a/docs-site/docs/introduction.md b/docs-site/docs/introduction.md index f3ed2a3..2dc94ad 100644 --- a/docs-site/docs/introduction.md +++ b/docs-site/docs/introduction.md @@ -8,12 +8,13 @@ OpenReader is an open source text-to-speech document reader built with Next.js. > Previously named **OpenReader-WebUI**. -It supports multiple TTS providers including OpenAI, DeepInfra, and custom OpenAI-compatible endpoints such as [Kokoro-FastAPI](https://github.com/remsky/Kokoro-FastAPI) and [Orpheus-FastAPI](https://github.com/Lex-au/Orpheus-FastAPI). +It supports multiple TTS providers including OpenAI, DeepInfra, and custom OpenAI-compatible endpoints such as [Kokoro-FastAPI](https://github.com/remsky/Kokoro-FastAPI), [KittenTTS-FastAPI](https://github.com/richardr1126/KittenTTS-FastAPI), and [Orpheus-FastAPI](https://github.com/Lex-au/Orpheus-FastAPI). ## ✨ Highlights - 🎯 **Multi-Provider TTS Support** - [**Kokoro-FastAPI**](https://github.com/remsky/Kokoro-FastAPI): supports multi-voice combinations (for example `af_heart+af_bella`) + - [**KittenTTS-FastAPI**](https://github.com/richardr1126/KittenTTS-FastAPI): lightweight, CPU-friendly self-hosted TTS - [**Orpheus-FastAPI**](https://github.com/Lex-au/Orpheus-FastAPI) - **Custom OpenAI-compatible**: any TTS API with `/v1/audio/voices` and `/v1/audio/speech` endpoints - **Cloud TTS providers**: diff --git a/docs-site/sidebars.ts b/docs-site/sidebars.ts index d15a6f9..1e650bd 100644 --- a/docs-site/sidebars.ts +++ b/docs-site/sidebars.ts @@ -21,6 +21,7 @@ const sidebars: SidebarsConfig = { }, items: [ 'configure/tts-provider-guides/kokoro-fastapi', + 'configure/tts-provider-guides/kitten-tts-fastapi', 'configure/tts-provider-guides/orpheus-fastapi', 'configure/tts-provider-guides/deepinfra', 'configure/tts-provider-guides/openai', diff --git a/src/app/(public)/page.tsx b/src/app/(public)/page.tsx index 0acf138..59c1e15 100644 --- a/src/app/(public)/page.tsx +++ b/src/app/(public)/page.tsx @@ -6,7 +6,7 @@ export const metadata: Metadata = { description: 'OpenReader lets you upload EPUB, PDF, TXT, MD, and DOCX files for synchronized text-to-speech reading with multi-provider TTS support.', keywords: - 'PDF reader, EPUB reader, text to speech, tts open ai, kokoro tts, OpenReader, TTS PDF reader, ebook reader, epub tts, document reader', + 'PDF reader, EPUB reader, text to speech, tts open ai, kokoro tts, kitten tts, OpenReader, TTS PDF reader, ebook reader, epub tts, document reader', alternates: { canonical: '/', }, @@ -388,7 +388,7 @@ export default function LandingPage() { OpenReader highlights every word as it’s spoken, turning any document into a synchronized read-along experience. Connect any OpenAI-compatible TTS provider — including Kokoro, - Deepinfra, or your own self-hosted endpoint. + KittenTTS, Deepinfra, or your own self-hosted endpoint.