From ded009d900eefef6fcb2665cacfe18555e52e604 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Wed, 15 Apr 2026 21:47:14 +0200 Subject: [PATCH] bug-fixes --- .gitignore | 1 + docker-compose.dev.yml | 40 ++++++++++++++++++++++++++++++++ package.json | 1 + scripts/start-local-ancillary.sh | 12 ++++++++++ 4 files changed, 54 insertions(+) create mode 100644 scripts/start-local-ancillary.sh diff --git a/.gitignore b/.gitignore index 618edc7e..e32ba63c 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ dev-dist public/.og-image.raster.svg .venv-i18n +.local-piper-data scripts/i18n-overrides/.gaps diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index f1761b40..e545fc43 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -60,6 +60,46 @@ services: - jumble restart: unless-stopped + # Wyoming Piper + HTTP bridge (read-aloud). Profile local-tts — matches vite /api/piper-tts → :9876, Wyoming :10200. + # Mount voices under ./.local-piper-data/voices (see PROXY_SETUP.md) or use your existing piper-data path. + piper-wyoming: + image: silberengel/wyoming-piper:latest + profiles: ['local-tts'] + container_name: jumble-piper-wyoming + command: + - --voice + - en_US-lessac-medium + - --uri + - tcp://0.0.0.0:10200 + - --data-dir + - /data + volumes: + - ./.local-piper-data:/data + expose: + - '10200' + networks: + - jumble + restart: unless-stopped + + piper-tts-proxy: + profiles: ['local-tts'] + container_name: jumble-piper-tts-proxy + build: + context: . + dockerfile: services/piper-tts-proxy/Dockerfile + environment: + NODE_ENV: production + PORT: '9876' + PIPER_TTS_HOST: piper-wyoming + PIPER_TTS_PORT: '10200' + ports: + - '127.0.0.1:9876:9876' + depends_on: + - piper-wyoming + networks: + - jumble + restart: unless-stopped + volumes: relay-data: diff --git a/package.json b/package.json index afe6bc01..79a32429 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "dev": "vite --host", "dev:refresh": "rm -rf node_modules/.vite && vite --host", "docker:editor-tools": "docker compose -f docker-compose.dev.yml --profile editor-tools up -d languagetool libretranslate", + "docker:local-ancillary": "docker compose -f docker-compose.dev.yml --profile editor-tools --profile local-tts up -d languagetool libretranslate piper-wyoming piper-tts-proxy", "piper-tts-proxy": "cross-env NODE_ENV=development npx --yes tsx services/piper-tts-proxy/http.ts", "build": "tsc -b && vite build", "lint": "eslint .", diff --git a/scripts/start-local-ancillary.sh b/scripts/start-local-ancillary.sh new file mode 100644 index 00000000..f37f3b2f --- /dev/null +++ b/scripts/start-local-ancillary.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# Start LanguageTool, LibreTranslate, Wyoming Piper, and the Piper HTTP proxy (Docker). +# Run the app separately: npm run dev +# Optional .env.local (Vite): VITE_READ_ALOUD_TTS_URL=/api/piper-tts VITE_LANGUAGE_TOOL_URL=/api/languagetool VITE_TRANSLATE_URL=/api/translate +set -euo pipefail +cd "$(dirname "$0")/.." +mkdir -p .local-piper-data +npm run docker:local-ancillary +echo +echo "Ancillary stack is up (LanguageTool :8010, LibreTranslate :5000, Piper proxy :9876)." +echo "Wyoming Piper listens inside Docker only; the HTTP proxy on 127.0.0.1:9876 forwards to it." +echo "Next: npm run dev"