# ───────────────────────────────────────────────────────────────────────────── # TTS Voice Creator - Clone and Design — Docker image (ARM64 / aarch64 compatible) # # Web app (FastAPI + WaveSurfer.js) — no VNC, no Qt, no X11. # Accessible on port 7890 via any browser. # ───────────────────────────────────────────────────────────────────────────── FROM python:3.11-slim-bookworm ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 # ── System packages ─────────────────────────────────────────────────────────── RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ curl \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # ── Python dependencies ─────────────────────────────────────────────────────── COPY requirements.txt /tmp/requirements.txt RUN pip install --no-cache-dir -r /tmp/requirements.txt # ── Application ─────────────────────────────────────────────────────────────── WORKDIR /app COPY server.py . COPY CHANGELOG.md . COPY VERSION . COPY core/ core/ COPY routes/ routes/ COPY static/ static/ # ── Vendor Tesseract.js (client-side OCR for image-based PDF chapter headings) ─ # Skipped if already present (e.g. bind-mounted from host during development). RUN [ -f static/js/tesseract/tesseract.min.js ] || ( \ mkdir -p static/js/tesseract/lang && \ curl -sL -o static/js/tesseract/tesseract.min.js "https://unpkg.com/tesseract.js@5.1.1/dist/tesseract.min.js" && \ curl -sL -o static/js/tesseract/worker.min.js "https://unpkg.com/tesseract.js@5.1.1/dist/worker.min.js" && \ curl -sL -o static/js/tesseract/tesseract-core-simd-lstm.wasm.js "https://unpkg.com/tesseract.js-core@5.1.1/tesseract-core-simd-lstm.wasm.js" && \ curl -sL -o static/js/tesseract/tesseract-core-simd-lstm.wasm "https://unpkg.com/tesseract.js-core@5.1.1/tesseract-core-simd-lstm.wasm" && \ curl -sL -o static/js/tesseract/lang/deu.traineddata.gz "https://tessdata.projectnaptha.com/4.0.0_fast/deu.traineddata.gz" && \ curl -sL -o static/js/tesseract/lang/eng.traineddata.gz "https://tessdata.projectnaptha.com/4.0.0_fast/eng.traineddata.gz" \ ) # ── Runtime user ────────────────────────────────────────────────────────────── RUN mkdir -p /voices/active_voices /voices/hidden_voices /home/app/.config/tts-voice-creator && \ useradd -m -s /bin/bash app && \ chown -R app:app /app /voices /home/app USER app EXPOSE 7890 CMD ["python3", "server.py"]