linguacall-backend / scripts /models_setup.sh
Roni Egbu
feat: update models_setup.sh to install Piper TTS and voice models, and set up Python environment
3ddcabb
#!/bin/bash
# Exit on error
set -e
echo "πŸ—οΈ Creating directory structure..."
PROJECT_ROOT=$(pwd)
mkdir -p ./models/tts
# --- 1. PIPER TTS BINARY ---
echo "πŸ“₯ Installing Piper TTS binary..."
if ! command -v piper &> /dev/null; then
PIPER_URL="https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_x86_64.tar.gz"
wget -q "$PIPER_URL" -O /tmp/piper.tar.gz
sudo tar -xzf /tmp/piper.tar.gz -C /usr/local/bin/ --strip-components=1
rm /tmp/piper.tar.gz
echo "βœ… Piper installed."
else
echo "βœ… Piper already installed."
fi
# --- 2. PIPER VOICE MODELS (TTS) ---
echo "πŸ“₯ Downloading Piper voice models (low quality)..."
cd "$PROJECT_ROOT/models/tts"
# English β€” ryan low
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/ryan/low/en_US-ryan-low.onnx" \
-O en_US-ryan-low.onnx
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/ryan/low/en_US-ryan-low.onnx.json" \
-O en_US-ryan-low.onnx.json
echo " βœ… English (ryan low)"
# French β€” siwis low
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/fr/fr_FR/siwis/low/fr_FR-siwis-low.onnx" \
-O fr_FR-siwis-low.onnx
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/fr/fr_FR/siwis/low/fr_FR-siwis-low.onnx.json" \
-O fr_FR-siwis-low.onnx.json
echo " βœ… French (siwis low)"
# German β€” thorsten low
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/thorsten/low/de_DE-thorsten-low.onnx" \
-O de_DE-thorsten-low.onnx
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/thorsten/low/de_DE-thorsten-low.onnx.json" \
-O de_DE-thorsten-low.onnx.json
echo " βœ… German (thorsten low)"
# Spanish β€” mls_10246 low
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/es/es_ES/mls_10246/low/es_ES-mls_10246-low.onnx" \
-O es_ES-mls_10246-low.onnx
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/es/es_ES/mls_10246/low/es_ES-mls_10246-low.onnx.json" \
-O es_ES-mls_10246-low.onnx.json
echo " βœ… Spanish (mls_10246 low)"
# Chinese β€” huayan x_low (only available quality)
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/zh/zh_CN/huayan/x_low/zh_CN-huayan-x_low.onnx" \
-O zh_CN-huayan-x_low.onnx
wget -q "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/zh/zh_CN/huayan/x_low/zh_CN-huayan-x_low.onnx.json" \
-O zh_CN-huayan-x_low.onnx.json
echo " βœ… Chinese (huayan x_low)"
# --- 3. PYTHON ENVIRONMENT ---
echo "🐍 Setting up Python environment..."
cd "$PROJECT_ROOT/backend"
if [ ! -d "venv" ]; then
python3 -m venv venv
echo "βœ… Virtual environment created."
fi
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
echo "βœ… Python dependencies installed."
# --- 4. ARGOS TRANSLATE LANGUAGE PAIRS ---
echo "πŸ€– Installing Argos Translate language pairs..."
# Languages: English, French, German, Spanish, Chinese
# Direct pairs are installed where available.
# Pairs without a direct package (e.g. zh<->de) pivot through English at runtime.
python3 - << 'PYEOF'
import argostranslate.package
PAIRS = [
("en", "fr"), ("fr", "en"),
("en", "de"), ("de", "en"),
("en", "es"), ("es", "en"),
("en", "zh"), ("zh", "en"),
("fr", "de"), ("de", "fr"),
("fr", "es"), ("es", "fr"),
("de", "es"), ("es", "de"),
]
print("Updating Argos package index...")
argostranslate.package.update_package_index()
available = argostranslate.package.get_available_packages()
available_map = {(p.from_code, p.to_code): p for p in available}
for src, tgt in PAIRS:
pkg = available_map.get((src, tgt))
if pkg:
print(f" Installing {src} -> {tgt}...")
argostranslate.package.install_from_path(pkg.download())
print(f" βœ… {src} -> {tgt}")
else:
print(f" ⚠️ No direct package for {src} -> {tgt} (will pivot via English at runtime)")
print("Argos language packs installed.")
PYEOF
# --- 5. SYSTEM DEPENDENCIES CHECK ---
echo "πŸ” Checking system dependencies..."
if ! command -v ffmpeg &> /dev/null; then
echo "⚠️ WARNING: FFmpeg not found. Install it with: sudo apt install ffmpeg"
else
echo "βœ… FFmpeg found."
fi
if ! command -v wget &> /dev/null; then
echo "⚠️ WARNING: wget not found. Install it with: sudo apt install wget"
else
echo "βœ… wget found."
fi
echo "-----------------------------------------------"
echo "βœ… Setup complete! All models and language packs ready."
echo ""
echo "πŸš€ To start the backend:"
echo " cd backend && source venv/bin/activate"
echo " python3 -m app.main"
echo ""
echo "⚠️ NOTE: Whisper model (faster-whisper 'base') downloads automatically"
echo " on first startup (~150MB). Subsequent starts use the cached version."