- App Routing's output-voice field gets the same searchable avatar-thumbnail dropdown used elsewhere, as a browse button alongside the existing free-text input (which must stay editable to target vd_ Voice Design presets not in the voice library). - My Voices table: Gender and Rating filter dropdowns existed in the JS (populateLibraryFilters, libraryFilterMatch) but their <select> elements had been dropped from the visible layout after an earlier redesign, replaced with hidden dead placeholders just to keep the code from erroring - and since populateLibraryFilters() early-returns if any of the three elements are missing, this silently broke the already-visible Language/Type dropdowns too. Restored the real elements and removed the hidden scaffold; added new Tag and Group dropdowns wired to the same filter state the sidebar chips use. - Audio effects failing with "pedalboard is not installed" despite requirements.txt listing it: the package WAS installed, but its native extension (pedalboard_native) links against libatomic.so.1, an OS-level shared library missing from the python:3.11-slim-bookworm base image. Added libatomic1 to the Dockerfile and rebuilt - verified `import pedalboard` now succeeds in the running container. - Relabeled "edit ID"/"copy ID" to "rename filename"/"copy filename" in the voice inspector - the feature already renamed the underlying .wav/.meta.json/.reference.txt/picture files via the existing /api/voice/rename endpoint, it just wasn't obvious "ID" meant "filename." Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
3.4 KiB
Docker
57 lines
3.4 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 ───────────────────────────────────────────────────────────
|
|
# libatomic1: pedalboard's native extension (pedalboard_native) links against
|
|
# libatomic.so.1 and fails to import without it — pip installs the Python
|
|
# package fine, but the C extension silently can't load at runtime.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ffmpeg \
|
|
curl \
|
|
ca-certificates \
|
|
libatomic1 \
|
|
&& 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"]
|