- Add a 6-stage pipeline stepper (Source -> Cast Audiobook -> Cast Characters -> Script Rehearser -> Generate MP3s -> Audiobook) with direct, non-destructive jumps between stages and a prominent guided-tour look - Split PDF import into an explicit "load" then "Extract Text" step, with in-browser OCR (Tesseract.js, vendored) to recover chapter headlines baked into a PDF as images instead of real text - Fix casting feed silently merging pages after leaving/returning: segments now carry their own page number instead of re-guessing it from text - Fix excessive "Unknown" speaker attribution: restore the attribution LLM's output token budget, which had been cut roughly in half and was truncating dialogue-dense passages - Fix Theater Play library cards failing to open (dead pre-migration IndexedDB API calls, missing section navigation) - Fix bulk "Set tag" wiping a voice's existing tags instead of adding to them - Start merging Casting's feed with Script Rehearser's Stage UI: collapsible character sidebar, shared "paper" page styling, inline text editing - Fix a performance regression from that merge (per-row listeners on every redraw) by moving to event delegation - Various layout/clutter fixes: hide reader chrome until a document is loaded, collapse secondary settings by default, fix overlapping toolbar icons, fix duplicate "opening" notifications Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
3.2 KiB
Docker
53 lines
3.2 KiB
Docker
# ─────────────────────────────────────────────────────────────────────────────
|
|
# 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"]
|