chore: remove OPENREADER_SETUP.md documentation file
- Deleted the OpenReader WebUI setup guide as it is no longer needed. - This file contained architecture details, component descriptions, and setup instructions for the application.
This commit is contained in:
parent
c286e3825f
commit
c46947b238
1 changed files with 0 additions and 208 deletions
|
|
@ -1,208 +0,0 @@
|
|||
# OpenReader WebUI Setup Guide
|
||||
|
||||
Document reader with high-quality text-to-speech using Groq's Orpheus TTS.
|
||||
|
||||
**URL:** http://localhost:3003
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||
│ OpenReader WebUI │────▶│ Groq TTS Proxy │────▶│ Groq API │
|
||||
│ (Docker :3003) │ │ (Python :8880) │ │ (Orpheus) │
|
||||
└─────────────────────┘ └──────────────────┘ └─────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────┐
|
||||
│ nginx (SSL :443) │
|
||||
│ your-domain.com
|
||||
└─────────────────────┘
|
||||
```
|
||||
|
||||
## Components
|
||||
|
||||
| Component | Location | Port | Purpose |
|
||||
|-----------|----------|------|---------|
|
||||
| OpenReader WebUI | Docker container | 3003 | PDF/EPUB reader UI |
|
||||
| Groq TTS Proxy | `scripts/groq-tts-proxy.py` | 8880 | Adds `/voices` endpoint, proxies to Groq |
|
||||
| nginx | `/etc/nginx/conf.d/openreader.conf` | 443 | SSL termination, reverse proxy |
|
||||
|
||||
## Files
|
||||
|
||||
```
|
||||
scripts/
|
||||
├── openreader-webui.sh # Startup script (run this to start everything)
|
||||
├── groq-tts-proxy.py # Python proxy server for Groq TTS
|
||||
├── .env # Contains GROQ_API_KEY
|
||||
└── OPENREADER_SETUP.md # This file
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Start Services
|
||||
```bash
|
||||
./scripts/openreader-webui.sh
|
||||
```
|
||||
|
||||
### Check Status
|
||||
```bash
|
||||
# Check if proxy is running
|
||||
curl http://localhost:8880/v1/audio/voices
|
||||
|
||||
# Check if container is running
|
||||
docker ps | grep openreader
|
||||
|
||||
# Check proxy logs
|
||||
cat /tmp/groq-proxy.log
|
||||
|
||||
# Check container logs
|
||||
docker logs openreader-webui --tail 50
|
||||
```
|
||||
|
||||
### Stop Services
|
||||
```bash
|
||||
# Stop container
|
||||
docker stop openreader-webui
|
||||
|
||||
# Stop proxy
|
||||
pkill -f groq-tts-proxy.py
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variable
|
||||
Create a `.env` file in the `scripts/` directory:
|
||||
```
|
||||
GROQ_API_KEY=gsk_xxxxx
|
||||
```
|
||||
|
||||
### Available Voices
|
||||
Groq Orpheus supports 6 voices:
|
||||
- **Male:** troy, austin, daniel
|
||||
- **Female:** autumn, diana, hannah
|
||||
|
||||
### TTS Model
|
||||
- Model: `canopylabs/orpheus-v1-english`
|
||||
- Output: WAV audio, 24kHz, 16-bit mono
|
||||
|
||||
## nginx Configuration
|
||||
|
||||
File: `/etc/nginx/conf.d/openreader.conf`
|
||||
|
||||
```nginx
|
||||
server {
|
||||
server_name your-domain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3003;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
}
|
||||
```
|
||||
|
||||
## Groq TTS Proxy
|
||||
|
||||
The proxy (`groq-tts-proxy.py`) serves two purposes:
|
||||
|
||||
1. **Provides `/v1/audio/voices` endpoint** - OpenReader needs this to populate the voice dropdown, but Groq doesn't have this endpoint
|
||||
2. **Proxies TTS requests** - Forwards `/v1/audio/speech` requests to Groq with correct model name and response format
|
||||
|
||||
### Endpoints
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
|----------|--------|-------------|
|
||||
| `/` | GET | Health check |
|
||||
| `/v1/audio/voices` | GET | Returns available voices |
|
||||
| `/v1/audio/speech` | POST | Generates speech audio |
|
||||
|
||||
### Request Example
|
||||
```bash
|
||||
curl -X POST http://localhost:8880/v1/audio/speech \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"input": "Hello world", "voice": "troy"}' \
|
||||
-o output.wav
|
||||
```
|
||||
|
||||
## Docker Container
|
||||
|
||||
### Image
|
||||
`ghcr.io/richardr1126/openreader-webui:latest`
|
||||
|
||||
### Volume
|
||||
Documents are stored in Docker volume `openreader_docstore` mounted at `/app/docstore`
|
||||
|
||||
### Environment Variables
|
||||
| Variable | Value | Description |
|
||||
|----------|-------|-------------|
|
||||
| `API_KEY` | `none` | Not needed (proxy handles auth) |
|
||||
| `API_BASE` | `http://host.docker.internal:8880/v1` | Points to local proxy |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Voices not showing in dropdown
|
||||
```bash
|
||||
# Check proxy is running
|
||||
curl http://localhost:8880/v1/audio/voices
|
||||
|
||||
# If not running, restart
|
||||
./scripts/openreader-webui.sh
|
||||
```
|
||||
|
||||
### TTS not working / Server not responding
|
||||
```bash
|
||||
# Test proxy directly
|
||||
curl -X POST http://localhost:8880/v1/audio/speech \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"input": "test", "voice": "troy"}' \
|
||||
-o /tmp/test.wav
|
||||
|
||||
# Check if valid audio
|
||||
file /tmp/test.wav
|
||||
# Should show: RIFF (little-endian) data, WAVE audio...
|
||||
```
|
||||
|
||||
### Document not loading (stuck on spinner)
|
||||
The document may have been deleted when the container was recreated. Re-upload the file.
|
||||
|
||||
### Port 8880 already in use
|
||||
```bash
|
||||
lsof -ti:8880 | xargs -r kill -9
|
||||
```
|
||||
|
||||
### SSL certificate renewal
|
||||
Certbot auto-renews. Manual renewal:
|
||||
```bash
|
||||
sudo certbot renew
|
||||
```
|
||||
|
||||
## Supported File Types
|
||||
|
||||
- PDF
|
||||
- EPUB
|
||||
- TXT
|
||||
- MD (Markdown)
|
||||
- DOCX
|
||||
|
||||
## Limitations
|
||||
|
||||
- Groq Orpheus has a **200 character limit** per TTS request
|
||||
- OpenReader handles chunking automatically
|
||||
- Only English voice model available via Groq (Arabic Saudi dialect also available)
|
||||
|
||||
## Links
|
||||
|
||||
- [OpenReader WebUI GitHub](https://github.com/richardr1126/OpenReader-WebUI)
|
||||
- [Groq Orpheus TTS Docs](https://console.groq.com/docs/text-to-speech/orpheus)
|
||||
- [Groq Console](https://console.groq.com)
|
||||
Loading…
Reference in a new issue