# Dockerfile FROM python:3.10-slim WORKDIR /app # ── System deps ────────────────────────────────────────────────── RUN apt-get update && apt-get install -y --no-install-recommends \ libgl1 libglib2.0-0 libgomp1 git \ && rm -rf /var/lib/apt/lists/* # ── Python deps ────────────────────────────────────────────────── COPY requirements.txt . RUN pip install --no-cache-dir --compile -r requirements.txt # ── Copy application code ──────────────────────────────────────── COPY . . RUN mkdir -p temp_uploads saved_images && chmod -R 777 temp_uploads saved_images # ── Pre-download ALL models at build time ─────────────────────── # V3: Added InsightFace buffalo_sc (YuNet + ArcFace) # Replaces DeepFace + RetinaFace + GhostFaceNet entirely RUN python - <<'EOF' import os os.environ["TRANSFORMERS_VERBOSITY"] = "error" print("Pre-downloading SigLIP...") from transformers import AutoProcessor, AutoModel AutoProcessor.from_pretrained("google/siglip-base-patch16-224", use_fast=True) AutoModel.from_pretrained("google/siglip-base-patch16-224") print("SigLIP done") print("Pre-downloading DINOv2...") from transformers import AutoImageProcessor AutoImageProcessor.from_pretrained("facebook/dinov2-base") AutoModel.from_pretrained("facebook/dinov2-base") print("DINOv2 done") print("Pre-downloading YOLO seg...") from ultralytics import YOLO YOLO("yolo11n-seg.pt") print("YOLO done") print("Pre-downloading InsightFace buffalo_sc (YuNet + ArcFace)...") from insightface.app import FaceAnalysis app = FaceAnalysis(name="buffalo_sc", providers=["CPUExecutionProvider"]) app.prepare(ctx_id=-1, det_size=(640, 640)) print("InsightFace buffalo_sc done") print("All V3 models cached!") EOF EXPOSE 7860 ENV WEB_CONCURRENCY=1 CMD uvicorn main:app \ --host 0.0.0.0 \ --port 7860 \ --workers ${WEB_CONCURRENCY} \ --timeout-keep-alive 75