FROM python:3.10-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ HOST=0.0.0.0 \ PORT=7860 \ MODEL_DIR=/app/models/supertonic-2 \ SUPERTONIC_CACHE_DIR=/app/models/supertonic-2 \ KITTEN_MODEL_NAME=KittenML/kitten-tts-micro-0.8 \ KITTEN_CACHE_DIR=/app/models/hf-cache \ KOKORO_MODEL_DIR=/app/models/kokoro \ HF_HOME=/app/models/hf-cache \ HUGGINGFACE_HUB_CACHE=/app/models/hf-cache \ WORKSPACE_DIR=/tmp/tts-server \ JOB_DB_PATH=/tmp/tts-server/jobs.db \ PERSISTENT_OUTPUT_DIR=/store \ ENABLE_MELO_TTS=true \ REQUIRE_AUTH=false RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ curl \ ffmpeg \ git \ libsndfile1 \ && rm -rf /var/lib/apt/lists/* RUN useradd -m -u 1000 user WORKDIR /app COPY --chown=user:user requirements.txt requirements-melo.txt ./ RUN pip install -r requirements.txt RUN git clone https://github.com/myshell-ai/MeloTTS.git /tmp/MeloTTS && \ pip install -e /tmp/MeloTTS COPY --chown=user:user . /app RUN mkdir -p /app/models/supertonic-2 /app/models/kokoro /app/models/hf-cache /tmp/tts-server /store && \ chown -R user:user /tmp/tts-server /store && \ python -c "from supertonic import TTS; tts = TTS(model_dir='/app/models/supertonic-2', auto_download=True); print(f'Preloaded model at {tts.model_dir}')" RUN python - <<'PY' from huggingface_hub import snapshot_download snapshot_download( repo_id='onnx-community/Kokoro-82M-v1.0-ONNX', local_dir='/app/models/kokoro', allow_patterns=['config.json', 'tokenizer.json', 'tokenizer_config.json', 'onnx/model_q8f16.onnx', 'voices/*.bin'], ) print('Preloaded Kokoro assets into /app/models/kokoro') PY RUN python - <<'PY' from kittentts import KittenTTS KittenTTS(model_name='KittenML/kitten-tts-micro-0.8', cache_dir='/app/models/hf-cache') print('Preloaded Kitten TTS assets into /app/models/hf-cache') PY RUN python -m unidic download RUN python /tmp/MeloTTS/melo/init_downloads.py RUN python - <<'PY' from melo.api import TTS TTS(language='EN', device='cpu', use_hf=True) print('Verified MeloTTS dependency in the image') PY USER user EXPOSE 7860 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]