Files
esh-pfi-infrastructure/stacks/qwen3-tts/.env.example
T
vh 9835fd47eb qwen3-tts: switch default to -CustomVoice variant; chatterbox: fix paralinguistic tag list in README
qwen3-tts: deploy was using the -Base checkpoint, which sounds like
the right one ("supports voice cloning") but the upstream wrapper's
only synthesis path goes through generate_custom_voice. The -Base
variant doesn't expose that, so every request — including ones with
the wrapper's listed built-in voices like Ryan/Vivian — errored with
"does not support generate_custom_voice". The -CustomVoice variant
exposes both the cloning machinery and the preset voices, and is
what the wrapper actually needs.

The .env.example comments had the variant labels backward; fixed in
this commit. Live host already updated to -CustomVoice via direct
.env edit (model downloaded on container restart).

chatterbox README listed [whisper] and [breath] as supported tags —
those are in the base Chatterbox tag set but NOT in the Turbo set
that's actually loaded. Replaced with the canonical 9-tag list
verified against /api/model-info: laugh, chuckle, sigh, gasp, cough,
clear throat, sniff, groan, shush.
2026-04-27 21:54:13 -07:00

68 lines
3.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qwen3-TTS stack tunables. Copy to `.env` on irv-ml1 before deploying.
# ── build pin ────────────────────────────────────────────────────────
# SHA of groxaxo/Qwen3-TTS-Openai-Fastapi to build from. Bump + rebuild
# when you want upstream wrapper updates.
QWEN3_TTS_SHA=10323ce778c48a75dbda93d0a4891983fb371f58
# Local image tag — bump when you change build context to force a
# fresh layer build. v2 = first GPU build (target=production); v1
# was the accidental CPU-only image (last stage of upstream's
# multi-stage Dockerfile).
QWEN3_TTS_TAG=v2
# ── network ──────────────────────────────────────────────────────────
# Host port (container listens on 8880 internally).
QWEN3_TTS_PORT=8191
# Bind address. 0.0.0.0 exposes on all interfaces (incl. WG tunnel
# interface 10.100.79.3); 127.0.0.1 restricts to local-only.
QWEN3_TTS_BIND=0.0.0.0
# ── runtime ──────────────────────────────────────────────────────────
# Inference backend. `official` = default upstream; `optimized` =
# faster but slightly less robust; `vllm_omni` = vLLM-backed (needs
# more VRAM); `pytorch` = bare pytorch path.
QWEN3_TTS_BACKEND=official
# Model variant. Upstream publishes four checkpoints on HF:
# Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice — flagship, supports voice cloning + preset voices (RECOMMENDED)
# Qwen/Qwen3-TTS-12Hz-1.7B-Base — flagship, foundation only — REJECTS all synthesis through this wrapper
# Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice — lightweight cloning-capable variant
# Qwen/Qwen3-TTS-12Hz-0.6B-Base — lightweight foundation only
# 1.7B = ~6–8 GB VRAM bfloat16, best quality. 0.6B = ~2–3 GB.
#
# IMPORTANT: the wrapper's only synthesis code path goes through the
# voice cloning machinery. The -Base variants do NOT expose
# generate_custom_voice; they error with "does not support
# generate_custom_voice" on every request, no matter what voice you
# specify (built-ins like Ryan, Vivian etc. count as custom voices).
# Use -CustomVoice. The Base variant is foundation-model territory
# that needs a different harness to be useful.
# (This file had the labels backwards through 2026-04-27 — fixed
# after the 2026-04-27 voice-fleet bench surfaced the failure mode.)
QWEN3_TTS_MODEL=Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
# Warm the model on container start so the first synthesis request
# doesn't pay the load latency. Adds ~30 s to startup. Recommended.
QWEN3_TTS_WARMUP=true
# Concurrency cap on synthesis requests. Single GPU + 1.7B model →
# leave at 1 unless you're load-testing.
QWEN3_TTS_MAX_CONCURRENT=1
# Mount the gradio voice-studio UI at /voice-studio for browser-side
# voice cloning. Set "false" to disable for headless deployments.
QWEN3_TTS_VOICE_STUDIO=true
# ── persistent storage on the host ───────────────────────────────────
# HuggingFace cache (model weights, ~5 GB after first run). Bind-mounted
# so model state survives container recreate. Excluded from restic
# (regenerable from HF Hub).
QWEN3_TTS_CACHE_DIR=/worktank/qwen3-tts/cache
# Cloned voice profiles (meta.json + reference.wav per voice). Precious
# — cloned voices need the original reference audio to recreate.
# Included in restic.
QWEN3_TTS_VOICES_DIR=/worktank/qwen3-tts/voices