| # Dockerfile for Hugging Face Spaces deployment | |
| # Uses uv for fast dependency management | |
| FROM python:3.12-slim | |
| # Set working directory | |
| WORKDIR /app | |
| # Install system dependencies | |
| # - libsndfile1: Required by soundfile for audio I/O | |
| # - ffmpeg: Required by whisper for audio processing | |
| # - git: Required for some pip installs | |
| # - build-essential: Required to compile wheels like webrtcvad | |
| # - curl: Required by HEALTHCHECK | |
| RUN apt-get update && apt-get install -y \ | |
| libsndfile1 \ | |
| ffmpeg \ | |
| git \ | |
| build-essential \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Install uv | |
| COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv | |
| # Copy project files | |
| COPY pipeline_modules/ ./pipeline_modules/ | |
| COPY approaches/ ./approaches/ | |
| COPY pyproject.toml uv.lock* ./ | |
| COPY README.md ./ | |
| COPY main.py app.py ./ | |
| # Create data directory (optional, for example files) | |
| RUN mkdir -p data output | |
| # Install dependencies with uv | |
| # --system: Install to system Python instead of creating a venv | |
| # --no-dev: Skip dev dependencies | |
| RUN uv sync --frozen --no-dev --extra asr | |
| # Expose Streamlit port (HF Spaces uses 7860) | |
| EXPOSE 7860 | |
| # Health check | |
| HEALTHCHECK CMD curl --fail http://localhost:7860/_stcore/health || exit 1 | |
| # Run Streamlit | |
| # --server.port=7860: HF Spaces default port | |
| # --server.address=0.0.0.0: Listen on all interfaces | |
| # --server.headless=true: Run in headless mode | |
| # --browser.gatherUsageStats=false: Disable telemetry | |
| CMD ["uv", "run", "streamlit", "run", "app.py", \ | |
| "--server.port=7860", \ | |
| "--server.address=0.0.0.0", \ | |
| "--server.headless=true", \ | |
| "--server.enableCORS=false", \ | |
| "--server.enableXsrfProtection=false", \ | |
| "--browser.gatherUsageStats=false"] | |