Switch the default TTS engine from online Edge TTS to offline GPU MeloTTS (privacy-first: reply text never leaves the host). Adds a supervisord melo-worker program that runs in full/bot/brain roles and synthesises Korean on the GPU (MELO_DEVICE=cuda, MELO_SPEED=1.5), a baked /opt/melo py3.11 venv layer in the Dockerfile, and compose/env defaults. Edge TTS stays available as an opt-in online fallback via TTS_ENGINE=edge. Verified on the RTX 5050 (Blackwell sm_120): melo-worker logs "ready (lang=KR speed=1.5 device=cuda)", /health returns ok, and a /synth round-trip returns a 177KB WAV. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
116 lines
3.8 KiB
Plaintext
116 lines
3.8 KiB
Plaintext
[supervisord]
|
|
nodaemon=true
|
|
user=root
|
|
logfile=/var/log/supervisord.log
|
|
pidfile=/run/supervisord.pid
|
|
|
|
[unix_http_server]
|
|
file=/run/supervisor.sock
|
|
|
|
[supervisorctl]
|
|
serverurl=unix:///run/supervisor.sock
|
|
|
|
[rpcinterface:supervisor]
|
|
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
|
|
|
[program:xvnc]
|
|
command=/app/docker/run-if-role.sh full,browser,app /app/docker/run-xvnc.sh
|
|
priority=100
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:pulse]
|
|
command=/app/docker/run-if-role.sh full,browser,app /app/docker/run-pulse.sh
|
|
priority=150
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:xfce]
|
|
command=/app/docker/run-if-role.sh full,browser,app /app/docker/run-xfce.sh
|
|
priority=200
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:novnc]
|
|
command=/app/docker/run-if-role.sh full,browser,app websockify --web=/usr/share/novnc 6080 localhost:5901
|
|
priority=250
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:melo-worker]
|
|
; Warm GPU MeloTTS Korean voice (offline) in its own py3.11 venv (/opt/melo). The
|
|
; bridge's synthesize() POSTs here when TTS_ENGINE=melo. Runs wherever the bridge
|
|
; runs (full/bot/brain) so a GPU brain host serves TTS on the GPU. If TTS_ENGINE
|
|
; =edge the bridge synthesises in-process and never calls this worker.
|
|
command=/app/docker/run-if-role.sh full,bot,brain /opt/melo/bin/python /app/bridge/melo_worker.py
|
|
directory=/app
|
|
; HF_HOME points at the dedicated, image-baked melo cache (warmed in
|
|
; setup-melo.sh). The whisper_cache volume is mounted over /root/.cache/huggingface,
|
|
; so without this the pre-cached BERT + KR checkpoint would be shadowed and
|
|
; re-downloaded (and would fail offline). HF_HUB_OFFLINE/TRANSFORMERS_OFFLINE
|
|
; force pure-cache reads. MELO_DEVICE/MELO_SPEED inherit from the container env
|
|
; (compose sets both with defaults cuda / 1.5), so MELO_SPEED must always be set
|
|
; in the env or this %(ENV_x)s expansion fails at startup (compose guarantees it).
|
|
environment=MELO_LANGUAGE="KR",MELO_SPEED="%(ENV_MELO_SPEED)s",MELO_DEVICE="%(ENV_MELO_DEVICE)s",MELO_WORKER_HOST="127.0.0.1",MELO_WORKER_PORT="8770",HF_HOME="/opt/melo-cache",HF_HUB_OFFLINE="1",TRANSFORMERS_OFFLINE="1"
|
|
priority=280
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:bridge]
|
|
command=/app/docker/run-if-role.sh full,bot,brain /opt/venv/bin/python -m bridge.server
|
|
directory=/app
|
|
priority=300
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:chrome]
|
|
command=/app/docker/run-if-role.sh full,browser,app /app/docker/run-chrome.sh
|
|
priority=350
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:control-server]
|
|
; Browser-control HTTP endpoint on the BROWSER HOST. A remote `bot` posts
|
|
; commands here so xdotool / CDP run on THIS machine (real input on this
|
|
; screen). Only meaningful in full/browser roles. Internal network only.
|
|
command=/app/docker/run-if-role.sh full,browser,app node /app/bot/scripts/stream-test/control-server.mjs
|
|
directory=/app/bot
|
|
priority=360
|
|
autorestart=true
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|
|
|
|
[program:bot]
|
|
command=/app/docker/run-if-role.sh full,bot,app /app/docker/run-bot.sh
|
|
directory=/app/bot
|
|
priority=400
|
|
autorestart=true
|
|
startretries=999
|
|
stdout_logfile=/dev/stdout
|
|
stdout_logfile_maxbytes=0
|
|
stderr_logfile=/dev/stderr
|
|
stderr_logfile_maxbytes=0
|