#!/bin/bash # ============================================================================ # Entrypoint tts-server: avvia il server, attende /health, poi registra le # voci clonate (.spk/.rvq) trovate in VOICE_DIR. # Tutti i parametri sono configurabili via variabili d'ambiente. # ============================================================================ set -e MODEL=${MODEL_PATH:-/models/qwen-talker-1.7b-base-Q8_0.gguf} CODEC=${CODEC_PATH:-/models/qwen-tokenizer-12hz-Q8_0.gguf} LANG=${TTS_LANG:-auto} HOST=${HOST:-0.0.0.0} PORT=${PORT:-8881} ALIAS=${MODEL_ALIAS:-} VOICE_DIR=${VOICE_DIR:-/voices} extra_args=() [ -n "$ALIAS" ] && extra_args+=(--alias "$ALIAS") [ -n "$CODEC_CHUNK_DUR" ] && extra_args+=(--codec-chunk-dur "$CODEC_CHUNK_DUR") [ -n "$CODEC_LEFT_DUR" ] && extra_args+=(--codec-left-dur "$CODEC_LEFT_DUR") [ -n "$MAX_BATCH" ] && extra_args+=(--max-batch "$MAX_BATCH") [ -n "$TTS_KV_CACHE" ] && extra_args+=(--kv-cache "$TTS_KV_CACHE") [ -n "$MAX_PREFILL_TOKENS" ] && extra_args+=(--max-prefill-tokens "$MAX_PREFILL_TOKENS") [ "$NO_FA" = "1" ] && extra_args+=(--no-fa) [ "$CLAMP_FP16" = "1" ] && extra_args+=(--clamp-fp16) echo "[tts] avvio tts-server (model=$MODEL codec=$CODEC lang=$LANG port=$PORT)" /app/tts-server \ --model "$MODEL" \ --codec "$CODEC" \ --lang "$LANG" \ --host "$HOST" \ --port "$PORT" \ "${extra_args[@]}" & SERVER_PID=$! until curl -sf "http://localhost:${PORT}/health" > /dev/null 2>&1; do kill -0 "$SERVER_PID" 2>/dev/null || { echo "[tts] tts-server uscito prima di diventare healthy" >&2; wait "$SERVER_PID"; } sleep 1 done echo "[tts] server pronto su :${PORT}" if [ -d "$VOICE_DIR" ] && [ -n "$(ls -A "$VOICE_DIR" 2>/dev/null)" ]; then echo "[tts] registrazione voci da $VOICE_DIR ..." VOICE_DIR="$VOICE_DIR" TTS_PORT="$PORT" python3 /app/register_voices.py || echo "[tts] registrazione voci fallita (il server continua)" else echo "[tts] nessuna voce in $VOICE_DIR, salto registrazione" fi wait $SERVER_PID