Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ curl -s -X POST http://localhost:8000/v1/synthesize \

> **First start** downloads the selected language models (~240 MB each) into a persistent Docker volume. Every restart after that is instant — models are already cached.

**Browser demo:** `http://localhost:8000/demo` (or `:8080` behind nginx in production). A single static page, served same-origin by the app itself — no build step, no extra dependency. Lets you pick a voice (with language/provider/gender filters), type an utterance, and hear it synthesized in-browser, with the equivalent `curl` command and raw response shown alongside. A "Developer tools" panel exposes the rest of the request body (format, bitrate, speed, pitch, sample rate, SSML, word-boundary mode) — fields confirmed to actually affect output are called out separately from ones the current provider silently ignores (see [`docs/API.md`](docs/API.md) "Not implemented").

### Production

```bash
Expand Down
14 changes: 7 additions & 7 deletions app/data/voices/pocket/voices.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"originalName": "alba",
"voiceURI": "urn:readium:tts:pocket:en-alba",
"language": "en",
"gender": "female",
"gender": "male",
"quality": "normal",
"preloaded": true,
"provider": "pocket",
Expand Down Expand Up @@ -526,7 +526,7 @@
"originalName": "alba",
"voiceURI": "urn:readium:tts:pocket:fr-alba",
"language": "fr",
"gender": "female",
"gender": "male",
"quality": "normal",
"preloaded": true,
"provider": "pocket",
Expand Down Expand Up @@ -1046,7 +1046,7 @@
"originalName": "alba",
"voiceURI": "urn:readium:tts:pocket:it-alba",
"language": "it",
"gender": "female",
"gender": "male",
"quality": "normal",
"preloaded": true,
"provider": "pocket",
Expand Down Expand Up @@ -1566,7 +1566,7 @@
"originalName": "alba",
"voiceURI": "urn:readium:tts:pocket:de-alba",
"language": "de",
"gender": "female",
"gender": "male",
"quality": "normal",
"preloaded": true,
"provider": "pocket",
Expand Down Expand Up @@ -2086,7 +2086,7 @@
"originalName": "alba",
"voiceURI": "urn:readium:tts:pocket:es-alba",
"language": "es",
"gender": "female",
"gender": "male",
"quality": "normal",
"preloaded": true,
"provider": "pocket",
Expand Down Expand Up @@ -2606,7 +2606,7 @@
"originalName": "alba",
"voiceURI": "urn:readium:tts:pocket:pt-alba",
"language": "pt",
"gender": "female",
"gender": "male",
"quality": "normal",
"preloaded": true,
"provider": "pocket",
Expand Down Expand Up @@ -3119,4 +3119,4 @@
],
"pitchControl": false
}
]
]
5 changes: 5 additions & 0 deletions app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from contextlib import asynccontextmanager

from fastapi import FastAPI
from fastapi.responses import FileResponse
from starlette.middleware.trustedhost import TrustedHostMiddleware

from app.api.errors import register_error_handlers
Expand Down Expand Up @@ -72,6 +73,10 @@ def create_app() -> FastAPI:
app.include_router(health_router)
app.include_router(v1_router, prefix=settings.api_v1_prefix)

@app.get("/demo", include_in_schema=False)
async def demo() -> FileResponse:
return FileResponse("app/static/demo.html")

return app


Expand Down
Loading
Loading