[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