FROM python:3.12-slim # Install FFmpeg + git RUN apt-get update && \ apt-get install -y --no-install-recommends ffmpeg git && \ rm -rf /var/lib/apt/lists/* # Create non-root user (HF Spaces requirement) RUN useradd -m -u 1000 user WORKDIR /app # Install Python dependencies (cache layer) RUN pip install --no-cache-dir \ "fastapi[standard]>=0.115.0" \ "uvicorn[standard]>=0.32.0" \ "sqlalchemy[asyncio]>=2.0.0" \ "aiosqlite>=0.20.0" \ "pydantic>=2.0.0" \ "pydantic-settings>=2.0.0" \ "python-jose[cryptography]>=3.3.0" \ "passlib[bcrypt]>=1.7.4" \ "python-multipart>=0.0.9" \ "httpx>=0.27.0" \ "edge-tts>=6.1.0" \ "Pillow>=10.0.0" \ "pymupdf>=1.24.0" \ "opencv-python-headless>=4.9.0" \ "numpy>=1.26.0" \ "pocket-tts>=0.1.0" \ "huggingface-hub>=0.20.0" \ "scipy>=1.12.0" \ "safetensors>=0.4.0" \ "pyarrow>=15.0.0" \ "soundfile>=0.12.0" # Copy application code COPY app/ app/ COPY data/*.json data/ COPY scripts/ scripts/ COPY deploy/start.sh . RUN chmod +x start.sh # Create directories with correct permissions RUN mkdir -p /data/workdir/projects /data/genshin_voices /data/animevox_voices && \ chown -R user:user /app /data USER user EXPOSE 7860 CMD ["./start.sh"]