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,13 +1,8 @@
|
|||
# Sulkta build of Kokoro-82M TTS.
|
||||
# Kokoro-82M TTS. Apache 2.0 code AND weights — clean stack vs
|
||||
# F5-TTS's CC-BY-NC asterisk.
|
||||
#
|
||||
# License: Apache 2.0 (code AND model weights). Clean stack — no
|
||||
# CC-BY-NC asterisk like F5-TTS's Emilia weights. This is the
|
||||
# narrator engine for sleep-quality audiobook reads; F5-TTS stays
|
||||
# around for voice-cloning cases.
|
||||
#
|
||||
# Kokoro is small enough to run on CPU but we use the cuda base
|
||||
# anyway to stay consistent with f5-tts and so it'll pick up the
|
||||
# GPU when no other tenant has it.
|
||||
# Kokoro runs fine on CPU but we use the cuda base to stay
|
||||
# consistent with f5-tts and pick up the GPU when free.
|
||||
FROM pytorch/pytorch:2.6.0-cuda12.4-cudnn9-runtime
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive \
|
||||
|
|
@ -27,9 +22,9 @@ RUN pip install --no-cache-dir 'kokoro>=0.9.0' 'fastapi>=0.115.0' 'uvicorn>=0.32
|
|||
|
||||
RUN mkdir -p /cache/hf /audio
|
||||
|
||||
COPY kokoro_server.py /app/kokoro_server.py
|
||||
COPY server.py /app/server.py
|
||||
WORKDIR /app
|
||||
|
||||
EXPOSE 7860
|
||||
|
||||
CMD ["uvicorn", "kokoro_server:app", "--host", "0.0.0.0", "--port", "7860"]
|
||||
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "7860"]
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
# Kokoro-82M TTS stack on the host.
|
||||
# Kokoro-82M TTS sidecar.
|
||||
#
|
||||
# Audiobook-quality narrator engine (Apache 2.0 code + weights —
|
||||
# clean stack vs F5-TTS's CC-BY-NC asterisk). Sibling to f5-tts;
|
||||
# both share /srv/appdata/f5-tts/audio so skald's audio
|
||||
# route serves outputs from either engine through the same path.
|
||||
# Apache 2.0 code AND model weights — clean stack for share/publish.
|
||||
# Audiobook-quality narrator; F5-TTS stays around for voice-cloning.
|
||||
#
|
||||
# License: Apache 2.0 top to bottom. Right for share/publish.
|
||||
# Set in .env (or override):
|
||||
# KOKORO_HOST_PORT=7794
|
||||
# KOKORO_DATA=./data # ${KOKORO_DATA}/hf-cache
|
||||
# AUDIO_DIR=../f5-tts/data/audio # shared output dir across engines
|
||||
name: kokoro
|
||||
|
||||
services:
|
||||
kokoro:
|
||||
image: registry.example.local:5000/kokoro:0.5
|
||||
build: .
|
||||
image: kokoro:0.5
|
||||
container_name: kokoro
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
|
|
@ -21,17 +23,10 @@ services:
|
|||
count: all
|
||||
capabilities: [gpu]
|
||||
ports:
|
||||
- "127.0.0.1:7794:7860"
|
||||
- "127.0.0.1:7794:7860"
|
||||
- "${KOKORO_HOST_PORT:-7794}:7860"
|
||||
volumes:
|
||||
- /srv/appdata/kokoro/hf-cache:/cache/hf
|
||||
# Shared with f5-tts so skald's /audio route covers both.
|
||||
- /srv/appdata/f5-tts/audio:/audio
|
||||
- ${KOKORO_DATA:-./data}/hf-cache:/cache/hf
|
||||
- ${AUDIO_DIR:-./data/audio}:/audio
|
||||
environment:
|
||||
HF_HOME: /cache/hf
|
||||
HF_HUB_DISABLE_TELEMETRY: "1"
|
||||
labels:
|
||||
org.sulkta.domain: "sulkta"
|
||||
org.sulkta.owner: "Sulkta"
|
||||
org.sulkta.managed-by: "compose"
|
||||
org.sulkta.role: "kokoro"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
"""Kokoro-82M FastAPI server, sibling to f5_server.
|
||||
"""Kokoro-82M FastAPI server, sibling to the f5-tts server.
|
||||
|
||||
Same /synthesize contract as F5 so skald can route between engines
|
||||
just by which URL it points at. The semantic difference: Kokoro
|
||||
|
|
@ -234,7 +234,7 @@ def _startup() -> None:
|
|||
|
||||
@app.get("/healthz")
|
||||
def healthz() -> dict:
|
||||
# Shape matches f5_server's so the same Rust HealthResponse
|
||||
# Shape matches the f5-tts server's so the same Rust HealthResponse
|
||||
# struct deserializes both: model/vocoder/loaded fields are
|
||||
# required by skald-core::narrate::HealthResponse.
|
||||
return {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue