From ca3e66f17a7d7cb1e25e120219fb9fc5293af4fc Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 9 Dec 2025 11:37:55 +0100 Subject: [PATCH] Fix XTTS loader compatibility and add default voice --- AGENTS.md | 31 ++++++ GEMINI.md | 133 ++++++++++++++++++++++++++ Makefile | 94 ++++++++---------- docker-compose.yml | 91 +++++++++--------- gateway/api/openai_speech.py | 1 + gateway/core/queue_client.py | 2 +- gateway/port.txt | 1 + worker/Dockerfile | 3 +- worker/engine/audio_export.py | 44 ++++++--- worker/engine/xtts2_loader.py | 169 +++++++++++++++++++++++++++++++-- worker/main.py | 20 +++- worker/requirements.worker.txt | 5 + worker/voices/README.md | 17 ++++ worker/voices/default.wav | Bin 0 -> 115082 bytes 14 files changed, 483 insertions(+), 128 deletions(-) create mode 100644 AGENTS.md create mode 100644 GEMINI.md create mode 100644 gateway/port.txt create mode 100644 worker/voices/README.md create mode 100644 worker/voices/default.wav diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..9d0cfe8 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,31 @@ +# Repository Guidelines + +## Project Structure & Modules +- Gateway (`gateway/`): FastAPI entrypoint in `main.py`, routes under `api/` (`health.py`, `openai_speech.py`, `voices.py`), shared helpers in `core/`, voice registry in `voices/` and runtime port in `port.txt`. +- Worker (`worker/`): Queue consumer in `core/queue_worker.py`, XTTS2 synthesis in `engine/xtts2_loader.py`, audio export in `engine/audio_export.py`, voice assets in `voices/`. +- Tooling: `Makefile` drives Docker workflow, `docker-compose.yml` wires gateway/worker/redis, helper scripts in `scripts/` (`find_port.py`, `selftest.py`). + +## Build, Test, and Run +- `make build` – build gateway + worker images. +- `make up` – start stack with auto port selection (writes `gateway/port.txt`). +- `make status` / `make logs` – check containers and follow logs. +- `make selftest` – end-to-end smoke test against the running stack (health + sample synthesis). +- Local debug (no Docker): install deps with `pip install -r gateway/requirements.gateway.txt` and `pip install -r worker/requirements.worker.txt`, then `python gateway/main.py` and `python worker/main.py`; start Redis via `docker run -p 6379:6379 redis:7`. + +## Coding Style & Naming +- Python, prefer PEP8 with 4-space indents and snake_case names for modules, functions, and vars; keep route names aligned with OpenAI-compatible paths (`/v1/audio/speech`, `/v1/voices/register`). +- Keep modules small and focused (API logic in `gateway/api`, queue/Redis helpers in `core`). +- Favor explicit config via env vars (`REDIS_HOST`, `GATEWAY_PORT`); avoid hardcoded ports besides the 8000–8100 scan range. + +## Testing Guidelines +- Primary check is the smoke test: run `make selftest` after changes that touch API, queue, or audio paths. +- For new logic, add lightweight unit tests (e.g., under `gateway/tests/` or `worker/tests/`) named `test_.py`; prefer pytest-style asserts. +- When adding audio or queue code, include sanity checks (e.g., validate `mime` and byte length) to avoid silent failures. + +## Commit & Pull Request Practices +- Commits: short, imperative subjects (e.g., `add queue timeout guard`, `tune xtts export`). Group related changes; avoid mixing refactors with feature work. +- Pull Requests: describe intent, list test commands executed (e.g., `make selftest`), mention affected endpoints or worker behaviors, and link issues when available. Provide screenshots or audio sample paths only if UX or output format changes. + +## Security & Operations Notes +- Do not commit voice assets beyond small samples; keep secrets out of the repo and prefer env vars or Docker secrets. +- Gateway listens on the selected local port only; expose externally via reverse proxy/HTTPS in production. Keep worker services internal and behind the queue. diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 0000000..266596e --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,133 @@ +# XTTS2 OpenAI-Compatible TTS Server + +## Project Overview + +This project is a high-performance, modular, and scalable Text-to-Speech (TTS) platform. It provides an API fully compatible with the **OpenAI Speech API**, powered by the **XTTS2** model for high-quality synthesis and zero-shot voice cloning. + +### Architecture + +The system follows a distributed architecture: + +* **Gateway (`gateway/`):** A FastAPI service that handles HTTP requests, validates input, and manages the voice registry. It pushes synthesis jobs to a Redis queue. It features dynamic port selection (8000-8100). +* **Redis:** Acts as the message broker (Queue) and cache between the Gateway and Workers. +* **Worker (`worker/`):** A background service that pulls jobs from Redis, performs the actual TTS inference using XTTS2 (with GPU acceleration if available), and returns the audio data. These can be scaled horizontally. + +### Key Technologies + +* **Language:** Python 3.10+ +* **Framework:** FastAPI (Gateway) +* **ML Model:** Coqui XTTS v2 +* **Infrastructure:** Docker, Docker Compose, Redis +* **Tooling:** Makefile for orchestration + +## Building and Running + +The project relies heavily on `make` for orchestration. + +### Docker (Recommended) + +1. **Build Images:** + ```bash + make build + ``` + +2. **Start Services:** + ```bash + make up + ``` + * This runs a port scanner to find a free port between 8000-8100. + * The chosen port is saved to `gateway/port.txt`. + +3. **Check Status:** + ```bash + make status + ``` + +4. **View Logs:** + ```bash + make logs + ``` + +5. **Stop Services:** + ```bash + make down + ``` + +### Scaling Workers + +To handle higher load, you can spawn multiple worker containers: + +```bash +make worker-scale N=3 +``` + +### Verification + +Run the self-test suite to verify Redis connectivity, worker processing, and audio synthesis: + +```bash +make selftest +``` + +## Development Conventions + +### Project Structure + +* `gateway/`: Code for the API server. + * `main.py`: Entry point. + * `api/`: Endpoint definitions (`openai_speech.py`, `voices.py`). + * `core/`: Configuration and utilities. +* `worker/`: Code for the inference engine. + * `engine/`: XTTS2 model loading and audio export logic. + * `core/`: Queue processing and GPU detection. +* `scripts/`: Utility scripts (e.g., `find_port.py`, `selftest.py`). + +### Local Development (Non-Docker) + +1. Create a virtual environment: + ```bash + python3 -m venv .venv + source .venv/bin/activate + ``` +2. Install dependencies: + ```bash + pip install -r gateway/requirements.gateway.txt + pip install -r worker/requirements.worker.txt + ``` +3. Run Redis locally (e.g., `docker run -p 6379:6379 redis:7`). +4. Start Gateway: `python gateway/main.py` +5. Start Worker: `python worker/main.py` + +### API Usage + +The API mirrors OpenAI's structure. + +**Generate Audio:** +```http +POST /v1/audio/speech +Content-Type: application/json + +{ + "model": "xtts-v2", + "input": "Hello world", + "voice": "auto", + "format": "wav" +} +``` + +**Register Voice:** +```http +POST /v1/voices/register +Content-Type: application/json + +{ + "name": "my-voice", + "samples": ["https://example.com/sample.wav"] +} +``` + +### Logging & Debugging + +* **Gateway Logs:** `gateway/logs/gateway.log` +* **Port Info:** `gateway/port.txt` contains the active port. +* **GPU:** Workers will automatically detect and use CUDA if available. Check `nvidia-smi` to monitor usage. diff --git a/Makefile b/Makefile index aecc3cc..9682fa9 100644 --- a/Makefile +++ b/Makefile @@ -10,120 +10,100 @@ DOCKER := docker compose .DEFAULT_GOAL := help help: -@echo "" -@echo "🚀 XTTS2 TTS Server – Makefile (Pro Mode)" -@echo "-------------------------------------------" -@echo " make build → Images bauen (Gateway + Worker)" -@echo " make up → Services starten (mit Portscan)" -@echo " make down → Services stoppen" -@echo " make restart → Neustart" -@echo " make logs → Logs aller Services anzeigen" -@echo " make status → Docker Status" -@echo " make worker-scale N=3 → Worker skalieren" -@echo " make prune → Docker aufräumen" -@echo " make selftest → System-Selbsttest" -@echo " make port → Zeigt aktuellen Gateway Port" -@echo "-------------------------------------------" + @echo "" + @echo "🚀 XTTS2 TTS Server – Makefile (Pro Mode)" + @echo "-------------------------------------------" + @echo " make build → Images bauen (Gateway + Worker)" + @echo " make up → Services starten (mit Portscan)" + @echo " make down → Services stoppen" + @echo " make restart → Neustart" + @echo " make logs → Logs aller Services anzeigen" + @echo " make status → Docker Status" + @echo " make worker-scale N=3 → Worker skalieren" + @echo " make prune → Docker aufräumen" + @echo " make selftest → System-Selbsttest" + @echo " make port → Zeigt aktuellen Gateway Port" + @echo "-------------------------------------------" # --------------------------------------------------------- - # Build - # --------------------------------------------------------- build: -$(DOCKER) build + $(DOCKER) build # --------------------------------------------------------- - # Deploy - # --------------------------------------------------------- up: -@echo "🔍 Suche freien Port zwischen 8000–8100..." -@PORT=`$(PYTHON) $(PORT_SCRIPT)`; -if [ "$$PORT" = "ERR_NO_FREE_PORT" ]; then -echo "❌ Kein freier Port gefunden!"; exit 1; -fi; -echo "🎧 Freier Port gefunden: $$PORT"; -echo "$$PORT" > $(PORT_FILE); -echo "📄 Port gespeichert in $(PORT_FILE)"; -export GATEWAY_PORT=$$PORT; -$(DOCKER) up -d --build; -echo "🚀 Gateway läuft auf [http://localhost:$$PORT](http://localhost:$$PORT)" + @echo "🔍 Suche freien Port zwischen 8000–8100..." + @PORT=`$(PYTHON) $(PORT_SCRIPT)`; \ + if [ "$$PORT" = "ERR_NO_FREE_PORT" ]; then \ + echo "❌ Kein freier Port gefunden!"; exit 1; \ + fi; \ + echo "🎧 Freier Port gefunden: $$PORT"; \ + echo "$$PORT" > $(PORT_FILE); \ + echo "📄 Port gespeichert in $(PORT_FILE)"; \ + export GATEWAY_PORT=$$PORT; \ + $(DOCKER) up -d --build; \ + echo "🚀 Gateway läuft auf http://localhost:$$PORT" # --------------------------------------------------------- - # Stop - # --------------------------------------------------------- down: -$(DOCKER) down + $(DOCKER) down # --------------------------------------------------------- - # Restart - # --------------------------------------------------------- restart: down up # --------------------------------------------------------- - # Logs - # --------------------------------------------------------- logs: -$(DOCKER) logs -f + $(DOCKER) logs -f # --------------------------------------------------------- - # Status - # --------------------------------------------------------- status: -$(DOCKER) ps + $(DOCKER) ps # --------------------------------------------------------- - # Worker Scaling - # --------------------------------------------------------- worker-scale: -@if [ -z "$(N)" ]; then echo "Bitte N angeben: make worker-scale N=3"; exit 1; fi -$(DOCKER) up -d --scale worker=$(N) + @if [ -z "$(N)" ]; then echo "Bitte N angeben: make worker-scale N=3"; exit 1; fi + $(DOCKER) up -d --scale worker=$(N) # --------------------------------------------------------- - # Cleanup - # --------------------------------------------------------- prune: -$(DOCKER) down -docker system prune -f + $(DOCKER) down + docker system prune -f # --------------------------------------------------------- - # Selftest - # --------------------------------------------------------- selftest: -@echo "🧪 Starte Selbsttest..." -$(PYTHON) scripts/selftest.py + @echo "🧪 Starte Selbsttest..." + $(PYTHON) scripts/selftest.py # --------------------------------------------------------- - # Show Port - # --------------------------------------------------------- port: -@echo "📡 Aktueller Port:" -@cat $(PORT_FILE) + @echo "📡 Aktueller Port:" + @cat $(PORT_FILE) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 5c1cf2d..d4140e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,54 +1,55 @@ # docker-compose.yml – XTTS2 TTS Server - -# Multi-Service Orchestrierung (Gateway, Worker, Redis) - version: "3.9" services: -redis: -image: redis:7 -container_name: redis -restart: always -ports: -- "6379:6379" + redis: + image: redis:7 + container_name: redis + restart: always + ports: + - "6379:6379" -gateway: -build: -context: ./gateway -dockerfile: Dockerfile -container_name: tts-gateway -restart: always -environment: -- REDIS_HOST=redis -- GATEWAY_PORT=${GATEWAY_PORT} -volumes: -- ./gateway/voices:/app/voices -- ./gateway/logs:/app/logs -- ./gateway/port.txt:/app/port.txt -ports: -- "${GATEWAY_PORT}:8000" -depends_on: -- redis + gateway: + build: + context: ./gateway + dockerfile: Dockerfile + container_name: tts-gateway + restart: always + environment: + - REDIS_HOST=redis + - GATEWAY_PORT=${GATEWAY_PORT} + volumes: + - ./gateway/voices:/app/voices + - ./gateway/logs:/app/logs + - ./gateway/port.txt:/app/port.txt + ports: + - "${GATEWAY_PORT:-8000}:${GATEWAY_PORT:-8000}" + depends_on: + - redis + + worker: + build: + context: ./worker + dockerfile: Dockerfile + container_name: tts-worker + restart: always + environment: + - REDIS_HOST=redis + - GPU_MODE=AUTO + deploy: + resources: + reservations: + devices: + - capabilities: [gpu] + volumes: + - ./worker/voices:/app/voices + - tts-models:/root/.local/share/tts + depends_on: + - redis -worker: -build: -context: ./worker -dockerfile: Dockerfile -container_name: tts-worker -restart: always -environment: -- REDIS_HOST=redis -- GPU_MODE=AUTO -deploy: -resources: -reservations: -devices: -- capabilities: [gpu] volumes: -- ./worker/voices:/app/voices -depends_on: -- redis + tts-models: networks: -default: -name: wlkns-net + default: + name: wlkns-net \ No newline at end of file diff --git a/gateway/api/openai_speech.py b/gateway/api/openai_speech.py index afbea33..d938362 100644 --- a/gateway/api/openai_speech.py +++ b/gateway/api/openai_speech.py @@ -8,6 +8,7 @@ class SpeechRequest(BaseModel): model: str input: str voice: str = "auto" + language: str | None = None format: str = "wav" voice_sample_url: str | None = None voice_sample_base64: str | None = None diff --git a/gateway/core/queue_client.py b/gateway/core/queue_client.py index 825fb3e..6cf3715 100644 --- a/gateway/core/queue_client.py +++ b/gateway/core/queue_client.py @@ -12,7 +12,7 @@ def push_job(data: dict) -> str: r.lpush(QUEUE, json.dumps(data)) return job_id -def await_result(job_id: str, timeout=30): +def await_result(job_id: str, timeout=120): key = f"{RESULT}:{job_id}" start=time.time() while time.time()-start < timeout: diff --git a/gateway/port.txt b/gateway/port.txt new file mode 100644 index 0000000..7db58ac --- /dev/null +++ b/gateway/port.txt @@ -0,0 +1 @@ +8003 \ No newline at end of file diff --git a/worker/Dockerfile b/worker/Dockerfile index 98b00a1..b495b6e 100644 --- a/worker/Dockerfile +++ b/worker/Dockerfile @@ -1,7 +1,8 @@ FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 AS base +ENV PYTHONUNBUFFERED=1 WORKDIR /app COPY requirements.worker.txt . -RUN apt-get update && apt-get install -y python3-pip ffmpeg +RUN apt-get update && apt-get install -y python3-pip ffmpeg espeak-ng RUN pip3 install -r requirements.worker.txt COPY . . CMD ["python3","main.py"] diff --git a/worker/engine/audio_export.py b/worker/engine/audio_export.py index 544dee5..2e8b43e 100644 --- a/worker/engine/audio_export.py +++ b/worker/engine/audio_export.py @@ -1,19 +1,39 @@ from pydub import AudioSegment import io +import numpy as np -def convert_audio(raw_bytes: bytes, fmt: str): - # raw mono 32-bit float fake waveform +def convert_audio(audio_data, fmt: str, sample_rate: int = 24000): + """ + Converts raw audio data (numpy array or list of floats) to the target format. + Assumes mono audio. + """ + # Ensure numpy array + if not isinstance(audio_data, np.ndarray): + audio_data = np.array(audio_data) + + # Check if float and normalize/convert to int16 + if audio_data.dtype.kind == 'f': + # Clip to Avoid wrap-around + audio_data = np.clip(audio_data, -1.0, 1.0) + # Convert to 16-bit PCM + audio_data = (audio_data * 32767).astype(np.int16) + seg = AudioSegment( - raw_bytes, - frame_rate=22050, - sample_width=4, + audio_data.tobytes(), + frame_rate=sample_rate, + sample_width=2, # 16-bit channels=1 ) - buf=io.BytesIO() + + buf = io.BytesIO() seg.export(buf, format=fmt) - mime={ - "wav":"audio/wav", - "mp3":"audio/mpeg", - "ogg":"audio/ogg" - }.get(fmt,"audio/wav") - return buf.getvalue(), mime + + mime = { + "wav": "audio/wav", + "mp3": "audio/mpeg", + "ogg": "audio/ogg", + "flac": "audio/flac", + "aac": "audio/aac" + }.get(fmt, "audio/wav") + + return buf.getvalue(), mime \ No newline at end of file diff --git a/worker/engine/xtts2_loader.py b/worker/engine/xtts2_loader.py index 266d3d2..b2d1267 100644 --- a/worker/engine/xtts2_loader.py +++ b/worker/engine/xtts2_loader.py @@ -1,10 +1,163 @@ -# Dummy XTTS2 logic placeholder -# Replace with real TTS model loading +import os +# Auto-agree to Coqui TOS (Must be before imports) +os.environ["COQUI_TOS_AGREED"] = "1" + +import json +import base64 +import tempfile +import requests +import torch +import numpy as np + +# Singleton for lazy loading +_model = None + +def _allow_xtts_config_pickle(): + """Allow loading XTTS configs with torch >=2.6 safe loading.""" + add_safe = getattr(torch.serialization, "add_safe_globals", None) + if not add_safe: + return + allowed = [] + try: + from TTS.tts.configs.xtts_config import XttsConfig + from TTS.tts.models.xtts import XttsAudioConfig + allowed += [XttsConfig, XttsAudioConfig] + except Exception as e: + print(f"⚠️ Could not register safe globals for XTTS config: {e}") + try: + import TTS.config.shared_configs as shared_configs + allowed += [v for v in shared_configs.__dict__.values() if isinstance(v, type)] + except Exception as e: + print(f"⚠️ Could not register shared config globals: {e}") + try: + import TTS.tts.models.xtts as xtts_models + allowed += [v for v in xtts_models.__dict__.values() if isinstance(v, type)] + except Exception as e: + print(f"⚠️ Could not register XTTS model globals: {e}") + if allowed: + add_safe(allowed) + +def get_model(): + global _model + if _model is None: + print("⏳ Loading XTTS Model (Lazy Load)....") + # Lazy Import to prevent startup hang + from TTS.api import TTS + _allow_xtts_config_pickle() + + device = "cuda" if torch.cuda.is_available() else "cpu" + print(f"🔧 XTTS Running on: {device}") + + # Load Model (download if needed) + # Using default XTTS v2 model + _model = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device) + print("✅ XTTS Model loaded successfully.") + return _model def synthesize(job: dict): - # return artificial sine wave placeholder - import numpy as np - sr=22050 - t=np.linspace(0,0.3,int(sr*0.3)) - tone=(0.1*np.sin(2*np.pi*440*t)).astype('float32') - return tone.tobytes() + from langdetect import detect + model = get_model() + ... + + text = job.get("input") + if not text: + raise ValueError("No input text provided") + + # Language handling + language = job.get("language") + if not language: + try: + # Simple detection + detected = detect(text) + # XTTS expects 2-letter codes usually. + # We assume detected is valid or mapped if needed. + # Supported: en, es, fr, de, it, pt, pl, tr, ru, nl, cs, ar, zh-cn, ja, hu, ko + language = detected + print(f"🌍 Auto-detected language: {language}") + except: + language = "en" + print("⚠️ Language detection failed, using 'en'") + + # Speaker Handling + speaker_wav = None + temp_files = [] + + try: + # Priority 1: Direct URL + if job.get("voice_sample_url"): + try: + print(f"⬇️ Downloading voice sample from {job['voice_sample_url']}") + r = requests.get(job["voice_sample_url"], timeout=10) + r.raise_for_status() + t = tempfile.NamedTemporaryFile(suffix=".wav", delete=False) + t.write(r.content) + t.close() + speaker_wav = t.name + temp_files.append(t.name) + except Exception as e: + print(f"❌ Failed to download voice sample: {e}") + + # Priority 2: Base64 + if not speaker_wav and job.get("voice_sample_base64"): + try: + b64 = job["voice_sample_base64"] + decoded = base64.b64decode(b64) + t = tempfile.NamedTemporaryFile(suffix=".wav", delete=False) + t.write(decoded) + t.close() + speaker_wav = t.name + temp_files.append(t.name) + except Exception as e: + print(f"❌ Failed to decode base64 voice: {e}") + + # Priority 3: Registry / Local File + if not speaker_wav: + voice_id = job.get("voice", "auto") + if voice_id and voice_id != "auto": + # Look in worker/voices/ + base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + voice_path = os.path.join(base_dir, "voices", f"{voice_id}.wav") + + # Check for other extensions if wav missing + if not os.path.exists(voice_path): + for ext in [".mp3", ".ogg", ".m4a"]: + p = os.path.join(base_dir, "voices", f"{voice_id}{ext}") + if os.path.exists(p): + voice_path = p + break + + if os.path.exists(voice_path): + speaker_wav = voice_path + print(f"🗣️ Using registered voice: {voice_id}") + else: + print(f"⚠️ Voice '{voice_id}' not found in registry.") + + # Priority 4: Default/Auto Voice + if not speaker_wav: + # Fallback to a default file if it exists + base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + default_path = os.path.join(base_dir, "voices", "default.wav") + if os.path.exists(default_path): + speaker_wav = default_path + print("⚠️ Using default.wav") + else: + # If completely nothing, we can't synthesize with XTTS + # Unless we use speaker_idxs (only for multi-speaker models w/o cloning?) + # XTTS v2 IS zero-shot, needs reference. + raise ValueError("No speaker reference found (url, base64, registry, or default.wav)") + + # Run Inference + print(f"🎤 Synthesizing: '{text[:30]}...' Lang: {language}") + + # XTTS API returns List[float] + wav = model.tts(text=text, speaker_wav=speaker_wav, language=language) + + return wav + + finally: + # Cleanup + for f in temp_files: + try: + os.remove(f) + except: + pass diff --git a/worker/main.py b/worker/main.py index 12a32f3..94f2501 100644 --- a/worker/main.py +++ b/worker/main.py @@ -1,9 +1,14 @@ +print("DEBUG: Starting worker...", flush=True) import time, json, os +print("DEBUG: Imported stdlib", flush=True) from core.queue_worker import fetch_job, store_result +print("DEBUG: Imported queue_worker", flush=True) from engine.xtts2_loader import synthesize +print("DEBUG: Imported xtts2_loader", flush=True) from engine.audio_export import convert_audio +print("DEBUG: Imported audio_export", flush=True) -print("Worker gestartet. Warte auf Jobs…") +print("Worker gestartet. Warte auf Jobs…", flush=True) while True: job = fetch_job() @@ -11,6 +16,13 @@ while True: time.sleep(0.1) continue - audio = synthesize(job) - out, mime = convert_audio(audio, job.get("format","wav")) - store_result(job["job_id"], out, mime) + try: + start = time.time() + print(f"🔄 Processing Job {job['job_id']}...", flush=True) + audio = synthesize(job) + out, mime = convert_audio(audio, job.get("format","wav")) + store_result(job["job_id"], out, mime) + print(f"✅ Job {job['job_id']} done in {time.time()-start:.2f}s") + except Exception as e: + print(f"❌ Error processing job {job.get('job_id')}: {e}") + # Optional: Store error state if protocol supports it diff --git a/worker/requirements.worker.txt b/worker/requirements.worker.txt index 2316200..bfa82b9 100644 --- a/worker/requirements.worker.txt +++ b/worker/requirements.worker.txt @@ -3,3 +3,8 @@ redis torch numpy requests +transformers==4.42.4 +TTS==0.22.0 +scipy +langdetect +torchcodec diff --git a/worker/voices/README.md b/worker/voices/README.md new file mode 100644 index 0000000..a4c3c36 --- /dev/null +++ b/worker/voices/README.md @@ -0,0 +1,17 @@ +# Voice Registry + +Place `.wav` files here to register them as permanent voices. + +## Usage + +If you place a file named `narrator.wav` in this directory: + +1. Restart the worker (or mount this volume dynamically). +2. Send a request with `"voice": "narrator"`. + +The system will use this file as the speaker reference for XTTS cloning. + +## Formats + +Supported formats: `.wav`, `.mp3`, `.ogg`, `.m4a`. +Recommended: Mono, 22050Hz or 24000Hz WAV (16-bit). diff --git a/worker/voices/default.wav b/worker/voices/default.wav new file mode 100644 index 0000000000000000000000000000000000000000..4d0ce3c5657b8780404fb8485c0c5fa150a98533 GIT binary patch literal 115082 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�q;bY_#Q0ABk>)pocpAoi;fdW@3(HR^EouSInm-vp@ z4c_(NiD|ImKxCUs#9m@0F%?YKtHJ3W4egYA&|zvsbc43dD55SDZ9Jf3fwN@zYbti0 zLa>Kb1_pSO9E8l&n;?mY@;zvTUWckp8h&~RR^~HMxv2oVNe`5>0or7W8Ci5hXy24wb%vdd)%UCyXB+

rq*%@lH9|<*Sfo>E{7@^kIgD53h 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 literal 0 HcmV?d00001