Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README
the host bind paths + LAN host pins replaced with env defaults. Repository URLs → git.sulkta.com. Audit-changelog scaffolding stripped from inline comments (technical reasoning preserved). README sheds marketing scaffolding. AI-speak in load-bearing prompts/SOULs left alone — that IS the product.
This commit is contained in:
parent
566ca05ea8
commit
564233cbff
20 changed files with 233 additions and 258 deletions
|
|
@ -1,17 +1,13 @@
|
|||
# Sulkta build of Tortoise-TTS.
|
||||
# Tortoise-TTS. Apache 2.0 code + weights.
|
||||
#
|
||||
# Voice roster (built-in, no cloning needed): angie, daniel, deniro,
|
||||
# emma, freeman, geralt, halle, jlaw, lj, mol, myself, pat, pat2,
|
||||
# rainbow, snakes, tim_reynolds, tom, train_atkins, train_dotrice,
|
||||
# ~26 built-in voices (no cloning): angie, daniel, deniro, emma,
|
||||
# freeman, geralt, halle, jlaw, lj, mol, myself, pat, pat2, rainbow,
|
||||
# snakes, tim_reynolds, tom, train_atkins, train_dotrice,
|
||||
# train_dreams, train_grace, train_kennard, train_lescault,
|
||||
# train_mouse, weaver, william. ~26 voices baked in.
|
||||
# train_mouse, weaver, william.
|
||||
#
|
||||
# License: Apache 2.0 (code) + Apache 2.0 (model weights). Clean
|
||||
# stack for share/publish.
|
||||
#
|
||||
# Speed: slow. Trade for quality. Standard preset is ~10x slower
|
||||
# than Kokoro; high_quality is ~30x slower. Worth it for the
|
||||
# audiobook-quality bar.
|
||||
# Slow: standard preset is ~10x slower than Kokoro; high_quality is
|
||||
# ~30x. Trade for quality.
|
||||
|
||||
FROM pytorch/pytorch:2.6.0-cuda12.4-cudnn9-runtime
|
||||
|
||||
|
|
@ -37,9 +33,9 @@ RUN pip install --no-cache-dir \
|
|||
|
||||
RUN mkdir -p /cache/hf /cache/tortoise-models /audio
|
||||
|
||||
COPY tortoise_server.py /app/tortoise_server.py
|
||||
COPY server.py /app/server.py
|
||||
WORKDIR /app
|
||||
|
||||
EXPOSE 7860
|
||||
|
||||
CMD ["uvicorn", "tortoise_server:app", "--host", "0.0.0.0", "--port", "7860"]
|
||||
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "7860"]
|
||||
|
|
|
|||
|
|
@ -1,19 +1,22 @@
|
|||
# Tortoise-TTS stack on the host. Audiobook-quality engine with 25+
|
||||
# named voices (no cloning). Apache 2.0 top to bottom.
|
||||
# Tortoise-TTS sidecar. 25+ named voices, no cloning needed.
|
||||
# Apache 2.0 top to bottom.
|
||||
#
|
||||
# Slow: ~10x kokoro wall clock at 'standard' preset. Worth it for
|
||||
# the quality bar. Sulkta's call 2026-05-14: "use higgs (now tortoise)
|
||||
# and we will only let it use the full gpu for runs" — translated:
|
||||
# runs are batched, slow is acceptable.
|
||||
# Slow: ~10x kokoro wall-clock at 'standard' preset. Worth it for the
|
||||
# quality bar; runs are batched.
|
||||
#
|
||||
# Co-resides with kokoro on the 2070 Super since tortoise is ~5GB
|
||||
# and kokoro is ~1GB (8GB total). If OOM hits during a render,
|
||||
# we'll add a coordination layer to pause kokoro first.
|
||||
# Co-resides with kokoro on an 8GB card (tortoise ~5GB + kokoro ~1GB).
|
||||
# OOM during a render: add a coordinator that pauses kokoro first.
|
||||
#
|
||||
# Set in .env (or override):
|
||||
# TORTOISE_HOST_PORT=7795
|
||||
# TORTOISE_DATA=./data # ${TORTOISE_DATA}/{hf-cache,models}
|
||||
# AUDIO_DIR=../f5-tts/data/audio # shared output dir across engines
|
||||
name: tortoise
|
||||
|
||||
services:
|
||||
tortoise:
|
||||
image: registry.example.local:5000/tortoise:0.1
|
||||
build: .
|
||||
image: tortoise:0.1
|
||||
container_name: tortoise
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
|
|
@ -24,20 +27,12 @@ services:
|
|||
count: all
|
||||
capabilities: [gpu]
|
||||
ports:
|
||||
- "127.0.0.1:7795:7860"
|
||||
- "127.0.0.1:7795:7860"
|
||||
- "${TORTOISE_HOST_PORT:-7795}:7860"
|
||||
volumes:
|
||||
- /srv/appdata/tortoise/hf-cache:/cache/hf
|
||||
- /srv/appdata/tortoise/models:/cache/tortoise-models
|
||||
# Shared audio dir with f5/kokoro so skald serves all engines'
|
||||
# outputs through the same /audio route.
|
||||
- /srv/appdata/f5-tts/audio:/audio
|
||||
- ${TORTOISE_DATA:-./data}/hf-cache:/cache/hf
|
||||
- ${TORTOISE_DATA:-./data}/models:/cache/tortoise-models
|
||||
- ${AUDIO_DIR:-./data/audio}:/audio
|
||||
environment:
|
||||
HF_HOME: /cache/hf
|
||||
HF_HUB_DISABLE_TELEMETRY: "1"
|
||||
TORTOISE_MODELS_DIR: /cache/tortoise-models
|
||||
labels:
|
||||
org.sulkta.domain: "sulkta"
|
||||
org.sulkta.owner: "Sulkta"
|
||||
org.sulkta.managed-by: "compose"
|
||||
org.sulkta.role: "tortoise-tts"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
"""Tortoise-TTS FastAPI server. Sibling to kokoro_server.
|
||||
"""Tortoise-TTS FastAPI server. Sibling to the kokoro server.
|
||||
|
||||
Same /synthesize contract as the kokoro server so skald only has to
|
||||
route by voice.source. Differences:
|
||||
|
|
@ -71,7 +71,7 @@ def _get_voice(name: str) -> tuple:
|
|||
return _voice_cache[name]
|
||||
|
||||
|
||||
# ─── tag splitter (lifted from kokoro_server) ───────────────────
|
||||
# ─── tag splitter (lifted from the kokoro server) ───────────────
|
||||
|
||||
|
||||
class Node:
|
||||
|
|
@ -209,7 +209,7 @@ def _startup() -> None:
|
|||
|
||||
@app.get("/healthz")
|
||||
def healthz() -> dict:
|
||||
# Shape matches f5_server/kokoro_server so skald's HealthResponse
|
||||
# Shape matches the f5-tts + kokoro servers so skald's HealthResponse
|
||||
# struct deserializes all three.
|
||||
return {
|
||||
"ok": True,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue