Diffusers
MuseTalk1.5 / server /install.sh
Marcos
Remove hardcoded HF token from scripts
a367435
Raw
History Blame Contribute Delete
9.68 kB
#!/bin/bash
#
# MuseTalk Server - Complete Installation Script
# Installs: vLLM (Gemma 3 1B), Whisper, models, and all dependencies
#
set -e
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "β•‘ MUSETALK SERVER - INSTALLATION β•‘"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
echo ""
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BASE_DIR="$(dirname "$SCRIPT_DIR")"
cd "$BASE_DIR"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
success() { echo -e "${GREEN}βœ“${NC} $1"; }
warn() { echo -e "${YELLOW}⚠${NC} $1"; }
error() { echo -e "${RED}βœ—${NC} $1"; }
info() { echo -e " $1"; }
# ============================================================
# 1. SYSTEM DEPENDENCIES
# ============================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "[1/6] Checking system dependencies..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Check for required commands
MISSING_DEPS=""
if ! command -v ffmpeg &> /dev/null; then
MISSING_DEPS="$MISSING_DEPS ffmpeg"
fi
if ! command -v espeak-ng &> /dev/null; then
MISSING_DEPS="$MISSING_DEPS espeak-ng"
fi
if ! command -v cmake &> /dev/null; then
MISSING_DEPS="$MISSING_DEPS cmake"
fi
if [ -n "$MISSING_DEPS" ]; then
warn "Missing dependencies:$MISSING_DEPS"
info "Installing with apt..."
sudo apt-get update -qq
sudo apt-get install -y -qq ffmpeg espeak-ng cmake build-essential
success "System dependencies installed"
else
success "System dependencies already installed"
fi
# ============================================================
# 2. VLLM INSTALLATION (Gemma 3 1B)
# ============================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "[2/6] Installing vLLM (Gemma 3 1B - fast inference)..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if python3 -c "import vllm" 2>/dev/null; then
VLLM_VERSION=$(python3 -c "import vllm; print(vllm.__version__)" 2>/dev/null)
success "vLLM already installed: v$VLLM_VERSION"
else
info "Installing vLLM (this may take a few minutes)..."
pip install vllm --quiet
success "vLLM installed"
fi
# Pre-download Gemma 3 1B model
info "Pre-downloading Gemma 3 1B model..."
export HF_HOME=/tmp/hf_vllm
# HF_TOKEN should be set in environment or .env file
export HF_TOKEN="${HF_TOKEN:-}"
export HUGGING_FACE_HUB_TOKEN="${HF_TOKEN:-}"
mkdir -p /tmp/hf_vllm
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('google/gemma-3-1b-it', local_files_only=False)
print('Model downloaded')
" 2>/dev/null || warn "Model will be downloaded on first start"
success "Gemma 3 1B model ready"
# ============================================================
# 3. DISTIL-WHISPER PT-BR INSTALLATION (STT)
# ============================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "[3/6] Installing Distil-Whisper PT-BR (STT)..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Install Python dependencies for Distil-Whisper
info "Installing transformers and dependencies..."
pip install transformers accelerate librosa --quiet
# Pre-download Distil-Whisper PT-BR model
info "Pre-downloading Distil-Whisper PT-BR model..."
export HF_HOME=/tmp/hf_whisper
mkdir -p /tmp/hf_whisper
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('freds0/distil-whisper-large-v3-ptbr', local_files_only=False)
print('Model downloaded')
" 2>/dev/null || warn "Model will be downloaded on first start"
success "Distil-Whisper PT-BR ready (~47ms latency)"
cd "$BASE_DIR"
# ============================================================
# 4. PYTHON DEPENDENCIES
# ============================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "[4/6] Installing Python dependencies..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Check if key packages are installed
MISSING_PY=""
python3 -c "import fastapi" 2>/dev/null || MISSING_PY="$MISSING_PY fastapi"
python3 -c "import uvicorn" 2>/dev/null || MISSING_PY="$MISSING_PY uvicorn"
python3 -c "import httpx" 2>/dev/null || MISSING_PY="$MISSING_PY httpx"
python3 -c "import aiortc" 2>/dev/null || MISSING_PY="$MISSING_PY aiortc"
python3 -c "import av" 2>/dev/null || MISSING_PY="$MISSING_PY av"
if [ -n "$MISSING_PY" ]; then
info "Installing:$MISSING_PY"
pip install fastapi uvicorn httpx aiortc av aiofiles python-multipart --quiet
success "Python dependencies installed"
else
success "Python dependencies already installed"
fi
# ============================================================
# 5. MUSETALK MODELS
# ============================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "[5/6] Downloading MuseTalk models..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
mkdir -p "$BASE_DIR/models"
cd "$BASE_DIR"
# Download MuseTalk models from HuggingFace
info "Downloading MuseTalk models (this may take a while)..."
export HF_HOME=/tmp/hf_musetalk
python3 -c "
from huggingface_hub import snapshot_download
import os
models_dir = '$BASE_DIR/models'
# MuseTalk main model
print('Downloading MuseTalk model...')
snapshot_download('TMElyralab/MuseTalk', local_dir=f'{models_dir}/musetalk', local_dir_use_symlinks=False)
# SD VAE
print('Downloading SD VAE...')
snapshot_download('stabilityai/sd-vae-ft-mse', local_dir=f'{models_dir}/sd-vae-ft-mse', local_dir_use_symlinks=False)
# DWPose
print('Downloading DWPose...')
snapshot_download('yzd-v/DWPose', local_dir=f'{models_dir}/dwpose', local_dir_use_symlinks=False)
# Face parsing
print('Downloading face-parse-bisent...')
snapshot_download('jonathandinu/face-parsing', local_dir=f'{models_dir}/face-parse-bisent', local_dir_use_symlinks=False)
print('All models downloaded!')
" 2>&1 || warn "Some models may need to be downloaded on first run"
success "MuseTalk models ready"
# ============================================================
# 6. CREATE DIRECTORIES
# ============================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "[6/6] Setting up directories..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
mkdir -p "$BASE_DIR/server/avatar_videos"
mkdir -p "$BASE_DIR/server/avatar_cache"
mkdir -p "$BASE_DIR/results/server"
mkdir -p "$BASE_DIR/cache"
success "Directories created"
# ============================================================
# INSTALLATION COMPLETE
# ============================================================
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "β•‘ INSTALLATION COMPLETE! β•‘"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
echo ""
echo "Installed components:"
echo " βœ“ vLLM + Gemma 3 1B (LLM, ~100ms)"
echo " βœ“ Distil-Whisper PT-BR (STT, ~47ms)"
echo " βœ“ MuseTalk models (lip-sync generation)"
echo " βœ“ Python dependencies"
echo ""
echo "To start the server, run:"
echo ""
echo " bash server/start.sh"
echo ""
echo "This will:"
echo " 1. Start vLLM with Gemma 3 1B + 5 warmup inferences"
echo " 2. Start Distil-Whisper PT-BR + 5 warmup inferences"
echo " 3. Start MuseTalk server + 5 warmup inferences"
echo " 4. Keep all models in GPU memory for fast inference"
echo ""